ファイルダウンロードによるXSS その2
関連記事:ファイルダウンロードによるXSS その1
脆弱性の原因
この脆弱性の原因にはIneternet Explorer 特有の仕様が影響している。IEはファイルタイプの判定にHTTPレスポンスのContent-Typeヘッダ以外に、URL上の拡張子やファイルの中身を利用している。
その判定仕様は非公開だが、以下のような挙動が判明している。
コンテンツが画像の場合
Content-Typeの他に、画像ファイルのマジックバイトがファイルタイプの判定に利用される。
マジックバイトとはファイルタイプ識別のためにファイルの先頭に置かれた固定の文字列である。JPEG、PNGのマジックバイトを下表に示す。
画像形式 | マジックバイト |
---|---|
JPEG | \xFF\xD8\xFF |
PNG | \x89PNG\x0D\x0A\x1A\x0A |
IE7以前のデフォルト設定では以下のようにファイルタイプを判定する。
・Content-Typeとマジックバイトが一致する場合
Content-Typeが示すファイルタイプを採用する。
・Content-Typeとマジックバイトが一致しない場合
どちらも無視し、ファイルの内容からファイルタイプを推測する。ファイルの内容にHTMLタグが含まれていればHTMLと判定する場合もある。
コンテンツが画像以外の場合
IEのバージョンを問わず次のような仕様であると推測されている。
IEが扱うことのできるContent-Typeの場合、Content-Typeに従って処理をする。扱えるContent-Typeはレジストリの HKEY_CLASSES_ROOT\MIME\Database\Content Type に登録されている。
IEが扱うことのできないContent-Typeの場合、URLに含まれる拡張子からファイルタイプを判定する。このルールは複雑であるので説明しない。
前の記事で攻撃用URLの作成のためにPATHINFOとして「/a.html」を加えたのは、このURL中の拡張子からファイルタイプを判定する仕様を悪用するためである。
参考文献:体系的に学ぶWebアプリケーションの作り方 4.12.3 ファイルダウンロードによるクロスサイト・スクリプティング
![]() | 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 徳丸 浩 ソフトバンククリエイティブ 2011-03-03 売り上げランキング : 4070 Amazonで詳しく見る by G-Tools |
« ファイルダウンロードによるXSS その1 | Main | 事故現場に遭遇 »
「PHP」カテゴリの記事
- LaravelでHello World とか諸々(2015.05.13)
- Laravel4のインストール(2015.05.06)
- PHPメモ051:includeとrequireの使い分け(2015.06.19)
- CakePHPのインストール(2015.06.14)
- PHPからPDOでPostgreSQLに接続する(2015.06.09)
「セキュリティ」カテゴリの記事
- ファイルダウンロードによるXSS その2(2014.03.23)
- ファイルダウンロードによるXSS その3(2014.03.27)
- PHPメモ041:パスワードのSalt付きハッシュ値(2014.08.09)
- ファイルインクルード脆弱性(2014.05.18)
- ファイルダウンロードによるXSS その1(2014.02.24)
TrackBack
TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/59342292
Listed below are links to weblogs that reference ファイルダウンロードによるXSS その2:
Comments