# HTTP Connection Request Smuggling {{#include ../banners/hacktricks-training.md}} **Ova stranica sumira, proširuje i ažurira** seminalna istraživanja PortSwigger o [Browser-Powered Desync Attacks](https://portswigger.net/research/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](https://portswigger.net/web-security/host-header) kao što su trovanje resetovanja lozinke ili [trovanje web kešom](https://portswigger.net/web-security/web-cache-poisoning) 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 `` 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) | 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 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 {{#include ../banners/hacktricks-training.md}}