Tinklaraštis

Du kritiniai nginx klaidai: use-after-free HTTP/3 ir heap overflow gRPC tarpininkavimo modulyje

CVE-2026-42530_CVE-2026-42055_nginx_HTTP-3
CVE / Linux / NGINX / Saugumas

Du kritiniai nginx klaidai: use-after-free HTTP/3 ir heap overflow gRPC tarpininkavimo modulyje

Įsivaizduokite: jūsų nginx veikia kaip API šliuzas, perduodantis HTTP/2 srautą į mikroservisų infrastruktūrą. Kažkada nustatėte ignore_invalid_headers off, kad praleistumėte nestandartinius antraštės iš vieno iš vidinių servisų, ir padidinote large_client_header_buffers iki 4 MB dideliems JWT žetonams. Viskas veikia sklandžiai. Tada 2026 m. birželio 17 d. F5 išleidžia neplaninį saugumo pranešimą — ir paaiškėja, kad būtent ši konfigūracija leidžia neautentifikuotam nutolusiajam užpuolikui sutrikdyti nginx darbinių procesų darbą vienu užklausimu. Ir tai tik viena iš dviejų kritinių klaidų, ištaisytų tą dieną.

F5 aprašė šešias pažeidžiamumo vietas NGINX produktų ekosistemoje. Dvi iš jų — kritinio RCE lygio, abi su CVSS v4.0: 9.2 balu. CVE-2026-42530 — use-after-free modulyje ngx_http_v3_module, kuris apdoroja HTTP/3 per QUIC. CVE-2026-42055 — heap tipo buferio perpildymas HTTP/2 tarpininkavimo ir gRPC moduliuose. Abu leidžia neautentifikuotam nutolusiajam užpuolikui sugriauti nginx darbinių procesų darbą, o sistemose be ASLR arba galint jį apeiti — potencialiai vykdyti savavališko kodo vykdymą. Abu ištaisyti nginx 1.31.2 versijoje, išleistoje tą pačią dieną.

Aktyvaus išnaudojimo publikavimo metu nefiksuota. Tačiau tai laikina situacija: CVE-2026-42945 (NGINX Rift) 2026 m. gegužę per mažiau nei savaitę nuo viešo atskleidimo tapo aktyviai naudojama atakose. Veikiantis išnaudojimo kodas buvo atkurtas iš pataisymo skirtumo beveik akimirksniu. Nėra priežasties tikėtis, kad šios dvi klaidos elgsis kitaip.

KAIP VEIKIA KLAIDA HTTP/3 (CVE-2026-42530)

HTTP/3 veikia per QUIC transporto protokolą, kuris — skirtingai nei TCP — duomenis perduoda per kelis nepriklausomus srautus vienos jungtis ribose. HTTP/3 antraščių glaudinimui naudojamas QPACK mechanizmas — jis sudėtingesnis nei HTTP/2 naudojamas HPACK, nes QUIC srautai gali atvykti bet kokia tvarka. QPACK naudoja du specialius valdymo srautus: encoder stream (siuntėjas siunčia glaudinimo lentelės atnaujinimus) ir decoder stream (gavėjas patvirtina). Protokolas numato, kad kiekvienas iš šių srautų atidaromas vieną kartą per jungtį ir nebeatveriamas iš naujo.

Klaida ngx_http_v3_module yra tai, kaip nginx apdoroja situaciją, kai klientas jau veikiančios HTTP/3 sesijos metu bando atidaryti QPACK encoder stream iš naujo. Pirmą kartą atidarant srautą, nginx paskiria atmintį duomenų struktūroms. Uždarius — atlaisvina ją. Kai klientas atidaro srautą pakartotinai, nginx netinkamai patikrina šią ribinę sąlygą: darbo procesas bando pasiekti jau atlaisvintas duomenų struktūras. Klasikinis use-after-free (CWE-416): skaitymas arba rašymas į atmintį, kuri jau grąžinta alokatorius arba perduota kitam objektui.

Pažeidžiamos tik NGINX Open Source versijos 1.31.0 ir 1.31.1 — versijos, kuriose HTTP/3 palaikymas buvo pridėtas arba iš esmės pertvarkytas. Šaka 1.30.x nepaveikta. CWE-416 užfiksuotas F5 pranešime vidinio ID NPS-8 numeriu. Klaidą atrado Trung Nguyen (@everping) iš CyStack — jo vardas nurodytas oficialaus nginx changelog dokumente. F5 advisory K000161616 papildomai nurodo Zhenpeng (Leo) Lin (depthfirst), Evan Hellman (@xintenseapple) iš Trail of Bits kartu su OpenAI, bei komandas AntAISecurityLab ir Nebula Security (@nebusecurity).

KAIP VEIKIA KLAIDA HTTP/2 TARPININKAVIME IR gRPC (CVE-2026-42055)

Ši pažeidžiamumo vieta reikalauja trijų nestandartinių konfigūracijos parametrų vienu metu. Pirmas: HTTP/2 tarpininkavimas įjungtas per proxy_http_version 2 arba naudojama direktyva grpc_pass. Antras: direktyva ignore_invalid_headers nustatyta į off. Trečias: large_client_header_buffers dydis viršija 2 megabaitus. Pagal nutylėjimą visi trys parametrai nesudarys problemų — ignore_invalid_headers numatytoji reikšmė yra on, o large_client_header_buffers pagal nutylėjimą — 4 buferiai po 8 KB.

Nustačius ignore_invalid_headers off, nginx nustoja filtruoti antraštes su netaisyklingais pavadinimais įėjimo taške ir perduoda jas toliau — įskaitant formuojant užklausas į vidinį serverį. Moduliai ngx_http_proxy_v2_module ir ngx_http_grpc_module formuoja vidinio serverio užklausų antraštes, kopijuodami duomenis į heap buferį. Šio buferio dydis skaičiuojamas remiantis prielaida, kad antraštės buvo patikrintos. Kai large_client_header_buffers viršija 2 MB ir tikrinimas išjungtas — užpuolikas gali siųsti pakankamai dideles antraštes, kad kopijavimas peržengtų paskirto buferio ribas. Heap tipo buferio perpildymas (CWE-122) gadina gretimus alokatorius metaduomenis arba gyvus objektus heap atmintyje.

Klaidą atrado Mufeed VH iš Winfunc Research — jo vardas nurodytas oficialiame nginx.org changelog dokumente versijai 1.31.2. Paveiktos nginx versijos nuo 1.13.10 iki 1.31.1: tai didžiulis versijų diapazonas, apimantis beveik dešimtmetį. Pataisymas įtrauktas į NGINX Open Source 1.31.2 (mainline) ir 1.30.3 (stable), o komercinėms versijoms — į NGINX Plus 37.0.2.1 ir R36 P6.

KAIP TAI IŠNAUDOJAMA

CVE-2026-42530 (HTTP/3 UAF): užpuolikas užmezga HTTP/3 ryšį su serveriu per UDP/443. Jokio išankstinio autentifikavimo nereikia — QUIC jungtis iš prigimties viešai prieinama. Sesijos metu užpuolikas atidaro QPACK encoder stream, uždaro jį ir atidaro iš naujo — veiksmas, kurį protokolas draudžia, tačiau nginx 1.31.0–1.31.1 apdoroja netinkamai. Darbo procesas bando pasiekti jau atlaisvintas duomenų struktūras ir griūna su atminties pažeidimu. nginx automatiškai paleidžia iš naujo sugriovusius darbo procesus, todėl servisas atsistato — tačiau kartojant tą pačią sesiją DoS trunka be pertraukos.

CVE-2026-42055 (HTTP/2/gRPC heap overflow): užpuolikas siunčia HTTP užklausą su tyčia didelėmis arba netaisyklingomis antraštėmis — pakankamai didelėmis, kad kopijavimas į vidinio serverio struktūras peržengtų apskaičiuoto buferio ribas. Įėjimo filtravimas išjungtas direktyva ignore_invalid_headers off, todėl antraštės patenka tiesiai į tarpininkavimo modulio heap buferį. Rezultatas tas pats: darbo proceso griūtis, DoS.

Svarbi detalė iš F5 advisory: „conditions beyond their control” — tyčia pasirinkta formuluotė. Ji reiškia, kad užpuolikas negali visiškai kontroliuoti visų sąlygų: serveris turi būti sukonfigūruotas specifiškai. Būtent todėl pažeidžiamumas reikalauja trijų direktyvų derinio — tai ne tiesiog „siųsk didelę antraštę”, o „siųsk didelę antraštę į serverį, kuris tyčia išjungė apsaugą ir padidino buferį”. Tačiau iš užpuoliko perspektyvos: jei konfigūracija atitinka — techninių kliūčių nebėra. Viena HTTP užklausa su išpūstomis antraštėmis.

KAS NUTINKA TOLIAU — PRIKLAUSO NUO KONFIGŪRACIJOS

Sistemose su įjungtu ASLR (numatytasis parametras visuose šiuolaikiniuose Linux distributysuose) abi klaidos patikimai sukelia DoS — darbo proceso griūtį ir paleidimą iš naujo. ASLR kiekvieno paleidimo metu atsitiktinai parinks atminties adresus, todėl nuspėjamas vykdymo srauto valdymas po atminties pažeidimo tampa žymiai sudėtingesnis. Tai nėra apsauga nuo griūties, tačiau nuo RCE — reikšminga, nors ir ne absoliuti kliūtis.

Sistemose be ASLR arba kai jį galima apeiti — o viešas CVE-2026-42530 vaizdo demonstravimas jau egzistuoja ir tyrėjai patvirtina ASLR apėjimo realumą — atminties pažeidimas tampa valdoma primityvine galimybe. CVE-2026-42055 heap overflow gadina gretimus alokatorius metaduomenis arba gyvus objektus — standartinis kelias į vykdymo srauto perėmimą nepriklausomų saugumo tyrėjų vertinimu. CVE-2026-42530 use-after-free suteikia skaitymo/rašymo primityvą į atlaisvintą atmintį — analogiška pradinė medžiaga. F5 abiejų CVE advisory tai aiškiai nurodo: sistemose be ASLR arba galint jį apeiti galimas savavališko kodo vykdymas.

Svarbi detalė iš oficialaus nginx.org changelog: CVE-2026-48142 — buferio perrašymas ngx_http_charset_module modulyje, ištaisytas tame pačiame 1.31.2 leidime — oficialiai aprašytas kaip sukeliantis „ribotą darbo proceso atminties atskleidimą”. thecybersecguru.com tyrėjai nurodo, kad tokia darbo proceso atminties nutekėjimo galimybė yra klasikinis įrankis ASLR apėjimui prieš paleidžiant CVE-2026-42530 ar CVE-2026-42055. Tai jų vertinimas, o ne oficiali F5 pozicija. Visi trys CVE uždaromi vienu atnaujinimu iki 1.31.2.

CHRONOLOGIJA

2026 m. birželio 17 d. — F5 išleidžia neplaninį saugumo pranešimą K000161614, aprašantį šešis CVE NGINX produktų ekosistemoje. Tuo pačiu metu išleidžiamos nginx 1.31.2 (mainline) ir 1.30.3 (stable) versijos su pataisymais. „Neplaninis” čia yra esminis žodis: F5 paprastai saugumo pranešimus leidžia pagal ketvirtinį grafiką. Nukrypimas nuo jo reiškia, kad laukti kito ciklo buvo neįmanoma.

2026 m. birželio 19 d. — SecurityLab ir Xakep.ru publikuoja naujienas. nginx.org svetainėje atnaujinamas saugumo pranešimų sąrašas su šešiais naujais įrašais. Šios publikacijos metu aktyvaus CVE-2026-42530 ir CVE-2026-42055 išnaudojimo nefiksuota, viešas PoC nepaskelbtas. SOCRadar duomenimis, tyrėjai CVE-2026-42530 seka neoficialiu pavadinimu nginx-quicburst, o viešas vaizdo demonstravimas jau egzistuoja — tai signalas, kad techninis supratimas apie pažeidžiamumą išplito gerokai plačiau nei pirminė tyrėjų grupė.

KODĖL TAI SVARBU

Abi klaidos — tinklo lygio, be autentifikavimo, nereikalaujančios jokios vartotojo sąveikos. Tai palankiausios sąlygos užpuolikui: pakanka IP lygio prieigos prie jūsų nginx 443 prievade. Nereikia spėlioti slaptažodžio, išnaudoti CMS pažeidžiamumo ar laukti, kol kas nors paspaus nuorodą. Vienas UDP paketas — darbo procesas griūva.

CVSS balų painiava čia reali ir verta supratimo. CVE-2026-42530 ir CVE-2026-42055 gavo tris skirtingus įvertinimus priklausomai nuo šaltinio: CVSS v3.1 — 8.1 (High, pagal CSA Singapore ir Tenable duomenis), CVSS v4.0 — 9.2 (Critical, pagal F5 advisory), ir nginx.org vidinis rimtumo lygis — atitinkamai „major” ir „medium”. Visi trys teisingi — jie tiesiog matuoja skirtingus dalykus. CVSS v4 pakeitė tinklo lygio atminties pažeidimo klaidų vertinimo formulę ir linkęs jas vertinti aukščiau nei v3.1. nginx.org vidinis reitingas atspindi komandos nuomonę apie išnaudojimo patikimumą — istoriškai konservatyvesnę. Jei jūsų pažeidžiamumų valdymo sistema orientuojasi tik į vieną skalę, galite gauti „medium” ir „critical” tam pačiam klaidos tipui iš skirtingų patikimų šaltinių. Remkitės CVSS v4.0: 9.2 — tai aktualesnė sistema.

CVE-2026-42055 apima nginx 1.13.10 — 1.31.1. Tai beveik dešimtmetis leidimų su pažeidžiamu kodu — su sąlyga, kad konfigūracija atitinka. „Nestandartinė konfigūracija” čia nereiškia egzotiška: HTTP/2 tarpininkavimas su išplėstais buferiais ir atsipalaidavusiu antraščių tikrinimo — tai būtent tai, ką daro aptarnaujant gRPC srautą, didelius JWT žetonus ir nestandartines API schemas. Gamybinė mikroservisų infrastruktūra.

ATNAUJINIMAS

Pirmiausia patikrinkite dabartinę nginx versiją — tai parodys, kurioje šakoje esate ir ar reikia veikti:

nginx -v

Jei vykdymo rezultatas rodo 1.31.0 arba 1.31.1 — esate pažeidžiami abiem CVE-2026-42530 ir CVE-2026-42055. Bet kuri versija nuo 1.13.10 iki 1.31.1 — pažeidžiami CVE-2026-42055. Atnaujinkite iki 1.31.2 (mainline) arba 1.30.3 (stable). Ubuntu/Debian sistemose, jei nginx įdiegtas iš oficialaus nginx.org saugyklos — ši komanda atnaujins iki naujausios versijos:

apt update && apt install nginx

Jei nginx įdiegtas iš distribūtyvo standartinės saugyklos (pavyzdžiui, Ubuntu universe) — ten gali būti sena versija, negavusi pataisymo. Patikrinkite, iš kur atėjo paketas: apt-cache policy nginx. Jei matote adresą tipo nginx.org/packages — viskas tvarkoje. Jei distribūtyvo adresas — patikrinkite versiją ir prireikus perjunkite į oficialią nginx.org saugyklą.

RHEL/CentOS/AlmaLinux sistemose naudokite dnf — ši komanda atnaujins nginx iki naujausios versijos sukonfigūruotose saugyklose:

dnf update nginx

Po atnaujinimo patikrinkite, kad veikia nauja versija — vykdymo rezultatas turėtų rodyti 1.31.2 arba 1.30.3:

nginx -v && systemctl status nginx

Jei negalite nedelsiant atnaujinti — naudokite laikinas priemones. Jos sumažina riziką, bet nepakeičia pataisymo: atnaujinkite kuo greičiau. CVE-2026-42530 atveju: išjunkite HTTP/3, pašalindami parametrą quic iš visų listen direktyvų. Tai visiškai panaikina atakos paviršių, nes pažeidžiamumas nepasiekiamas be HTTP/3. Patikrinkite, kad quic neliko niekur konfigūracijoje — komanda išves visas eilutes, kuriose sutinkamas šis žodis:

grep -r "quic" /etc/nginx/

Jei vykdymo rezultate yra eilutės tipo listen 443 quic reuseport; arba http3 on; — būtent šias eilutes reikia pakomentuoti arba ištrinti, po to perkrauti nginx. Jei vykdymo rezultatas tuščias — HTTP/3 neįjungtas, CVE-2026-42530 jūsų neliečia.

CVE-2026-42055 atveju: atkurkite numatytąją ignore_invalid_headers reikšmę (tai yra on) arba sumažinkite large_client_header_buffers žemiau 2 MB. Vieno iš dviejų pakanka — pažeidžiamumas reikalauja abiejų sąlygų vienu metu. Patikrinkite, ar konfigūracijoje yra probleminės direktyvos:

grep -r "ignore_invalid_headers\|large_client_header_buffers" /etc/nginx/

Jei eilučių nėra — CVE-2026-42055 jūsų neliečia su numatytosiomis nuostatomis. Jei eilučių yra — patikrinkite reikšmes: ignore_invalid_headers off kartu su large_client_header_buffers didesniu nei 2 MB yra pažeidžiama kombinacija. Po bet kokių konfigūracijos pakeitimų — sintaksės patikrinimas ir perkrovimas:

nginx -t && systemctl reload nginx

IŠVADOS

Dvi kritinio lygio nginx klaidos per vieną dieną — tai nėra įprastas įvykis, ir neplaninis F5 pranešimas tai patvirtina. CVE-2026-42530 liečia siaurą, tačiau augančią grupę — tuos, kurie įjungė HTTP/3 palaikymą nginx 1.31.x. CVE-2026-42055 apima didžiulį versijų diapazoną — 1.13.10 — 1.31.1 — esant nestandartinei, tačiau praktikoje paplitusiai konfigūracijai.

Visi trys pažeidžiamumai — CVE-2026-42530, CVE-2026-42055 ir CVE-2026-48142 — uždaromi vienu atnaujinimu iki 1.31.2. Pataisymas egzistuoja, jis stabilus, išleistas tą pačią dieną kaip ir pranešimas. Atnaujinkite dabar. Debian/Ubuntu sistemose: apt update && apt install nginx. RHEL/AlmaLinux: dnf update nginx. NGINX Rift parodė, kad laikas tarp „pataisymas išleistas” ir „išnaudojimas realiose atakose” matuojamas dienomis, o ne savaitėmis.

Leave your thought here

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *