mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/http-connection-request-smuggling.md'] t
This commit is contained in:
parent
ab80f2466c
commit
b8b78f5154
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user