A Node.js RCE mögött álló Brotli-dekóder hiba a Bun-t, a Pythont és más széles körben használt szoftvereket is érinti

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

A Google Brotli-dekóderében talált memória-kezelési hiba rengeteg olyan programban ott van, amely Brotli-tömörítésű adatot csomagol ki. Ilyen például a Bun, a Python Brotli és brotlicffi csomagok, valamint az Envoy proxyk, ha Brotli-kitömörítők vannak beállítva. A CVE-2026-111497 azonosítót kapott sebezhetőség lehetővé teszi, hogy egy speciálisan összeállított tömörített adat a buffer végét túlíró műveletet végezzen, és így a program memóriáját módosítsa. Ennek következménye lehet összeomlás, memória­szivárgás, vagy akár támadó által irányított kód futtatása is.

Az Imperva kutatói megmutatták, hogy egy nem frissített Node.js builden ténylegesen futtatható kód. Más érintett szoftvereknél ezt még nem demonstrálták, és eddig nem jelentettek valós támadásokat.

A hibát október 21-én hozták nyilvánosságra, ekkor adta ki a javításokat a Node.js és a Google, majd termékenként sorra érkeztek az újabb javítóverziók. Mivel a hiba a Google dekóderében van, és minden program a saját másolatát szállítja belőle, mindegyiknek külön kell frissítenie a saját példányát.

A Brotli a Google tömörítési formátuma, amelyet széles körben használnak a weben oldalak és más forgalom tömörítésére. A hiba abban a C kódban található, amely a Brotli adatfolyamot kibontja, ezért minden olyan szoftverbe átkerül, amely ezt a kódot újrahasznosítja – a programozási nyelvek runtime-jaitól a proxykon át a Python csomagokig.

Mely szoftverek érintettek

Termék Érintett verziók Javított verziók Mikor jelent kockázatot?
Google Brotli (C könyvtár) 1.0.3–1.2.0 1.0.10, 1.1.1, 1.2.1 Ha a program nem megbízható Brotli-adatokat dekódol.
Node.js 22.x, 24.x, 26.x a javítás előtt; 20.x és régebbi, már nem támogatott verziók 22.23.4, 24.22.1, 26.12.1 Ha a fetch() Brotli-tömörítésű (br) választ dolgoz fel, vagy az Express / body-parser ilyen tömörítésű kérést kezel.
Bun 1.4.3 és korábbi 1.4.4 Ha a fetch() Brotli-tömörítésű választ dolgoz fel, vagy a program a node:zlib modult használja.
Envoy 1.39.2, 1.38.5, 1.37.7, 1.36.11 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 Csak akkor, ha a Brotli-dekompresszor konfigurálva van.
Istio 1.31.0–1.31.1, 1.30.0–1.30.5, 1.29.0–1.29.8 1.31.2, 1.30.6, 1.29.9 Csak akkor, ha a Brotli-dekompresszió engedélyezve van.
Python – Brotli 1.2.0 és korábbi 1.2.1 Ha a csomag telepítve van, és egy HTTP-kliens Brotli-tömörítésű tartalmat dekódol.
Python – brotlicffi 1.2.0.x és korábbi 1.2.1.0 Ha a csomag telepítve van, és egy HTTP-kliens Brotli-tömörítésű tartalmat dekódol.
cdxgen 13.4.0 és korábbi, illetve 12.8.8 és korábbi önálló binárisok és konténerképek 13.5.0, 12.8.9 Ha az önálló bináris vagy a konténerkép nem megbízható bemenetet vizsgál.

A program csak akkor sebezhető, ha olyan Brotli-adatot fejt vissza, amit más fél irányít. Node.js és Bun esetén ez akkor történik, amikor a beépített fetch() olyan választ olvas be, amelyet Content-Encoding: br fejléc mellett küldtek, vagy amikor a kérés törzsét feldolgozó kód – például az Express 5 és a body-parser 2 – egy Brotli-tömörítésű feltöltést csomagol ki. Egy egyszerű, alap Node.js HTTP-szerver önmagában nem dekódolja a kérés törzsét.

Envoy és Istio csak akkor érintett, ha a Brotli dekompresszió engedélyezve van, például egy Envoy filteren keresztül. Ha ki van kapcsolva, a hiba nem érhető el.

Python esetén már az is kockázatot jelent, ha a Brotli vagy a brotlicffi csomag egyáltalán telepítve van. Ha bármelyik jelen van, a requests, urllib3, httpx és aiohttp HTTP kliensek önállóan dekódolják a Brotli-válaszokat, így az alkalmazás akkor is sebezhető lehet, ha a saját kódjában soha nem importálja a Brotli-t.

Egy webes alkalmazástűzfal csak korlátozottan segít. A Vercel, amely a nyilvánosságra hozatal napján tűzfalszabályokat vezetett be, közölte, hogy ezek a szabályok nem védik azokat a válaszokat, "amelyeket a függvényeid más szerverektől fetch-elnek". Ennél az útvonalnál csak a runtime vagy a library frissítése zárja be a rést.

Hogy a hibát meddig lehet kihasználni, az adott szoftvertől függ. Az Imperva Red Teamje, amely Node2Shell néven hivatkozik a munkájára, támadó által megadott kódot futtatott egy módosítatlan, Linux ARM64-re fordított Node.js 24.22.0 builden, a kódot fetch válaszként és Express kérés törzseként is eljuttatva. A kihasználás több próbálkozást igényelt, nem hozták nyilvánosságra, és más buildeken nem tesztelték.

Az OpenAI, amelynek Codex Security csapata jelentette a hibát, hitelesítetlen távoli kódfuttatást lehetővé tevő Brotli-sebezhetőségként írja le, és az érintett szoftverek között sorolja fel a Node.js-t, a Bun-t és az Envoy-t. Beszámolójuk szerint a hiba két irányban is működik:

egy nem frissített szervert, amely tömörített bemenetet fogad, átvehet egy rosszindulatú kliens, és egy nem frissített klienst, amely tömörített bemenetet fogad (például "curl --compressed"), átvehet egy rosszindulatú szerver.

Valós, aktív kihasználásról eddig nem érkezett jelentés. A CISA október 23-i értékelése szerint a kihasználás "nincs", az automatizáltság pedig "nem", és a Red Hat is azt írta, hogy nincs megbízható, nyilvános proof-of-concept kód futtatására.

A súlyossági besorolások attól függően változnak, ki pontozza a hibát. A CVE-t kiosztó Google a CVSS 4.0 skálán 9,2-re, vagyis kritikusnak értékeli. A Node.js magasnak, a Red Hat pedig 8,1-re, azaz fontosnak minősíti.

A javítás története szokatlan. A hibát lezáró módosítást február 27-én beírták a Brotli forráskódjába, de egyik új Brotli kiadás sem tartalmazta egészen október 21-ig. Az OpenAI szerint a hiba gyökérokát „valójában februárban kijavították a Brotli forráskódjában, de akkor még nem volt ismert, hogy ebből biztonsági sebezhetőség lesz, és azóta nem jelent meg új Brotli-kiadás”.

A Node.js Khai Tran és Sylvie Mayer (OpenAI Codex Security) nevét tünteti fel a sebezhetőség bejelentőiként, a javítást pedig a karbantartók, Matteo Collina és Antoine du Hamel készítették el.

Mit tegyünk most?

Frissíts a fenti táblázatban szereplő javított verzióra, majd indítsd újra a szolgáltatást, és építsd újra az összes container image-et, mert a futó folyamat az újraindításig a régi dekódert használja.

Ha egyelőre nem tudsz frissíteni, állítsd le a nem megbízható Brotli-adatok dekódolását. Az OpenAI közzétételi oldala és az Aikido biztonsági cég is ezt javasolja:

  • Utasítsd el azokat a bejövő kéréseket, amelyek Content-Encoding: br fejlécet tartalmaznak, még azelőtt, hogy bármilyen proxy vagy parser dekódolná a törzset.
  • Kapcsold ki a Brotli automatikus dekódolását a HTTP kliensekben, és utasítsd el a Brotli-válaszokat, mielőtt dekódolnád őket.
  • Python alatt távolítsd el a Brotli és brotlicffi csomagokat, hogy a kliensek visszaessenek gzipre és deflate-re.

Önmagában az sem elég, ha kiveszed a br értéket az Accept-Encoding fejlécből, mert a szerver Brotli-t is küldhet, függetlenül attól, mit kér a kliens. Node.js esetén nem jelentettek meg kerülő megoldást, ezért az egyetlen valódi javítás a runtime frissítése.

A rendszer-csomagok különböző időpontokban kapják meg a javítást. Debian október 23-án javította a brotli csomagot a Debian 13 (trixie) kiadásban, az 1.1.0-2+deb13u1 verzióban. Amazon Linux 2023 esetén október 22-én még függőben volt a javítás a brotli és a Node.js 24 csomagokra.

A függőségvizsgálók lehet, hogy még nem jelzik a Python csomagokat. A CVE-rekord a Google Brotli tárolóját nevezi meg, nem a PyPI-csomagokat, és GitHub figyelmeztetése továbbra sem sorol fel érintett csomagot, márpedig ezt olvassa a Dependabot. A két Python csomaghoz tartozó figyelmeztetést, a PYSEC-2026-4322 és PYSEC-2026-4323 bejegyzést október 23-án vették fel, ezért érdemes a telepített verziókat kézzel is ellenőrizni.