diff --git a/src/pentesting-web/http-connection-request-smuggling.md b/src/pentesting-web/http-connection-request-smuggling.md index 43f9c6b4e..3e2464dc9 100644 --- a/src/pentesting-web/http-connection-request-smuggling.md +++ b/src/pentesting-web/http-connection-request-smuggling.md @@ -2,33 +2,82 @@ {{#include ../banners/hacktricks-training.md}} -**Ovo je sažetak posta** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks) +**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. -## Napadi na stanje veze +## Connection-State Attacks ### Validacija prvog zahteva -Kada usmeravaju zahteve, reverzni proksi mogu zavisiti od **Host header** da odrede odredišni back-end server, često se oslanjajući na belu listu hostova kojima je dozvoljen pristup. Međutim, postoji ranjivost u nekim proksijima gde se bela lista primenjuje samo na inicijalni zahtev u vezi. Kao rezultat toga, napadači bi mogli iskoristiti ovo tako što bi prvo poslali zahtev ka dozvoljenom hostu, a zatim zatražili interni sajt kroz istu vezu: -``` +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] +Host: allowed-external-host.example -GET / HTTP/1.1 -Host: [internal-host] +GET /admin HTTP/1.1 +Host: internal-only.example ``` ### Prvo-zahtjev Ruting -U nekim konfiguracijama, front-end server može koristiti **Host zaglavlje prvog zahtjeva** da odredi pozadinsko rutiranje za taj zahtjev, a zatim trajno usmjeravati sve naredne zahtjeve iz iste klijentske veze na istu pozadinsku vezu. Ovo se može demonstrirati kao: -``` +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: example.com +Host: public.example POST /pwreset HTTP/1.1 -Host: psres.net +Host: private.internal ``` -Ovaj problem se potencijalno može kombinovati sa [Host header attacks](https://portswigger.net/web-security/host-header), kao što su trovanje resetovanjem lozinke ili [web cache poisoning](https://portswigger.net/web-security/web-cache-poisoning), kako bi se iskoristile druge ranjivosti ili dobio neovlašćen pristup dodatnim virtuelnim hostovima. +> [!TIP] +> U Burp Suite Professional ≥2022.10 možete omogućiti **HTTP Request Smuggler → Connection-state probe** da automatski otkrije ove slabosti. -> [!NOTE] -> Da bi se identifikovale ove ranjivosti, može se koristiti funkcija 'connection-state probe' u HTTP Request Smuggler. +--- + +## 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}}