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
HTTP/2 Desync Attacksを解説する
Search
kuzushiki
September 30, 2021
Technology
2
910
HTTP/2 Desync Attacksを解説する
第11回 初心者のためのセキュリティ勉強会(
https://sfb.connpass.com/event/224489/)の発表資料です
kuzushiki
September 30, 2021
Tweet
Share
More Decks by kuzushiki
See All by kuzushiki
Next.jsの脆弱性(CVE-2025-29927)の話
kuzushiki
0
15
CISSPに出てくるセキュリティモデルとアクセス制御モデルをまとめてみた
kuzushiki
0
20
攻撃者の視点から見たGraphQLのセキュリティ
kuzushiki
0
14
PythonのURLパーサで見つかった脆弱性について解説する
kuzushiki
0
11
Pythonのtarfileによる展開処理がセキュアになりそう
kuzushiki
0
8
Web Cache Deception Attackについて解説する
kuzushiki
0
18
PHP8.2の新機能✞SensitiveParameter✞につい て
kuzushiki
0
11
Apple M1 CPUの脆弱性「PACMAN」について解説する
kuzushiki
0
670
ファームウェア解析はじめました
kuzushiki
0
9
Other Decks in Technology
See All in Technology
ビジネス職が分析も担う事業部制組織でのデータ活用の仕組みづくり / Enabling Data Analytics in Business-Led Divisional Organizations
zaimy
1
390
〜『世界中の家族のこころのインフラ』を目指して”次の10年”へ〜 SREが導いたグローバルサービスの信頼性向上戦略とその舞台裏 / Towards the Next Decade: Enhancing Global Service Reliability
kohbis
3
1.5k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
6.9k
データ戦略部門 紹介資料
sansan33
PRO
1
3.3k
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
350
衛星運用をソフトウェアエンジニアに依頼したときにできあがるもの
sankichi92
1
1k
Digitization部 紹介資料
sansan33
PRO
1
4.5k
VS CodeとGitHub Copilotで爆速開発!アップデートの波に乗るおさらい会 / Rapid Development with VS Code and GitHub Copilot: Catch the Latest Wave
yamachu
3
450
Transformerを用いたアイテム間の 相互影響を考慮したレコメンドリスト生成
recruitengineers
PRO
2
420
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
3
1.9k
アクセスピークを制するオートスケール再設計: 障害を乗り越えKEDAで実現したリソース管理の最適化
myamashii
1
660
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
39k
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Facilitating Awesome Meetings
lara
54
6.5k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
830
Documentation Writing (for coders)
carmenintech
72
4.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Thoughts on Productivity
jonyablonski
69
4.7k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Speed Design
sergeychernyshev
32
1k
Transcript
HTTP/2 Desync Attacks を解説する kuzushiki 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki
今回の発表内容 HTTP/2: The Sequel is Always Worse James Kettle |
Director of Research, PortSwigger HTTP/1.1とHTTP/2との同期ズレ (DeSync) を突いた攻撃手法について 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki Black Hat USA 2021で興味深かった発表を紹介する 2 / 20
HTTP/1.1 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki 3 / 20
HTTP/2 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki 4 / 20
HTTP/2で追加された概念 Binary Protocol HTTP/1はテキストベースなので曖昧な文字列のパースが必要 ex) ヘッダの終わりを知るために「:」を探す TCPのようなバイナリのプロトコルを採用 Message Length HTTP/1ではメッセージボディの長さを以下のヘッダで定義
Content-Length Transfer-Encoding HTTP/2では削除 メッセージボディに長さのフィールドが組み込まれているため不要 メッセージ長を曖昧にする余地がほとんどない 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki 5 / 20
HTTP/2 Desync Attacks 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki ようやく本題 6 / 20
Request smuggling via HTTP/2 downgrades プロトコルの違いを利用してリクエストを密輸 (smuggling) 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki
7 / 20
H2.CL Desync on Netflix 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki リアルワールドの脆弱性を紹介 8 /
20
Before HTTP/2ではContent-Lengthヘッダは不要 なぜかRFCでは付与してもOK After リクエストを挿入し罠サイト 02.rs に誘導 Netflixのアカウントを侵害し,クレジットカード番号など の重要な情報を窃取できた 報奨金は200万円
第11回 初心者のためのセキュリティ勉強会 kuzu7shiki 9 / 20
H2.TE Desync on Application Load Balancer 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki リアルワールドの脆弱性を紹介
10 / 20
Before HTTP/2ではTransfer-EncodingヘッダはNG AWSはこれに従っていなかった After リクエストを挿入し罠サイト psres.net に誘導 報奨金は70万円 第11回 初心者のためのセキュリティ勉強会
kuzu7shiki 11 / 20
H2.TE via Request Header Injection 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki リアルワールドの脆弱性を紹介 12
/ 20
Before HTTP/2はバイナリベース \r\nなどの特殊な文字列を挿入可能 After 被害者は悪意のあるNetlifyドメインからコンテンツを受け取 ることに 報奨金はMozilaから20万,Netlifyから20万円 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki
13 / 20
H2.X via Request Splitting 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki リアルワールドの脆弱性を紹介 14 /
20
Before chunked encodingを使わず,2回の\r\nでリクエストを 中断させようとした After しかし失敗 フロントエンドはHostヘッダを\r\n\r\nで終わらせるため, 独立したリクエストを挿入してしまった その結果... ->
第11回 初心者のためのセキュリティ勉強会 kuzu7shiki 15 / 20
結果,障害レベルの事態に 1回の通信で2つの独立したリクエストを送信してしまった リクエストとレスポンスが一つずれてしまった Set-Cookieヘッダを含むレスポンスがあったため,異なるユーザのアカウントにログインできてしま った Atlassianは全ユーザのセッションを失効することで対処 報奨金は150万円 著者はかなり影響が大きいと考えている 第11回 初心者のためのセキュリティ勉強会
kuzu7shiki 16 / 20
Desync-Powered Request Tunnelling Smugglingの例とは異なり,IPごとにコネクションが張られている 他ユーザのレスポンスに影響が出ない この場合でも キャッシュポイゾニング が可能 第11回 初心者のためのセキュリティ勉強会
kuzu7shiki 17 / 20
Tunnelling Exploitation: Cache Poisoning 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki リアルワールドの脆弱性を紹介 18 /
20
Before POSTではレスポンスボディが大きすぎて上手く検知できず… HEADを用いてレスポンスボディをカット After 通常レスポンスヘッダはhtmlとしてみなされない 今回はレスポンスボディとして解釈されているためXSSが 発火 この時点でキャッシュが汚染される 他のユーザが /blog/?x=dontpoisoneveryone
に アクセスしてもXSSが発火 報奨金は150万円 第11回 初心者のためのセキュリティ勉強会 kuzu7shiki ` ` 19 / 20
おわりに HTTP/2 Desync Attacksを解説した 報奨金の多さ(計560万円!)から,とても深刻な脆弱性だということが分かった 紹介した脆弱性は以下のツールで発見できる(BApp Storeからインストール可) https://github.com/PortSwigger/http-request-smuggler E2EでHTTP/2を使うことが大切 第11回
初心者のためのセキュリティ勉強会 kuzu7shiki 20 / 20