同一生成元ポリシー回避の脆弱性を確認、影響は広範に及ぶ

独立系セキュリティ専門家の Rafay Baloch 氏は、2014年9月、Android端末の内蔵ブラウザに深刻な脆弱性が存在することを明らかにしました。この脆弱性により、ブラウザの「同一生成元ポリシー」が侵害され、「ユニバーサルクロスサイトスクリプティング(UXSS)」攻撃が実行される可能性があります。

攻撃者は、iframe を利用してユーザがアカウントを持っている正規の Webサイトを読む込む可能性がありました。今回の脆弱性により、攻撃者は、Webサイト上で Javaスクリプトを実行することができるようになります。これは、本来であれば、「同一生成元ポリシー」によって実行できないことです。「同一生成元ポリシー」とは、ある生成元から読み込まれた文書やスクリプトが、異なる生成元からの文書のプロパティを取得したり設定したりするのを防ぐポリシーです。「同一生成元ポリシー」が侵害された結果、ユーザはその正規の Webサイトに入力した情報やそれに関連した Cookie を攻撃者に窃取される危険性があります。

要点を説明すると、ブラウザ上では、「同一生成元ポリシー」によりスクリプトが限定されているため、Cookie や位置情報といったWebサイトのプロパティには他のWebサイトからアクセスできません。概念上これは、Webサイトを相互に分離する方法であり、ある Webサイト上の不正なコードは、他の Webサイトに影響を及ぼすことはできません。現在使われているブラウザのすべてに、このポリシーが適用されています。

UXSS攻撃は、標的とした Webサイト上のいかなる脆弱性の存在も必要としません。ユーザが不正なURLを訪れただけで攻撃を実行することができます。例えば、ユーザが過去に訪れたWebサイトの Cookie が簡単に窃取される恐れがあります。また、狙ったWebサイトを、攻撃者が改ざんしたかのように「変更」することも可能です。しかし、こうした「変更」は実際にはユーザのブラウザ上で行なわれているだけです。

Baloch 氏の解析結果は、NULL文字(U+0000)がこの脆弱性を悪用した攻撃でどのように利用されるのかを述べています。弊社の解析によると、NULL文字と同様、他の文字も利用される可能性があることが確認されました。弊社は、Unicodeの最初の33文字、つまり U+0000 から U+0020 までが利用されると考えています。この 33文字は 32 の制御文字と空白文字で構成されています。

弊社は、UXSS攻撃を再現するために空白文字「U+0020」を使用しました(図1 )。

図1:テスト環境の Webサイト上の HTMLのソースコード
図1:テスト環境の Webサイト上の HTMLのソースコード

図2:問題の脆弱性の利用可能を実証したデモ
図2:問題の脆弱性の利用可能を実証したデモ

弊社は、この脆弱性がどれほど一般的であるかを確認するために、Google の公式アプリストア「Google Play」で「browser」と名前の付く上位 100のアプリをダウンロードしました。弊社は、そのうち 42のアプリに問題の脆弱性が存在することを確認しました。しかし、その他のアプリもまた危険な状態にあります。アプリ上で Webサイトを開くものもまた危険であり、弊社はメッセージアプリ内からこの脆弱性を利用することが可能であることを確認しました。

図3:メッセージアプリ内でもこの脆弱性の利用が可能
図3:メッセージアプリ内でもこの脆弱性の利用が可能

2014年9月29日現在、この問題を回避できる手段は、それほど多くはありません。ユーザは Google Chrome や Mozilla Firefox といったこの脆弱性の影響を受けないブラウザを選択することもできます。

現時点では、自身のユーザインターフェース(UI)内で Webサイトを閲覧するアプリにおいて、この脆弱性はより深刻な問題となる可能性があります。現在、より深刻な問題となるのは、独自のユーザインタフェース(UI)上で Webサイトを表示するアプリかもしれません。メッセージアプリやユーザが任意の Webサイトを閲覧できるアプリで、Webサイトが初期設定のブラウザではなく、アプリ上で表示される場合は、特に大きな問題となります。

Androidバージョン4.4(KitKat)より前のバージョンはすべて、この脆弱性の影響を受けます。KitKat を使用しているのは、全 Android のユーザの4分の1のみです。2014年9月29日時点で、Google よりこの脆弱性の修正パッチが公開されています。

参考記事:

翻訳:臼本 将貴(Core Technology Marketing, TrendLabs)