Microsoftは5月1日(米国時間)、「“Dirty stream” attack: Discovering and mitigating a common vulnerability pattern in Android apps|Microsoft Security Blog」において、人気がある複数のAndroidアプリからパストラバーサルの脆弱性が発見されたとして、注意を喚起した。この脆弱性を悪用されると、標的のアプリ内のファイルを窃取または上書きされる可能性がある。
ダーティーストリーム攻撃の概要
Androidではアプリごとに専用のデータ領域が割り当てられ、アプリ間のやり取りはコンテンツプロバイダー(ContentProvider)と呼ばれるコンポーネントを介して行われる。この仕組みにより、アプリが直接他のアプリのデータ領域にアクセスすることを防止しており、悪意のあるアプリから他のアプリを保護している。
アプリが他のアプリとファイルを共有する場合、コンテンツプロバイダーのFileProviderクラスを利用することになる。FileProviderを利用するにはアプリのマニフェストに宣言を記述し、パスを設定する。そのうえでアプリに必要な実装をすると、「content」スキームを使用したURIからアクセスできるようになる。
今回発見された脆弱性は、カスタムの「明示的インテント」を作成し、悪意のあるファイル名を共有ターゲットに直接送信する手法とされる(参考:「インテントとインテントフィルター | Android Developers」)。コンテンツプロバイダーを介して送信されるパスを確認せずに使用すると、想定していないファイルに不正アクセスされる可能性がある。Microsoftはこの脆弱性を悪用する攻撃を「ダーティーストリーム攻撃」と名付けている。
脆弱性の影響と対策
この脆弱性はGoogle Play公式ストアから配布されている複数の人気アプリに存在することが確認されている。これらアプリの合計ダウンロード数は40億回以上とされ、多くのエンドユーザーに影響しているものとみられている。同社が脆弱性が抱えていることを特定したアプリケーションとして、Xiaomiの File Manager (10 億以上インストール) とWPS Office (5 億以上のインストール) が挙げられている。
脆弱性の影響はアプリのローカルファイルにとどまらない。アプリが資格情報を平文で保持している場合、その資格情報を窃取される可能性がある。Xiaomiの「Mi File Manager」などのファイルマネージャーはFTPやSMB接続をサポートしており、その資格情報を平文で保存している。そのため、この脆弱性を悪用されると悪意のあるアプリやファイルマネージャーを介してデータを窃取される可能性がある。
Microsoftはこの脆弱性の影響を回避するため、アプリの開発者にコンテンツプロバイダーを介して送られてくるパスを完全に無視するように推奨している。この対応ができない場合、指定されたパスがアクセスを許可したファイルを指しているか確実な方法で検証する必要がある。なお、Uri.getLastPathSegment()を使用してファイル名のみを取得する実装も、エンコードされた文字を使用することで攻撃可能とされる。そのため、パスの一部のみを利用する場合においても確実な方法で検証する必要がある。
Androidのエンドユーザーにはアプリを最新の状態に保ち、公式ストアから配布されるアプリのみをインストールすることが推奨されている。この脆弱性は悪意のあるアプリを介して攻撃が実行されるため、悪意のあるアプリのインストールを回避することが重要となる。MicrosoftはXiaomiのアプリを通じてSMBまたはFTP共有にアクセスしていたユーザーに対し、認証情報をリセットし、異常な動作がないか調査することを推奨している。