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 ma...
Search
Yu Yagihashi
April 24, 2018
Programming
0
360
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
1.1k
A talk about XSS thousand knocks(Shibuya.XSS techtalk#10)
yagihashoo
5
2.8k
katagaitai勉強会#6 EasyなWeb編 / katagaitaiCTF#6 Web
yagihashoo
1
1.2k
Other Decks in Programming
See All in Programming
本編では話さない Zig の話
andpad
2
130
Going Staff - Keynote edition
pragtob
0
370
ActiveRecordの力でDBのメタデータを迅速に解析する
lnit
5
2.1k
いかにして不足・不整合なくデータ移行したか
tjmtmmnk
1
970
2万ページのSSG運用における工夫と注意点 / Vue Fes Japan 2024
chinen
3
1.1k
(Deep|Web) Link support with expo-router
mrtry
0
190
CSC509 Lecture 05
javiergs
PRO
0
190
Why I Choose NetBeans for Jakarta EE
ivargrimstad
0
930
今日で分かる!カスタムコップの作り方
krpk1900
2
320
僕がつくった48個のWebサービス達
yusukebe
6
3.6k
Golang と Erlang
taiyow
7
1.8k
Server Driven Compose With Firebase
skydoves
0
190
Featured
See All Featured
Building an army of robots
kneath
302
42k
Adopting Sorbet at Scale
ufuk
73
9k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Building Your Own Lightsaber
phodgson
102
6k
Raft: Consensus for Rubyists
vanstee
136
6.6k
The Invisible Side of Design
smashingmag
297
50k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
31
1.7k
Designing for humans not robots
tammielis
249
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
26
730
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.8k
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、ちゃんと付けましょう。