O eroare de corupție a memoriei în decodorul Brotli al Google permite ca date comprimate construite cu răutăție să scrie dincolo de capătul unui buffer și să altereze memoria unui program. Urma CVE-2026-111497, este considerată critică de Google și afectează Node.js, Bun, proxy-urile Envoy și pachetele Python Brotli și brotlicffi.
Echipa Red Team de la Imperva, care urmărește problema sub numele Node2Shell, a demonstrat că un cod atacator poate rula pe o versiune nepatchată de Node.js. Cercetătorii avertizează însă că aceeași copie vulnerabilă a decodorului se regăsește în mult mai multe produse, de la interpretoare de limbaj până la proxy-uri și biblioteci Python.

O fisură de memorie care se propagă prin tot webul
Brotli este un format de compresie creat de Google, folosit pe scară largă pentru micșorarea paginilor și a traficului web. Defectul se află în codul C care despachetă un flux Brotli, astfel că se transmite prin orice software care reutilizează acea implementare: de la runtime-uri de limbaj până la proxy-uri și pachete Python.
Problema a fost dezvăluită public pe 21 octombrie, zi în care Node.js și Google au lansat corecțiile, iar de atunci remediile au apărut produs cu produs. Efortul rămâne însă unul distribuit: fiecare aplicație trebuie să își actualizeze singură copia a decodorului.
Cum nu există încă exploatări raportate în lumea reală, fereastra de intervenție este încă deschisă. CISA a evaluat, pe 23 octombrie, că exploatarea este «none», iar automatizarea «no».
Red Hat a precizat că nu există o demonstrație publică fiabilă de execuție de cod.
Cine este expus și în ce condiții
Expunerea apare doar acolo unde se decodează Brotli provenit de la altcineva. În Node.js și Bun, acest lucru se întâmplă când funcția integrată fetch() citește un răspuns trimis cu antetul Content-Encoding: br, sau când codul pentru corpul cererii, precum Express 5 și body-parser 2, despachetează o încărcare Brotli.
Un server HTTP Node.js obișnuit nu decodează singur corpurile cererilor, deci riscul apare acolo unde există consumatori de fluxuri comprimate. Envoy și Istio sunt atinse numai dacă decompresia Brotli este activată, de regulă printr-un filtru Envoy; cu funcția oprită, defectul nu poate fi atins.
În Python, pericolul vine din simpla instalare a pachetului Brotli sau brotlicffi. Odată prezenți, clienți HTTP precum requests, urllib3, httpx și aiohttp decodează automat răspunsurile Brotli, astfel încât o aplicație poate fi expusă fără să importe vreodată Brotli în propriul cod.
Un firewall de aplicație web ajută doar parțial. Vercel, care a adăugat reguli de filtrare chiar în ziua dezvăluirii, a precizat că acestea nu acoperă «responses your functions fetch from other servers».
Pentru această cale, singura soluție rămâne actualizarea runtime-ului sau a bibliotecii.
O singură demonstrație de execuție de cod, în două direcții
Cât de departe poate fi dus exploitul depinde de software. Echipa Red Team a Imperva a rulat cod furnizat de atacator pe o versiune nemodificată Node.js 24.22.0 pentru Linux pe ARM64, livrat atât ca răspuns adus prin fetch, cât și ca corp de cerere Express.
Exploitul a necesitat mai multe încercări, nu a fost lansat public și nu a fost testat pe alte build-uri.
OpenAI, prin echipa Codex Security care a raportat defectul, îl descrie ca activând execuție de cod la distanță neautentificată și listează Node.js, Bun și Envoy între produsele afectate. În contul lor, mecanismul funcționează în două sensuri: un server nepatchat care acceptă input comprimat poate fi preluat de un client rău, iar un client nepatchat, precum «curl --compressed», poate fi preluat de un server rău.
Severitățile diferă în funcție de cine evaluează. Google, care a atribuit CVE-ul, îl notează cu 9.2 pe scara CVSS 4.0, adică critic. Node.js îl clasifică drept înalt, iar Red Hat îi acordă 8.1, important.
Corecția are o istorie neobișnuită. Modificarea care închide gaura a fost adăugată în codul sursă Brotli pe 27 februarie, dar nicio versiune nouă Brotli nu a fost publicată până pe 21 octombrie.
OpenAI a explicat că problema «was actually fixed in the Brotli source code in February, but it wasn't known at the time that it gave rise to a security vulnerability and there was no more recent release of Brotli».
Node.js creditează raportarea către Khai Tran și Sylvie Mayer de la Codex Security, iar corecția către întreținătorii Matteo Collina și Antoine du Hamel.
Ce fac administratorii și ce înseamnă pentru România și UE
Primul pas rămâne actualizarea la o versiune reparată, apoi repornirea serviciului și reconstruirea imaginilor de container: un proces care rulează păstrează decodorul vechi până la restart. Unde actualizarea nu este posibilă, recomandările OpenAI și Aikido sunt să respingi cererile cu Content-Encoding: br înainte de orice proxy sau parser, să dezactivezi decodarea Brotli automată în clienți și să dezinstalezi în Python pachetele Brotli și brotlicffi, astfel încât clienții să revină la gzip și deflate.
Eliminarea lui br din antetul Accept-Encoding nu ajută singură, pentru că un server poate trimite Brotli oricum cere clientul. Pentru Node.js nu există soluție provizorie publicată, deci actualizarea runtime-ului rămâne singura variantă.
Distribuțiile corectează în ritm diferit. Debian a reparat pachetul brotli pentru Debian 13 (trixie) pe 23 octombrie, în versiunea 1.1.0-2+deb13u1, în timp ce Amazon Linux 2023 lista încă drept în așteptare pachetele brotli și Node.js 24, la 22 octombrie.
Scannerele de dependențe pot sări peste pachetele Python. Înregistrarea CVE numește repository-ul Brotli al Google, nu pachetele PyPI, iar advisory-ul GitHub nu listează încă niciun pachet afectat — exact ceea ce citește Dependabot.
Intrarea advisory PYSEC-2026-4322 și PYSEC-2026-4323 au fost adăugate pe 23 octombrie, deci versiunile instalate trebuie verificate manual.
Pentru România și Uniunea Europeană, riscul este mai ales de suprafață, nu de vizibilitate. Platformele de e-commerce, integratorii financiari și serviciile publice care rulează Node.js sau proxy-uri Envoy în containere Docker sau Kubernetes trebuie să verifice manual versiunile, inclusiv imaginile de container vechi, care rămân vulnerabile chiar dacă gazda a fost actualizată.
Obligațiile NIS2 impun raportarea unui incident de securitate în 24 de ore de la detectare, în 72 de ore de la constatare și printr-un raport final într-o lună. Un defect încă neexploatat, dar critic prin rating, ar trebui tratat ca o alertă de vulnerabilitate cu actualizare prioritară și inventar al dependențelor Brotli.
Pachetele Python rămân punctul orb: aplicațiile europene care folosesc requests sau httpx pot fi expuse fără să știe că Brotli este instalat. Un audit al mediilor Python, inclusiv al imaginilor de container și al mediilor virtuale, este cel mai rapid mod de a închide suprafața înainte de actualizarea bibliotecilor.
Rămâne, așadar, o vulnerabilitate de memorie cu potențial real de execuție de cod, dar fără exploituri raportate în lumea reală. Fereastra este deschisă, iar organizațiile care actualizează primele își reduc expunerea înainte ca tehnologia să fie folosită în lanț.



