CVE-2015-1729(fixed by MS15-065)
そろそろ2015年7月のWindows定例アップデートで修正された CVE-2015-1729(MS15-065)の内容の解説と対策を書こうと思います。
PoC
以下のような CSV (http://example.jp/target.csv)があったとします。
a,b c,d
これはIE9以降に以下のような攻撃コードを与えることで内容を読み取ることが可能でした。
<script> window.onerror=function(){alert(arguments.callee.caller);}; </script> <script src="http://example.jp/target.csv"></script>
このバグは、JavaScript として読み込ませると実行時エラーになるようなデータがある場合に、クロスオリジンの制約が働かずに、arguments.callee.caller によってエラー発生部分のコードのほぼ全体が取得できるというものでした。
Q4
実はこのPoC と先日の Q4 - masa’s memo はスクリプトの置かれているオリジンが異なっている点以外ほとんど同じです。
攻撃可能なデータ形式
- CSV
- Windowsの iniファイルの形のデータ
- 頭に throw文 を付けたJSON
- JavaScriptの途中に秘密データが埋まっているもの
JavaScriptでトラップされない実行時エラーが出た時点で負けです。JSONの頭にthrow文を書くというJSONハイジャック対策は、逆にこの攻撃に脆弱になってしまいます。
クライアント側の対策
Windows Updateで Internet Explorer を更新してください。問題が発生する全てのバージョンに修正がリリースされています。
Webアプリケーション側の対策
問題が発生するのはIE9以降なので
X-Content-Type-Options: nosniff
でJavaScriptではないデータ形式のものは完全に攻撃を防ぐことが可能です。
参考 機密情報を含むJSONには X-Content-Type-Options: nosniff をつけるべき - 葉っぱ日記