mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
84 lines
5.3 KiB
Markdown
84 lines
5.3 KiB
Markdown
# HTTP Connection Request Smuggling
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
**Hierdie bladsy som op, brei uit en werk** die baanbrekende PortSwigger-navorsing oor [Browser-Powered Desync Attacks](https://portswigger.net/research/browser-powered-desync-attacks) en daaropvolgende werk oor HTTP/2 verbindingstoestand misbruik. Dit fokus op kwesbaarhede waar **'n oorsprong slegs een keer per TCP/TLS-verbinding bepaal word**, wat 'n aanvaller in staat stel om versoeke na 'n ander interne gasheer te “smuggle” sodra die kanaal gevestig is.
|
||
|
||
## Connection-State Attacks <a href="#state" id="state"></a>
|
||
|
||
### Eerste-versoek Validasie
|
||
|
||
Wanneer versoeke gerouteer word, mag omgekeerde proxies afhanklik wees van die **Host** (of **:authority** in HTTP/2) kop om die bestemming agterkant bediener te bepaal, dikwels staatmakend op 'n witlys van gashere wat toegang toegelaat word. Daar bestaan egter 'n kwesbaarheid in 'n aantal proxies waar die witlys **slegs op die heel eerste versoek in 'n verbinding afgedwing word**. Gevolglik kan aanvallers toegang verkry tot interne virtuele gashere deur eers 'n toegelate versoek te stuur en dan dieselfde onderliggende verbinding te hergebruik:
|
||
```http
|
||
GET / HTTP/1.1
|
||
Host: allowed-external-host.example
|
||
|
||
GET /admin HTTP/1.1
|
||
Host: internal-only.example
|
||
```
|
||
### Eerste-verzoek Routering
|
||
|
||
Baie HTTP/1.1 omgekeerde proxies koppel 'n uitgaande verbinding aan 'n agtergrondpoel **uitsluitlik gebaseer op die eerste versoek wat hulle deurstuur**. Alle daaropvolgende versoeke wat deur dieselfde voorpunt-soket gestuur word, word stilweg hergebruik, ongeag hul Host-kop. Dit kan gekombineer word met klassieke [Host-kop aanvalle](https://portswigger.net/web-security/host-header) soos wagwoord-herstel vergiftiging of [web-kas vergiftiging](https://portswigger.net/web-security/web-cache-poisoning) om SSRF-agtige toegang tot ander virtuele gasheer te verkry:
|
||
```http
|
||
GET / HTTP/1.1
|
||
Host: public.example
|
||
|
||
POST /pwreset HTTP/1.1
|
||
Host: private.internal
|
||
```
|
||
> [!TIP]
|
||
> In Burp Suite Professional ≥2022.10 kan jy **HTTP Request Smuggler → Connection-state probe** inskakel om hierdie swakhede outomaties te detecteer.
|
||
|
||
---
|
||
|
||
## NUWE in 2023-2025 – HTTP/2/3 Verbinding Samevoeging Misbruik
|
||
|
||
Moderne blaaiers **samevoeg** gereeld HTTP/2 en HTTP/3 versoeke op 'n enkele TLS-verbinding wanneer die sertifikaat, ALPN-protokol en IP-adres ooreenstem. As 'n front-end slegs die eerste versoek magtig, erf elke daaropvolgende samegevoegde versoek daardie magtiging – **selfs al verander die Host/:authority**.
|
||
|
||
### Misbruik scenario
|
||
1. Die aanvaller beheer `evil.com` wat na dieselfde CDN randnode as die teiken `internal.company` oplos.
|
||
2. Die slagoffer se blaier het reeds 'n oop HTTP/2 verbinding na `evil.com`.
|
||
3. Die aanvaller inkorporeer 'n versteekte `<img src="https://internal.company/…">` in hul bladsy.
|
||
4. Omdat die verbindingsparameters ooreenstem, hergebruik die blaier die **bestaande** TLS-verbinding en multiplex die versoek vir `internal.company`.
|
||
5. As die CDN/router slegs die eerste versoek geverifieer het, is die interne gasheer blootgestel.
|
||
|
||
PoCs vir Chrome/Edge/Firefox is beskikbaar in James Kettle se praatjie *“HTTP/2: The Sequel is Always Worse”* (Black Hat USA 2023).
|
||
|
||
### Gereedskap
|
||
* **Burp Suite 2023.12** het 'n eksperimentele **HTTP/2 Smuggler** insitpunt bekendgestel wat outomaties probeer om samevoeging en TE/CL tegnieke toe te pas.
|
||
* **smuggleFuzz** (https://github.com/microsoft/smugglefuzz) – 'n Python-raamwerk wat in 2024 vrygestel is om front-end/back-end desync vektore oor HTTP/2 en HTTP/3 te brute-force, insluitend verbindingsstaat permutasies.
|
||
|
||
### Versagtings
|
||
* Herverifieer altyd **Host/:authority op elke versoek**, nie net op verbinding skepping nie.
|
||
* Deaktiveer of beperk streng **oorsprong samevoeging** op CDN/laaibalans lae (bv. `http2_origin_cn` af in NGINX).
|
||
* Ontplooi aparte sertifikate of IP-adresse vir interne en eksterne gasheername sodat die blaier hulle nie wettig kan samevoeg nie.
|
||
* Verkies **connection: close** of `proxy_next_upstream` na elke versoek waar prakties.
|
||
|
||
---
|
||
|
||
## Werklike Gevalle (2022-2025)
|
||
|
||
| Jaar | Komponent | CVE | Aantekeninge |
|
||
|------|-----------|-----|--------------|
|
||
| 2022 | AWS Application Load Balancer | – | Host kop net op eerste versoek geverifieer; reggestel deur reëls enjin te patch. |
|
||
| 2023 | Apache Traffic Server < 9.2.2 | CVE-2023-39852 | Het versoek smuggling via HTTP/2 verbinding hergebruik toegelaat toe `CONFIG proxy.config.http.parent_proxy_routing_enable` ingestel was. |
|
||
| 2024 | Envoy Proxy < 1.29.0 | CVE-2024-2470 | Onbehoorlike validasie van :authority na eerste stroom het kruis-huurder versoek smuggling in gedeelde netwerke moontlik gemaak. |
|
||
|
||
---
|
||
|
||
## Detectie Cheat-Sheet
|
||
|
||
1. Stuur twee versoeke in die **dieselfde** TCP/TLS verbinding met verskillende Host of :authority koppe.
|
||
2. Observeer of die tweede antwoord van die eerste gasheer (veilig) of die tweede gasheer (kwetsbaar) afkomstig is.
|
||
3. In Burp: `Repeat → keep-alive → Send → Follow`.
|
||
4. Wanneer jy HTTP/2 toets, open 'n **toegewyde** stroom (ID 1) vir 'n onskadelike gasheer, dan multiplex 'n tweede stroom (ID 3) na 'n interne gasheer en soek na 'n antwoord.
|
||
|
||
---
|
||
|
||
## Verwysings
|
||
|
||
* PortSwigger Research – *HTTP/2: The Sequel is Always Worse* (Black Hat USA 2023)
|
||
* Envoy Security Advisory CVE-2024-2470 – Onbehoorlike gesag validasie
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|