Versoek Smuggling in HTTP/2 Downgrades
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die š¬ Discord groep of die telegram groep of volg ons op Twitter š¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HTTP/2 word oor die algemeen beskou as immuun teen klassieke request-smuggling omdat die lengte van elke DATA-raam eksplisiet is. Daardie beskerming verdwyn sodra 'n front-end proxy die versoek na HTTP/1.x ādowngradeā voordat dit na 'n back-end gestuur word. Die oomblik wanneer twee verskillende parsers (die HTTP/2 front-end en die HTTP/1 back-end) probeer ooreen te kom oor waar een versoek eindig en die volgende begin, kom al die ou desync truuks terug ā plus 'n paar nuwe.
Waarom downgrades gebeur
- Blaaiers praat reeds HTTP/2, maar baie ouer oorsprong infrastruktuur verstaan steeds net HTTP/1.1.
- Terug-proxies (CDNs, WAFs, laai-balansers) beƫindig dus TLS + HTTP/2 aan die rand en herformuleer elke versoek as HTTP/1.1 vir die oorsprong.
- Die vertaalstap moet albei
Content-Length
en/ofTransfer-Encoding: chunked
koppe skep sodat die oorsprong die liggaamslengte kan bepaal.
Wanneer die front-end die HTTP/2 raam lengte maar die back-end CL of TE vertrou, kan 'n aanvaller hulle dwing om nie saam te stem nie.
Twee dominante primitiewe klasse
Variant | Front-end lengte | Back-end lengte | Tipiese payload |
---|---|---|---|
H2.TE | HTTP/2 raam | Transfer-Encoding: chunked | Sluit 'n ekstra chunked boodskap liggaam in waarvan die finale 0\r\n\r\n nie gestuur word nie, sodat die back-end wag vir die aanvaller-geleverde āvolgendeā versoek. |
H2.CL | HTTP/2 raam | Content-Length | Stuur 'n kleiner CL as die werklike liggaam, sodat die back-end oor die grens lees in die volgende versoek. |
Hierdie is identies in gees aan klassieke TE.CL / CL.TE, net met HTTP/2 wat een van die parsers vervang.
Identifisering van 'n downgrade ketting
- Gebruik ALPN in 'n TLS handdruk (
openssl s_client -alpn h2 -connect host:443
) of curl:
curl -v --http2 https://target
As * Using HTTP2
verskyn, praat die rand H2.
2. Stuur 'n doelbewus verkeerd gevormde CL/TE versoek oor HTTP/2 (Burp Repeater het nou 'n keuselys om HTTP/2 te dwing). As die antwoord 'n HTTP/1.1 fout soos 400 Bad chunk
is, het jy bewys dat die rand die verkeer vir 'n HTTP/1 parser stroomaf omgeskakel het.
Exploitasiestroom (H2.TE voorbeeld)
:method: POST
:path: /login
:scheme: https
:authority: example.com
content-length: 13 # ignored by the edge
transfer-encoding: chunked
5;ext=1\r\nHELLO\r\n
0\r\n\r\nGET /admin HTTP/1.1\r\nHost: internal\r\nX: X
- Die front-end lees presies 13 bytes (
HELLO\r\n0\r\n\r\nGE
), dink die versoek is klaar en stuur dit soveel na die oorsprong. - Die back-end vertrou die TE-header, hou aan lees totdat dit die tweede
0\r\n\r\n
sien, en verbruik so die voorvoegsel van die aanvaller se tweede versoek (GET /admin ā¦
). - Die oorblyfsels (
GET /admin ā¦
) word as 'n nuwe versoek behandel wat agter die slagoffer se versoek in die tou staan.
Vervang die gesmokkelde versoek met:
POST /api/logout
om sessiefiksasie af te dwingGET /users/1234
om 'n slagoffer-spesifieke hulpbron te steel
h2c smuggling (helder teks opgraderings)
'n Studie in 2023 het getoon dat as 'n front-end die HTTP/1.1 Upgrade: h2c
header aan 'n back-end wat helder teks HTTP/2 ondersteun, oorgedra, 'n aanvaller raw HTTP/2 rame deur 'n rand kan tunnel wat slegs gevalideerde HTTP/1.1 ondersteun. Dit omseil header normalisering, WAF-reƫls en selfs TLS-terminasie.
Belangrike vereistes:
- Rand stuur albei
Connection: Upgrade
enUpgrade: h2c
onveranderd voort. - Oorsprong verhoog na HTTP/2 en hou die verbinding-hergebruik semantiek wat versoek-tou moontlik maak.
Mitigering is eenvoudig ā verwyder of hard-kodeer die Upgrade
header by die rand, behalwe vir WebSockets.
Noemenswaardige werklike CVE's (2022-2025)
- CVE-2023-25690 ā Apache HTTP Server mod_proxy herskryf reĆ«ls kan geketting word vir versoek splitsing en smuggling. (reggestel in 2.4.56)
- CVE-2023-25950 ā HAProxy 2.7/2.6 versoek/antwoord smuggling wanneer HTX parser pyplyn versoeke verkeerd hanteer.
- CVE-2022-41721 ā Go
MaxBytesHandler
het veroorsaak dat oorblywende liggaamsbytes as HTTP/2 rame geparseer word, wat kruis-protokol smuggling moontlik maak.
Gereedskap
- Burp Request Smuggler ā sedert v1.26 toets dit outomaties H2.TE/H2.CL en versteekte ALPN-ondersteuning. Aktiveer āHTTP/2 probingā in die uitbreiding opsies.
- h2cSmuggler ā Python PoC deur Bishop Fox om die helder teks opgradering aanval te outomatiseer:
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
- curl/
hyper
ā handmatige payloads saamstel:curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target
.
Verdedigingsmaatreƫls
- Eind-tot-eind HTTP/2 ā elimineer die afgraderingsvertaling heeltemal.
- Enkele bron van lengte waarheid ā wanneer afgraderend, altyd 'n geldige
Content-Length
en verwyder enige gebruiker-gelewerContent-Length
/Transfer-Encoding
headers genereer. - Normaliseer voor roete ā pas header-sanitizering voor roetering/herskryf logika toe.
- Verbinding isolasie ā moenie back-end TCP verbindings oor gebruikers hergebruik nie; āeen versoek per verbindingā verslaan tou-gebaseerde eksplosies.
- Verwyder
Upgrade
tensy WebSocket ā voorkom h2c tunneling.
Verwysings
- PortSwigger Navorsing ā āHTTP/2: Die vervolg is altyd ergerā https://portswigger.net/research/http2
- Bishop Fox ā āh2c Smuggling: versoek smuggling via HTTP/2 helder teksā https://bishopfox.com/blog/h2c-smuggling-request
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die š¬ Discord groep of die telegram groep of volg ons op Twitter š¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.