Request Smuggling in HTTP/2 Downgrades
Reading time: 6 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
HTTP/2 kwa ujumla inachukuliwa kuwa haina hatari kwa request-smuggling ya jadi kwa sababu urefu wa kila DATA frame ni wazi. Ulinzi huo unakosekana mara tu proxy ya mbele “inaporomosha” ombi hilo hadi HTTP/1.x kabla ya kulipeleka kwa nyuma. Wakati parser mbili tofauti (HTTP/2 front-end na HTTP/1 back-end) zinapojaribu kukubaliana juu ya mahali ambapo ombi moja linamalizika na lingine linaanza, hila zote za zamani za desync zinarejea – pamoja na chache mpya.
Kwa nini kuporomoka kunatokea
- Vivinjari tayari vinazungumza HTTP/2, lakini miundombinu ya zamani ya asili bado inelewa tu HTTP/1.1.
- Reverse-proxies (CDNs, WAFs, load-balancers) kwa hivyo huweka mwisho TLS + HTTP/2 kwenye ukingo na kuandika upya kila ombi kama HTTP/1.1 kwa asili.
- Hatua ya tafsiri inahitaji kuunda zote
Content-Length
na/auTransfer-Encoding: chunked
vichwa ili asili iweze kubaini urefu wa mwili.
Wakati wowote front-end inatilia maanani urefu wa frame ya HTTP/2 lakini back-end inatilia maanani CL au TE, mshambuliaji anaweza kuwafanya wasikubaliane.
Daraja mbili kuu za primitive
Variant | Front-end length | Back-end length | Typical payload |
---|---|---|---|
H2.TE | HTTP/2 frame | Transfer-Encoding: chunked | Weka ujumbe wa mwili wa chunked wa ziada ambao 0\r\n\r\n wa mwisho haujatumwa, hivyo back-end inasubiri ombi la “next” lililotolewa na mshambuliaji. |
H2.CL | HTTP/2 frame | Content-Length | Tuma ndogo CL kuliko mwili halisi, hivyo back-end inasoma zaidi ya mpaka katika ombi linalofuata. |
Hizi ni sawa kwa roho na TE.CL / CL.TE za jadi, tu na HTTP/2 ikichukua nafasi ya mmoja wa waandishi.
Kutambua mchain ya kuporomoka
- Tumia ALPN katika handshake ya TLS (
openssl s_client -alpn h2 -connect host:443
) au curl:
curl -v --http2 https://target
Ikiwa * Using HTTP2
inaonekana, ukingo unazungumza H2.
2. Tuma ombi la CL/TE lililokusudiwa vibaya kupitia HTTP/2 (Burp Repeater sasa ina dropdown ya kulazimisha HTTP/2). Ikiwa jibu ni kosa la HTTP/1.1 kama 400 Bad chunk
, una uthibitisho kwamba ukingo umebadilisha trafiki kwa parser ya HTTP/1 chini.
Mchakato wa unyakuzi (mfano wa H2.TE)
: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
- Front-end inasoma byte 13 tu (
HELLO\r\n0\r\n\r\nGE
), inadhani ombi limekamilika na kupeleka kiasi hicho kwa asili. - Back-end inategemea kichwa cha TE, inaendelea kusoma hadi inapoona ya pili
0\r\n\r\n
, hivyo inatumia prefix ya ombi la pili la mshambuliaji (GET /admin …
). - Kiasi kilichobaki (
GET /admin …
) kinachukuliwa kama ombi jipya lililoorodheshwa nyuma ya la mwathirika.
Badilisha ombi lililofichwa na:
POST /api/logout
kulazimisha kurekebisha kikaoGET /users/1234
kuiba rasilimali maalum ya mwathirika
h2c smuggling (mabadiliko ya wazi)
Utafiti wa mwaka 2023 ulibaini kwamba ikiwa front-end inapita kichwa cha HTTP/1.1 Upgrade: h2c
kwa back-end inayounga mkono HTTP/2 ya wazi, mshambuliaji anaweza kupitisha raw HTTP/2 frames kupitia edge ambayo ilithibitisha tu HTTP/1.1. Hii inakwepa kawaida ya kichwa, sheria za WAF na hata kumaliza TLS.
Mahitaji muhimu:
- Edge inapeleka zote
Connection: Upgrade
naUpgrade: h2c
bila kubadilishwa. - Asili inaongeza kwa HTTP/2 na inashikilia semantics za kurejelea muunganisho ambazo zinawezesha kuorodhesha maombi.
Kuzuia ni rahisi – ondoa au uweke kichwa cha Upgrade
kwa edge isipokuwa kwa WebSockets.
CVEs za kutambulika katika ulimwengu halisi (2022-2025)
- CVE-2023-25690 – Sheria za mod_proxy za Apache HTTP Server zinaweza kuunganishwa kwa ajili ya kugawanya na kuficha maombi. (imekamilishwa katika 2.4.56)
- CVE-2023-25950 – HAProxy 2.7/2.6 kuficha maombi/jibu wakati parser ya HTX iliposhughulikia vibaya maombi yaliyoandikwa kwa mfululizo.
- CVE-2022-41721 – Go
MaxBytesHandler
ilisababisha byte za mwili zilizobaki kuchambuliwa kama HTTP/2 frames, ikiruhusu kuficha kwa njia ya itifaki tofauti.
Zana
- Burp Request Smuggler – tangu v1.26 inajaribu kiotomatiki H2.TE/H2.CL na msaada wa ALPN uliofichwa. Wezesha “HTTP/2 probing” katika chaguzi za nyongeza.
- h2cSmuggler – Python PoC na Bishop Fox ili kuendesha shambulio la mabadiliko ya wazi:
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
- curl/
hyper
– kuunda payloads za mikono:curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target
.
Hatua za kujihami
- HTTP/2 kutoka mwisho hadi mwisho – ondolea kabisa tafsiri ya kudondosha.
- Chanzo kimoja cha ukweli wa urefu – unaposhuka, daima tengeneza
Content-Length
halali na ondoa kichwa chochote kilichotolewa na mtumiajiContent-Length
/Transfer-Encoding
. - Sanitiza kabla ya njia – tumia usafi wa kichwa kabla ya mantiki ya kuelekeza/kurekebisha.
- Kutengwa kwa muunganisho – usitumie muunganisho wa TCP wa back-end kati ya watumiaji; “ombio moja kwa muunganisho” inashinda unyanyasaji wa msingi wa orodha.
- Ondoa
Upgrade
isipokuwa WebSocket – inazuia h2c tunnelling.
Marejeleo
- PortSwigger Research – “HTTP/2: The Sequel is Always Worse” https://portswigger.net/research/http2
- Bishop Fox – “h2c Smuggling: request smuggling via HTTP/2 clear-text” https://bishopfox.com/blog/h2c-smuggling-request
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.