Translated ['src/pentesting-web/http-connection-request-smuggling.md'] t

This commit is contained in:
Translator 2025-07-12 22:07:54 +00:00
parent ab80f2466c
commit b8b78f5154

View File

@ -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 <a href="#state" id="state"></a>
## Connection-State Attacks <a href="#state" id="state"></a>
### 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 `<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)
| 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}}