QPACK propusti omogućavaju rušenje HTTP/3 servera

FoxIO je objavio propuste u QPACK obradi HTTP/3 zaglavlja koji neprijavljenom napadaču mogu omogućiti uskraćivanje usluge jednom vezom. Istraživači su istu klasu problema pronašli u sedam od deset testiranih HTTP/3 stekova, a kod Bun-a su izmerili pojačanje potrošnje memorije do oko 4.000 puta u odnosu na količinu podataka poslatih mrežom.
Propusti ne omogućavaju krađu podataka ni izvršavanje koda, a nisu objavljeni ni izveštaji o napadima u stvarnom okruženju. Ipak, posledica može biti iscrpljivanje memorije podrazumevanog servera ili prekid dostupnosti usluge, bez potrebe da napadač ima nalog ili poseban pristup.
Gde nastaje problem u QPACK-u
QPACK je mehanizam kojim HTTP/3 sažima zaglavlja zahteva: ponovljena polja mogu se poslati kao kratke reference umesto kompletnog teksta. Bezbedna implementacija mora ograničiti veličinu zaglavlja nakon raspakivanja. Pogođeni stekovi ograničavaju komprimovani paket na mreži, ne i rezultat dekompresije, ili granicu proveravaju prekasno.
Takav tok obrade može od malog ulaza napraviti stotine hiljada polja zaglavlja koja server zadržava u memoriji. FoxIO je kod quic-go izmerio da se 1 MB komprimovanih podataka pretvara u približno 160.000 polja i oko 15 MB memorije zahteva. Savetodavno upozorenje quic-go navodi da moguće uvećanje može dostići oko 50 puta.
Drugi postupak koristi jedno zaglavlje od približno 4 KB i veliki broj jednobajtnih referenci na njega. Ako server za svaku referencu ponovo gradi ceo unos, odnos primljenih podataka i zauzete memorije naglo raste. FoxIO je kod Bun-a izmerio približno 4.000 puta, a kod lsquic između 600 i 1.800 puta.
Stanje zakrpa i izloženih proizvoda
Zakrpe su dostupne za quic-go 0.57.0 kroz CVE-2025-64702, Cloudflare quiche 0.29.3 kroz CVE-2026-12523, lsquic 4.9.0 i Wireshark 4.6.2 odnosno 4.4.12 kroz CVE-2025-13945. Bun, Rust biblioteka h3 kompanije Hyperium i aioquic, uključujući mitmproxy, pri objavljivanju nalaza nisu imali zakrpu.
Za Bun je slučaj posebno ozbiljan. Njegov eksperimentalni HTTP/3 server koristi lsquic, ali sopstveni kod proverava pojedinačna zaglavlja bez ukupne granice. Kada raspakovana zaglavlja premaše 2 GB, brojač veličine preliva se na nulu i server ulazi u petlju bez oporavka. FoxIO navodi da tok sa oko 516 KB podataka na mreži može ostaviti proces na 100% procesorskog vremena i blokirati nove zahteve.
Wiresharkov propust odnosi se na HTTP/3 disektor pri otvaranju snimka ili dešifrovanju saobraćaja pomoću datoteke ključeva, a ne na mrežno dostupni server. Nasuprot tome, IIS, Envoy, ngtcp2/nghttp3 i Google quiche nisu pogođeni jer ograničavaju raspakovana zaglavlja tokom dekodiranja.
Koraci za operatere
Operateri treba da nadograde podržane komponente na dostupne ispravljene verzije. Dok zakrpe ne stignu, FoxIO za Bun preporučuje da se HTTP/3 server ne izlaže, za mitmproxy isključivanje HTTP/3 opcijom --set http3=false, a za h3 postavljanje razumne vrednosti max_field_section_size.
Za poslovna okruženja praktičan zaključak je da inventar HTTP/3 zavisnosti mora obuhvatiti i biblioteke koje koriste posredni proizvodi poput Caddy, Traefik, cloudflared, LiteSpeed Web Server i OpenLiteSpeed. Prioritet su nadogradnja, privremeno smanjenje izloženosti nezaštićenih stekova i provera ograničenja nad raspakovanim zaglavljima, jer se rizik ostvaruje bez autentifikacije.

