Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The face of X-Content-Type-Options which you may not know
Search
Yu Yagihashi
April 24, 2018
Programming
0
350
The face of X-Content-Type-Options which you may not know
LT向け資料。ざっっっっっっくりなのでまさかりはマジかんべん。 #roppongijs #2
Yu Yagihashi
April 24, 2018
Tweet
Share
More Decks by Yu Yagihashi
See All by Yu Yagihashi
A Security Engineer in the Web Re-architecture Project
yagihashoo
0
1k
A talk about XSS thousand knocks(Shibuya.XSS techtalk#10)
yagihashoo
6
2.6k
katagaitai勉強会#6 EasyなWeb編 / katagaitaiCTF#6 Web
yagihashoo
1
1.1k
Other Decks in Programming
See All in Programming
puregoの活用例
aethiopicuschan
0
220
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
25
7.8k
StreamlitとTerraformでデータカタログを作った話
gussan0223
0
300
Ruby Pattern Matching
bkuhlmann
0
920
両面どころかインフラもTSでできるよ ~ 全方位TypeScriptによるプロダクト開発 ~
myfinder
9
3.2k
TYPO3 v13 – The road to LTS: What's new and new APIs
luisasofie_xoxo
0
180
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.2k
Semantic search with Django and pgvector
pauloxnet
0
240
コードレビューで学ぶ!Kotlinオブジェクト指向デザインパターン
akkie76
2
180
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
450
甘い香りに誘われてVanilla Extractを1年間運用してみた
miyahkun
1
110
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
340
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
990
Why You Should Never Use an ORM
jnunemaker
PRO
50
8.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
243
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
240
1.2M
How to name files
jennybc
64
92k
Fireside Chat
paigeccino
20
2.6k
For a Future-Friendly Web
brad_frost
171
8.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
646
57k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
How STYLIGHT went responsive
nonsquared
92
4.8k
Art, The Web, and Tiny UX
lynnandtonic
288
19k
We Have a Design System, Now What?
morganepeng
42
6.7k
Transcript
あなたの知らない(かもしれない) X-Content-Type-Options Yu YAGIHASHI(@yagihashoo) @Roppongi.js#2
None
None
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にもあるよ HTML PNGファイルだよ〜 は?JSとして読むわ <script src=“hoge.png”></script> \x89PNG~~~~~~ Content-Type: image/png
ごく一般的なGIFファイル GIF8=1;alert("あなたの知らない(かもしれない)X-Content-Type-Options")
fileコマンドでも
PHPでも
シナリオ HTML Content-Security-Policy: default-src ‘self’ GIF(仮) <script src=“hoge.gif”></script> なんか悪い感じのJSコード GIF(仮)
シナリオ HTML Content-Security-Policy: default-src ‘self’ GIF(仮) <script src=“hoge.gif”></script> なんか悪い感じのJSコード GIF(仮)
XSSの脆弱性があるが、いい感じのCSPヘッダに よって悪い感じのコードはそもそも動かない
シナリオ HTML Content-Security-Policy: default-src ‘self’ GIF(仮) <script src=“hoge.gif”></script> なんか悪い感じのJSコード GIF(仮)
攻撃者が自由に画像ファイルを 同一オリジンにアップロードできる
シナリオ HTML Content-Security-Policy: default-src ‘self’ GIF(仮) <script src=“hoge.gif”></script> なんか悪い感じのJSコード GIF(仮)
XSSで埋め込んだscript要素から 同一オリジンにアップロードした 悪い感じのGIFファイルを参照する
シナリオ HTML Content-Security-Policy: default-src ‘self’ GIF(仮) <script src=“hoge.gif”></script> なんか悪い感じのJSコード GIF(仮)
CSPでいい感じなのに XSSできてしまう!!!
さいごに • やることは変わらないです。X-C-T-O: nosniff、ちゃんと付けましょう。