HTTP Connection Request Smuggling

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

์ด ํŽ˜์ด์ง€๋Š” Browser-Powered Desync Attacks์— ๋Œ€ํ•œ PortSwigger์˜ ๊ธฐ์ดˆ ์—ฐ๊ตฌ๋ฅผ ์š”์•ฝ, ํ™•์žฅ ๋ฐ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ HTTP/2 ์—ฐ๊ฒฐ ์ƒํƒœ ๋‚จ์šฉ์— ๋Œ€ํ•œ ํ›„์† ์ž‘์—…์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€๋Š” TCP/TLS ์—ฐ๊ฒฐ๋‹น ํ•œ ๋ฒˆ๋งŒ ์›๋ณธ์ด ๊ฒฐ์ •๋˜๋Š” ์ทจ์•ฝ์ ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ณต๊ฒฉ์ž๋Š” ์ฑ„๋„์ด ์„ค์ •๋œ ํ›„ ๋‹ค๋ฅธ ๋‚ด๋ถ€ ํ˜ธ์ŠคํŠธ๋กœ ์š”์ฒญ์„ โ€œ๋ฐ€์–ด๋„ฃ์„โ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Connection-State Attacks

First-request Validation

์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•  ๋•Œ, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” Host (๋˜๋Š” HTTP/2์˜ :authority) ํ—ค๋”์— ์˜์กดํ•˜์—ฌ ๋ชฉ์ ์ง€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ข…์ข… ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ ํ˜ธ์ŠคํŠธ์˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ํ”„๋ก์‹œ์—์„œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ์—ฐ๊ฒฐ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์ทจ์•ฝ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, ๊ณต๊ฒฉ์ž๋Š” ํ—ˆ์šฉ๋œ ์š”์ฒญ์„ ๋จผ์ € ์ „์†กํ•œ ํ›„ ๋™์ผํ•œ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

GET / HTTP/1.1
Host: allowed-external-host.example

GET /admin HTTP/1.1
Host: internal-only.example

First-request Routing

๋งŽ์€ HTTP/1.1 ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” ์ „๋‹ฌํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์—๋งŒ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์•„์›ƒ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์„ ๋ฐฑ์—”๋“œ ํ’€์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์†Œ์ผ“์„ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ชจ๋“  ํ›„์† ์š”์ฒญ์€ Host ํ—ค๋”์™€ ๊ด€๊ณ„์—†์ด ์กฐ์šฉํžˆ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์ค‘๋… ๋˜๋Š” ์›น ์บ์‹œ ์ค‘๋…๊ณผ ๊ฐ™์€ ๊ณ ์ „์ ์ธ Host ํ—ค๋” ๊ณต๊ฒฉ๊ณผ ๊ฒฐํ•ฉ๋˜์–ด ๋‹ค๋ฅธ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ SSRF์™€ ์œ ์‚ฌํ•œ ์ ‘๊ทผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

GET / HTTP/1.1
Host: public.example

POST /pwreset HTTP/1.1
Host: private.internal

Tip

Burp Suite Professional โ‰ฅ2022.10์—์„œ HTTP Request Smuggler โ†’ Connection-state probe๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


2023-2025์˜ ์ƒˆ๋กœ์šด ๋‚ด์šฉ โ€“ HTTP/2/3 ์—ฐ๊ฒฐ ์ง‘ํ•ฉ ๋‚จ์šฉ

ํ˜„๋Œ€ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ธ์ฆ์„œ, ALPN ํ”„๋กœํ† ์ฝœ ๋ฐ IP ์ฃผ์†Œ๊ฐ€ ์ผ์น˜ํ•  ๋•Œ HTTP/2 ๋ฐ HTTP/3 ์š”์ฒญ์„ ๋‹จ์ผ TLS ์—ฐ๊ฒฐ๋กœ ์ง‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ๋งŒ ์Šน์ธํ•˜๋Š” ๊ฒฝ์šฐ, ์ดํ›„์˜ ๋ชจ๋“  ์ง‘ํ•ฉ ์š”์ฒญ์€ ํ•ด๋‹น ์Šน์ธ์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค โ€“ ํ˜ธ์ŠคํŠธ/:authority๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„.

์•…์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. ๊ณต๊ฒฉ์ž๋Š” evil.com์„ ์ œ์–ดํ•˜๋ฉฐ, ์ด๋Š” ๋Œ€์ƒ internal.company์™€ ๋™์ผํ•œ CDN ์—ฃ์ง€ ๋…ธ๋“œ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.
  2. ํ”ผํ•ด์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฏธ evil.com์— ๋Œ€ํ•œ ์—ด๋ฆฐ HTTP/2 ์—ฐ๊ฒฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ณต๊ฒฉ์ž๋Š” ์ž์‹ ์˜ ํŽ˜์ด์ง€์— ์ˆจ๊ฒจ์ง„ <img src="https://internal.company/โ€ฆ">๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  4. ์—ฐ๊ฒฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ์กด TLS ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  internal.company์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋‹ค์ค‘ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  5. CDN/๋ผ์šฐํ„ฐ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ๋งŒ ๊ฒ€์ฆํ–ˆ๋‹ค๋ฉด ๋‚ด๋ถ€ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

Chrome/Edge/Firefox์— ๋Œ€ํ•œ PoC๋Š” James Kettle์˜ ๋ฐœํ‘œ โ€œHTTP/2: The Sequel is Always Worseโ€ (Black Hat USA 2023)์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ

  • Burp Suite 2023.12๋Š” ์ž๋™์œผ๋กœ ์ง‘ํ•ฉ ๋ฐ TE/CL ๊ธฐ์ˆ ์„ ์‹œ๋„ํ•˜๋Š” ์‹คํ—˜์  HTTP/2 Smuggler ์‚ฝ์ž… ์ง€์ ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • smuggleFuzz (https://github.com/microsoft/smugglefuzz) โ€“ HTTP/2 ๋ฐ HTTP/3์—์„œ ํ”„๋ก ํŠธ์—”๋“œ/๋ฐฑ์—”๋“œ ๋น„๋™๊ธฐ ๋ฒกํ„ฐ๋ฅผ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…ํ•˜๊ธฐ ์œ„ํ•ด 2024๋…„์— ์ถœ์‹œ๋œ Python ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

์™„ํ™” ์กฐ์น˜

  • ํ•ญ์ƒ ๋ชจ๋“  ์š”์ฒญ์—์„œ Host/:authority๋ฅผ ์žฌ๊ฒ€์ฆํ•˜๊ณ , ์—ฐ๊ฒฐ ์ƒ์„ฑ ์‹œ์—๋งŒ ๊ฒ€์ฆํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  • CDN/๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๊ณ„์ธต์—์„œ ์›๋ณธ ์ง‘ํ•ฉ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ์—„๊ฒฉํ•˜๊ฒŒ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค (์˜ˆ: NGINX์—์„œ http2_origin_cn ๋„๊ธฐ).
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ฉ๋ฒ•์ ์œผ๋กœ ์ง‘ํ•ฉํ•  ์ˆ˜ ์—†๋„๋ก ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์ธ์ฆ์„œ ๋˜๋Š” IP ์ฃผ์†Œ๋ฅผ ๋ฐฐํฌํ•˜์‹ญ์‹œ์˜ค.
  • ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๊ฐ ์š”์ฒญ ํ›„์— connection: close ๋˜๋Š” proxy_next_upstream์„ ์„ ํ˜ธํ•˜์‹ญ์‹œ์˜ค.

์‹ค์ œ ์‚ฌ๋ก€ (2022-2025)

์—ฐ๋„๊ตฌ์„ฑ ์š”์†ŒCVE๋น„๊ณ 
2022AWS Application Load Balancerโ€“ํ˜ธ์ŠคํŠธ ํ—ค๋”๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ๋งŒ ๊ฒ€์ฆ๋จ; ๊ทœ์น™ ์—”์ง„ ํŒจ์น˜๋กœ ์ˆ˜์ •๋จ (SecurityLabs์— ์˜ํ•ด ๊ณต๊ฐœ๋จ).
2023Apache Traffic Server < 9.2.2CVE-2023-39852CONFIG proxy.config.http.parent_proxy_routing_enable๊ฐ€ ์„ค์ •๋˜์—ˆ์„ ๋•Œ HTTP/2 ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ์„ ํ†ตํ•œ ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง ํ—ˆ์šฉ.
2024Envoy Proxy < 1.29.0CVE-2024-2470์ฒซ ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ ์ดํ›„ :authority์˜ ๋ถ€์ ์ ˆํ•œ ๊ฒ€์ฆ์œผ๋กœ ๊ณต์œ  ๋ฉ”์‰ฌ์—์„œ ํฌ๋กœ์Šค ํ…Œ๋„ŒํŠธ ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง ๊ฐ€๋Šฅ.

ํƒ์ง€ ์š”์•ฝ

  1. ๋™์ผํ•œ TCP/TLS ์—ฐ๊ฒฐ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ Host ๋˜๋Š” :authority ํ—ค๋”๋กœ ๋‘ ๊ฐœ์˜ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ๋‘ ๋ฒˆ์งธ ์‘๋‹ต์ด ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ŠคํŠธ(์•ˆ์ „)์—์„œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋‘ ๋ฒˆ์งธ ํ˜ธ์ŠคํŠธ(์ทจ์•ฝ)์—์„œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค.
  3. Burp์—์„œ: Repeat โ†’ keep-alive โ†’ Send โ†’ Follow.
  4. HTTP/2๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ, ๋ฌดํ•ดํ•œ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•ด ์ „์šฉ ์ŠคํŠธ๋ฆผ(ID 1)์„ ์—ด๊ณ , ๋‚ด๋ถ€ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•ด ๋‘ ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ(ID 3)์„ ๋‹ค์ค‘ํ™”ํ•˜์—ฌ ์‘๋‹ต์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋ฌธํ—Œ

  • PortSwigger Research โ€“ HTTP/2: The Sequel is Always Worse (Black Hat USA 2023)
  • Envoy Security Advisory CVE-2024-2470 โ€“ ๋ถ€์ ์ ˆํ•œ ๊ถŒํ•œ ๊ฒ€์ฆ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ