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

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:

http
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:

http
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

  1. Napadač kontroliše evil.com koji se rešava na isti CDN edge čvor kao ciljni internal.company.
  2. Pregledač žrtve već ima otvorenu HTTP/2 vezu sa evil.com.
  3. Napadač ugrađuje skriveni <img src="https://internal.company/…"> na svoju stranicu.
  4. Pošto se parametri veze poklapaju, pregledač ponovo koristi postojeću TLS vezu i multiplikuje zahtev za internal.company.
  5. 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)

GodinaKomponentaCVENapomene
2022AWS Application Load BalancerHost header je samo validiran na prvom zahtevu; ispravljeno zakrpanjem pravila (otkriveno od strane SecurityLabs).
2023Apache Traffic Server < 9.2.2CVE-2023-39852Dozvolio je request smuggling putem ponovne upotrebe HTTP/2 veze kada je CONFIG proxy.config.http.parent_proxy_routing_enable bio postavljen.
2024Envoy Proxy < 1.29.0CVE-2024-2470Nepravilna validacija :authority nakon prvog stream-a omogućila je cross-tenant request smuggling u deljenim mrežama.

Cheat-Sheet za detekciju

  1. Pošaljite dva zahteva u isto TCP/TLS povezivanje sa različitim Host ili :authority header-ima.
  2. Posmatrajte da li drugi odgovor potiče od prvog hosta (sigurno) ili drugog hosta (ranjivo).
  3. U Burp-u: Repeat → keep-alive → Send → Follow.
  4. 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