HTTP Connection Request Smuggling
Reading time: 5 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ova stranica sumira, proširuje i ažurira seminalna istraživanja PortSwigger o Browser-Powered Desync Attacks i kasnijem radu na zloupotrebi stanja veze HTTP/2. Fokusira se na ranjivosti gde se izvor određuje samo jednom po TCP/TLS vezi, omogućavajući napadaču da “prokrijumčari” zahteve na različiti unutrašnji host nakon što je kanal uspostavljen.
Connection-State Attacks
Validacija prvog zahteva
Kada usmeravaju zahteve, reverzni proksi mogu zavisiti od Host (ili :authority u HTTP/2) header-a da odrede odredišni back-end server, često se oslanjajući na belu listu hostova kojima je dozvoljen pristup. Međutim, postoji ranjivost u brojnim proksijima gde se bela lista sprovodi samo na prvom zahtevu u vezi. Kao rezultat, napadači mogu pristupiti unutrašnjim virtuelnim hostovima tako što prvo šalju dozvoljeni zahtev, a zatim ponovo koriste istu osnovnu vezu:
GET / HTTP/1.1
Host: allowed-external-host.example
GET /admin HTTP/1.1
Host: internal-only.example
Prvo-zahtjev Ruting
Mnogi HTTP/1.1 reverzni proksi mapiraju izlaznu vezu na pozadinski pool isključivo na osnovu prvog zahteva koji proslede. Svi naredni zahtevi poslati kroz istu prednju utičnicu tiho se ponovo koriste, bez obzira na njihov Host header. Ovo se može kombinovati sa klasičnim napadima na Host header kao što su trovanje resetovanja lozinke ili trovanje web kešom kako bi se dobio pristup sličan SSRF-u drugim virtuelnim hostovima:
GET / HTTP/1.1
Host: public.example
POST /pwreset HTTP/1.1
Host: private.internal
tip
U Burp Suite Professional ≥2022.10 možete omogućiti HTTP Request Smuggler → Connection-state probe da automatski otkrije ove slabosti.
NOVO u 2023-2025 – Zloupotreba HTTP/2/3 povezivanja
Moderni pregledači rutinski koalesiraju HTTP/2 i HTTP/3 zahteve na jednoj TLS vezi kada se sertifikat, ALPN protokol i IP adresa poklapaju. Ako front-end samo autorizuje prvi zahtev, svaki sledeći koalesirani zahtev nasleđuje tu autorizaciju – čak i ako se Host/:authority menja.
Scenarijo eksploatacije
- Napadač kontroliše
evil.com
koji se rešava na isti CDN edge čvor kao ciljniinternal.company
. - Pregledač žrtve već ima otvorenu HTTP/2 vezu sa
evil.com
. - Napadač ugrađuje skriveni
<img src="https://internal.company/…">
na svoju stranicu. - Pošto se parametri veze poklapaju, pregledač ponovo koristi postojeću TLS vezu i multiplikuje zahtev za
internal.company
. - Ako CDN/ruter samo validira prvi zahtev, unutrašnji host je izložen.
PoCs za Chrome/Edge/Firefox su dostupni u govoru Jamesa Kettle-a “HTTP/2: The Sequel is Always Worse” (Black Hat USA 2023).
Alati
- Burp Suite 2023.12 je uveo eksperimentalnu tačku umetanja HTTP/2 Smuggler koja automatski pokušava koalesiranje i TE/CL tehnike.
- smuggleFuzz (https://github.com/microsoft/smugglefuzz) – Python okvir objavljen 2024. godine za brute-force front-end/back-end desync vektore preko HTTP/2 i HTTP/3, uključujući permutacije stanja veze.
Mogućnosti ublažavanja
- Uvek ponovno validirajte Host/:authority na svakom zahtevu, ne samo prilikom kreiranja veze.
- Onemogućite ili strogo ograničite koalesiranje porekla na CDN/load-balancer slojevima (npr.
http2_origin_cn
isključen u NGINX). - Implementirajte odvojene sertifikate ili IP adrese za unutrašnje i spoljašnje hostname-ove kako bi pregledač legalno mogao da ih koalesira.
- Preferirajte connection: close ili
proxy_next_upstream
nakon svakog zahteva gde je to praktično.
Slučajevi iz stvarnog sveta (2022-2025)
Godina | Komponenta | CVE | Napomene |
---|---|---|---|
2022 | AWS Application Load Balancer | – | Host header je samo validiran na prvom zahtevu; ispravljeno zakrpanjem pravila (otkriveno od strane SecurityLabs). |
2023 | Apache Traffic Server < 9.2.2 | CVE-2023-39852 | Dozvolio je request smuggling putem ponovne upotrebe HTTP/2 veze kada je CONFIG proxy.config.http.parent_proxy_routing_enable bio postavljen. |
2024 | Envoy Proxy < 1.29.0 | CVE-2024-2470 | Nepravilna validacija :authority nakon prvog stream-a omogućila je cross-tenant request smuggling u deljenim mrežama. |
Cheat-Sheet za detekciju
- Pošaljite dva zahteva u isto TCP/TLS povezivanje sa različitim Host ili :authority header-ima.
- Posmatrajte da li drugi odgovor potiče od prvog hosta (sigurno) ili drugog hosta (ranjivo).
- U Burp-u:
Repeat → keep-alive → Send → Follow
. - Kada testirate HTTP/2, otvorite posvećen stream (ID 1) za benigni host, zatim multiplikujte drugi stream (ID 3) na unutrašnji host i tražite odgovor.
Reference
- PortSwigger Research – HTTP/2: The Sequel is Always Worse (Black Hat USA 2023)
- Envoy Security Advisory CVE-2024-2470 – Nepravilna validacija autoriteta
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.