$30 off During Our Annual Pro Sale. View Details »

The face of X-Content-Type-Options which you may not know

The face of X-Content-Type-Options which you may not know

LT向け資料。ざっっっっっっくりなのでまさかりはマジかんべん。 #roppongijs #2

Yu Yagihashi

April 24, 2018
Tweet

More Decks by Yu Yagihashi

Other Decks in Programming

Transcript

  1. あなたの知らない(かもしれない)

    X-Content-Type-Options
    Yu YAGIHASHI(@yagihashoo)
    @Roppongi.js#2

    View Slide

  2. View Slide

  3. View Slide

  4. Content Sniffing
    • Content-Typeヘッダの内容に関係なく、レスポンスボディの内容に

    応じてIEがContent-Typeを勝手に判断する機能

    →と思っていませんか?
    • 正確なContent-Typeが設定されていても無視されるのが特に悪質で、

    その解決策としてX-Content-Type-Optionsヘッダによるこの機能の

    制御・無効化が一般的となった
    • 具体的には、HTMLタグを含む画像ファイルを開くとHTMLとして

    認識されてしまうことによるXSSなど

    View Slide

  5. FirefoxとかChromeにもあるよ
    • 画像を開くとHTMLに!みたいなトンデモ仕様はない(はず)
    • (LTなので)細かい挙動は調べていないが、どちらかというと内容よりも

    コンテキストに応じて既存のContent-Typeヘッダの値を無視し、

    別のContent-Typeとしてロードする挙動をするように見える
    • 例えば、.jsファイルのContent-Typeがなぜかtext/htmlであっても

    script要素のsrc属性で指定し、ロードできるなど

    View Slide

  6. FirefoxとかChromeにもあるよ
    HTML
    PNGファイルだよ〜
    は?JSとして読むわ
    \x89PNG~~~~~~
    Content-Type: image/png

    View Slide

  7. ごく一般的なGIFファイル
    GIF8=1;alert("あなたの知らない(かもしれない)X-Content-Type-Options")

    View Slide

  8. fileコマンドでも

    View Slide

  9. PHPでも

    View Slide

  10. シナリオ
    HTML
    Content-Security-Policy: default-src ‘self’
    GIF(仮)
    なんか悪い感じのJSコード
    GIF(仮)

    View Slide

  11. シナリオ
    HTML
    Content-Security-Policy: default-src ‘self’
    GIF(仮)
    なんか悪い感じのJSコード
    GIF(仮)
    XSSの脆弱性があるが、いい感じのCSPヘッダに
    よって悪い感じのコードはそもそも動かない

    View Slide

  12. シナリオ
    HTML
    Content-Security-Policy: default-src ‘self’
    GIF(仮)
    なんか悪い感じのJSコード
    GIF(仮)
    攻撃者が自由に画像ファイルを

    同一オリジンにアップロードできる

    View Slide

  13. シナリオ
    HTML
    Content-Security-Policy: default-src ‘self’
    GIF(仮)
    なんか悪い感じのJSコード
    GIF(仮)
    XSSで埋め込んだscript要素から

    同一オリジンにアップロードした

    悪い感じのGIFファイルを参照する

    View Slide

  14. シナリオ
    HTML
    Content-Security-Policy: default-src ‘self’
    GIF(仮)
    なんか悪い感じのJSコード
    GIF(仮)
    CSPでいい感じなのに

    XSSできてしまう!!!

    View Slide

  15. さいごに
    • やることは変わらないです。X-C-T-O: nosniff、ちゃんと付けましょう。

    View Slide