私はいかにして様々なブラウザの脆弱性を発見したか

先日、Twitterでどのように脆弱性を見つけるかに興味あるんだろうかと書いたら、意外に色々な人から反応があったので、これまでに自分が見つけた脆弱性のいくつかについてどういう経緯で見つけたのかちょっと書いてみます。

JVN#89344424: 複数のメールクライアントソフトにおける、添付ファイルによりメールクライアントソフトが使用不能になる脆弱性

これは、添付ファイル名にUnicodeの円記号を含めておくと、メーラ側でShift_JISに変換する際にバックスラッシュに変換されてしまって想定外のディレクトリに添付ファイルが展開されてしまったり、あるいは「©on」のような名前のファイルを添付しておくことでShift_JISに変換してCONというファイルを開こうとしてメーラが固まってしまうという問題です。これは、私自身が文字コードの問題について調べ始めた初期段階で、Unicodeからの変換で問題が起きそうなケースとしてできるだけわかりやすいモデルケースを考えるにあたり、手元のメーラで試したらまさに想定通りの脆弱性があったためIPAに届けたものです。ただ、私が届けたそのメーラについては開発者と連絡がつかないということで修正には至らず、IPAが他のベンダのメーラでの挙動を取りまとめたうえでJVNとして公表されたという経緯のものです。

MFSA 2008-13: 文字エンコーディングに起因する複数の XSS 脆弱性

FirefoxにおいてShift_JISのときに0x80というバイト値が無視されるため、"<(0x80)sc(0x80)ript>"といった文字列をブラックリストで処理している場合に漏れが生じるという問題です。これは、さまざまなエンコーディングでHTMLのパースにおかしなところがないか、ファジングのような形式で半分自動、半分手動でテストしていて見つけた問題です。最近だとさすがにパーサもこんなバグは枯れてあまり見当たらない(と思いたい)ですし、ここまで試す気合いもないですが…。

MFSA 2010-42: Web ワーカーの importScripts を通じたクロスサイトデータ漏えい

1年ほど前に見つけたWeb Workersの問題は、次のような観点で見つけました(この脆弱性の詳細については「NetAgent Official Blog : FirefoxのWeb Workersにおける脆弱性について」参照)。

  1. もともと、FirefoxE4Xという機能を利用することで、HTML断片をJavaScriptとして<script>のソースとして読み込むことが可能であった
  2. Firefoxではこれに対する修正として、<script>ソースとして読み込んだJavaScriptが単一のXMLオブジェクトであった場合にはセキュリティ例外を発生させていた
  3. という以上のことを前提知識として知っていた上で、Web Workers には importScripts というリモートのJavaScriptを読み込む機能が追加されたことを知った
  4. もしかするとimportScriptsでは<script>でなされているE4Xのチェックがされていないのではないかという推測を立てる
  5. 実際に試してみたところ、推測通りリモートのHTMLをJavaScriptとして読み込むことができたため、脆弱性と判断

このように、新しく追加された機能に対して過去の知見を適用することで脆弱性を見つけることができたのでした。

マイクロソフト セキュリティ情報 MS07-034 - 緊急 : Outlook Express および Windows メール 用の累積的なセキュリティ更新プログラム (929123)

MS07-034には複数の脆弱性の修正が含まれており、タイトルは「Outlook Express および Windows メール」となっていますが、そのうちのいくつかはOEコンポーネント等を通じてInternet Explorerに害を及ぼすものでした。含まれる修正のうち、CVE-2007-2225IEにおいてmhtmlプロトコルハンドラを通すことでbase64エンコードされた状態で挿入されたJavaScriptを実行可能なために広い範囲でXSSが発生するというものでした。これ自体は脆弱性の存在自体が広く公開されていたものの、いつまでも修正されないことに業を煮やした hoshikuzu さんの協力によりMicrosoftに報告したものです。ところが、Microsoft から当初返ってきた返事は「Internet Explorerの仕様に基づく動作である」という驚きの返事だったのでした。mhtml ハンドラを利用すればあまりにも広い範囲でXSSを発生させることができるため、さすがに仕様はなかろうということで、mhtml ハンドラを利用して microsoft.com や live.com などでのXSSを多数報告することで方向転換させることにしました。
また、仮に「mhtmlによるXSSは仕様である」という状況が覆らないとしても、少しでもmhtmlの挙動が改善されるようにとmhtmlの引き起こす問題を徹底して調べようと思い、そのような中で見つけたのがMS07-034に含まれるCVE-2007-2227でした。これは、mhtml プロトコルハンドラを経由してIEでコンテンツを開くと、Webアプリケーション側でダウンロードされることを意図して付与された "Content-Disposition: attachment" レスポンスヘッダが無視され、IE内でいきなりそのコンテンツが開かれるというものでした。
このように、CVE-2007-2227については「脆弱性と認められない仕様であっても、悪用されたときの影響が大きいのであれば仕様の改善を迫ることができる」という執念から発見に至ったものです。

マイクロソフト セキュリティ情報 MS08-056 - 警告 : Microsoft Office の脆弱性により、情報の漏えいが起こる (957699)

MS08-056もタイトルは Microsoft Office となっていますが、Officeコンポーネントを利用することでIEに害を及ぼすものでした。MS08-056で修正されたCVE-2008-4020も、前述のmhtmlの問題に関連しています。mhtmlによるContent-Disposition無視(CVE-2007-2227)を見つけたときに、mhtml以外のプロトコルハンドラでも同様の問題があるのではないかと推測し、レジストリのHKCR\PROTOCOLS\Handlerに登録されている様々なプロトコルハンドラに対して、Content-Dispositionが付与されたコンテンツをIEで開いたときに問題が発生しないか試しながら発見したものです。



結局のところ、すでに存在する様々な脆弱性について原理や攻撃手法をたくさん集めておき、別のソフトウェアに対してそれらを組み合わせることで何か問題を発生させることができないか、また仕様であるにしても最大限悪用することで問題を発生させることができないかといった思考から脆弱性を発見している気がします。