ブログ

FFRI BLOG

2013-04-08 Firefox for Android のディレクトリパーミッションの問題に関する報告


新技術開発部の鈴木です。

4月2日にMozillaより、以前に報告していた脆弱性について修正されたものがリリースされました。

セキュリティアドバイザリについては、以下で確認できます。

Security Advisories for Firefox

Mozilla Foundation Security Advisory 2013-33


今回は、その詳細について説明しようと思います。

この脆弱性はAndroidでのMITB攻撃の調査の中で発見したものでした。これまでのMonthly Researchでもお伝えしている通り、Androidの場合、各プロセスが別のUIDで動作しているため、簡単に他プロセスのメモリ書き換えなどができず、MITB攻撃の手法も比較的限られます。

その中の一つとして、Firefox for Androidのアドオンを利用した方法について、実際にMITB攻撃に利用できるかという点を考えました。

結論としてはユーザーが悪意あるアドオンをインストールしてしまえば、閲覧中のウェブページの書き換え、送信データの改ざんが行われる可能性があり、オンラインバンクなどを狙った典型的なMITB攻撃が可能であるということがわかりました。

そのため、対策としては信頼できないアドオンをインストールしないということになります。AMO(http://addons.mozilla.org)で配布されているものは一定の審査を通過しているものであるため、ここで配布されているもの以外はインストールしないというのがよい対策となると思います。


ここまでの結論を得たうえで、さらに、このアドオンの書き換えを別のアプリからできてしまうようなことがないかということを考えました。

アドオンはファイルであるため、Firefox for Androidからのみアクセスできるフォルダに保存してあるのだろうと考え、Android上でファイルシステムを確認しました。

Firefox for Androidのアドオンは以下のパスにおいてあります。

/data/data/org.mozilla.firefox/files/mozilla/[xxxxx].default/extensions

([xxxxx]は各環境により異なる文字列)

extensionsディレクトリのパーミッションは755、その中に保存してあるアドオン(xpi)ファイルは644であり、他のプロセスはそこにファイルを作成することもできなければ、ファイルの中身を書き換えることもできません。


次に、アドオンのインストール時の挙動を確認しました。Firefox for Androidでアドオンをインストールする場合以下のような流れになります。

  1. アドオン(xpiファイル)へのリンクをタップ
  2. Firefox for Androidがアドオンをダウンロード
  3. ユーザーにアドオンをインストールしてよいか確認(Yes/Noダイアログ)
  4. 3.でYesの場合、アドオンをインストール

最終的には上で説明したextensionsディレクトリにファイルはコピーされるわけですが、ここで3.でユーザーからの入力を待っている時間があります。

このとき、Firefox for Androidは2.でダウンロードしたファイルを/data/data/org.mozilla.firefox/app_tmpディレクトリ内に格納しています。

このフォルダを確認すると777、またここにあるアドオンのファイルは644となっています。

これは、このディレクトリ内でファイルの作成、ファイルの名前の変更を行うことができることを意味します。

3.のタイミングで別のアドオンをそこに配置し、ダウンロードしてきたファイル名と同じ名前で保存すれば(ダウンロードしてきファイルの名前はまた別のものにして)、ユーザーがYesをタップした時点で別のアドオンがインストールされてしまいます。

現実的な脅威になるためには、この3.のタイミングを他のアプリが知ることができなくてはいけませんが、AndroidにはFileObserverというクラスがあり、特定のディレクトリ下にファイルが作られたことを知ることができます。これを利用してアドオンを置き換えることができます。


現実的な脅威のシナリオは以下の通りです。

  • ユーザーが悪意あるアプリをインストール、実行する(表面上は例えばバッテリーモニタなどと偽って動作する)
  • 悪意あるアプリはFileObserverを利用し/data/data/org.mozilla.firefox/app_tmp内にファイルが作成されるのを待つ
  • ユーザーがFirefox for Androidを起動し、アドオンをインストールしようとする
  • 悪意あるアプリがアドオンを置き換える
  • ユーザーはダウンロードしたアドオンをインストールするが、実際には別のアドオンをインストールすることになる

アドオンはかなり自由度が高く、Webページの書き換えや、サーバーへの情報送信などができるため、MITB攻撃につながると考えられます。


なお、Windowsなどのデスクトッププラットフォームでは一般的に同じユーザーが起動したプロセスは、同じUIDで動作するため、他のアプリのファイルも書き換えることができます。ですので、悪意あるアプリを実行してしまえば、ここと同様のことが起きることになります。

WindowsとAndroidセキュリティコンセプトが異なっており、Androidでは各プロセスを別UIDで動作させていることから、今回のようなことができてしまうのは、そのセキュリティコンセプトに反するといえ、脆弱性とみなされるということになります。

Firefox for Androidを利用している方はアップデートをすることを推奨いたします。



関連記事

Monthly Research 「続Man in the Browser  in Androidの可能性」

Monthly Research「NFCとセキュリティ」

Monthly Research 「Man in the Browser in Androidの可能性」