LT向け資料。ざっっっっっっくりなのでまさかりはマジかんべん。 #roppongijs #2
あなたの知らない(かもしれない) X-Content-Type-OptionsYu YAGIHASHI(@yagihashoo)@Roppongi.js#2
View Slide
Content Sniffing• Content-Typeヘッダの内容に関係なく、レスポンスボディの内容に 応じてIEがContent-Typeを勝手に判断する機能 →と思っていませんか?• 正確なContent-Typeが設定されていても無視されるのが特に悪質で、 その解決策としてX-Content-Type-Optionsヘッダによるこの機能の 制御・無効化が一般的となった• 具体的には、HTMLタグを含む画像ファイルを開くとHTMLとして 認識されてしまうことによるXSSなど
FirefoxとかChromeにもあるよ• 画像を開くとHTMLに!みたいなトンデモ仕様はない(はず)• (LTなので)細かい挙動は調べていないが、どちらかというと内容よりも コンテキストに応じて既存のContent-Typeヘッダの値を無視し、 別のContent-Typeとしてロードする挙動をするように見える• 例えば、.jsファイルのContent-Typeがなぜかtext/htmlであっても script要素のsrc属性で指定し、ロードできるなど
FirefoxとかChromeにもあるよHTMLPNGファイルだよ〜は?JSとして読むわ \x89PNG~~~~~~Content-Type: image/png
ごく一般的なGIFファイルGIF8=1;alert("あなたの知らない(かもしれない)X-Content-Type-Options")
fileコマンドでも
PHPでも
シナリオHTMLContent-Security-Policy: default-src ‘self’GIF(仮) なんか悪い感じのJSコードGIF(仮)
シナリオHTMLContent-Security-Policy: default-src ‘self’GIF(仮) なんか悪い感じのJSコードGIF(仮)XSSの脆弱性があるが、いい感じのCSPヘッダによって悪い感じのコードはそもそも動かない
シナリオHTMLContent-Security-Policy: default-src ‘self’GIF(仮) なんか悪い感じのJSコードGIF(仮)攻撃者が自由に画像ファイルを 同一オリジンにアップロードできる
シナリオHTMLContent-Security-Policy: default-src ‘self’GIF(仮) なんか悪い感じのJSコードGIF(仮)XSSで埋め込んだscript要素から 同一オリジンにアップロードした 悪い感じのGIFファイルを参照する
シナリオHTMLContent-Security-Policy: default-src ‘self’GIF(仮) なんか悪い感じのJSコードGIF(仮)CSPでいい感じなのに XSSできてしまう!!!
さいごに• やることは変わらないです。X-C-T-O: nosniff、ちゃんと付けましょう。