Kutatók Node2Shell RCE-támadást mutattak be Node.js build ellen manipulált Brotli-adattal

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

Kártékony Brotli-adat segítségével támadói kódot lehet futtatni egy hivatalos Node.js builden futó alkalmazásban – ezt mutatták be az Imperva biztonsági kutatói.

„Node2Shell” nevű proof of conceptjük támadói kódot futtatott a hivatalos Node.js 24.22.0 Linux arm64 image-en, debugger és egyedi build nélkül, pusztán azzal, hogy speciálisan kialakított adatot adtak a beépített Brotli-dekódernek (CVE-2026-111497). A Node.js nyilvánosságra hozta a hibát, és október 21-én kiadta a javításokat, ezért minden olyan alkalmazást frissíteni kell, amely nem megbízható Brotli-adatot dekódol.

Az Imperva tesztje nem járt sikerrel minden próbálkozásnál, a kódfuttatás több kísérlet után sikerült a Linux arm64 környezetben. Az eredmény csak erre az egy buildre és alkalmazás-környezetre vonatkozik, más architektúrákat, illetve a 22.x és 26.x ágakat nem vizsgálták. A javított, 24.22.1-es kiadáson ugyanazt az adatot már elutasították, és nem futott le semmilyen kód.

A bemutató túlmutat az első nyilvános proof of concepten, amely csak szándékosan meggyengített teszt builden tudott kódfuttatást elérni. Alapértelmezett builden a proof of concept szerzője csak összeomlást és a processzmemória korlátozott olvasását tapasztalta, nem kódfuttatást, és azt írta, hogy normál buildre működő támadást nem sikerült kidolgozni.

Október 22-ig nem érkezett jelentés arról, hogy a hibát éles környezetben kihasználták volna.

 

Mely alkalmazásokat érinti

A hiba a Node.js-be csomagolt Brotli-dekóderben található, ezért a 22.x, 24.x és 26.x ágakon futó alkalmazásokat érinti, nem csak azt az egy buildet, amelyet az Imperva tesztelt. Egy szolgáltatás két irányból is elérheti ezt a dekódert egy HTTP-kapcsolat során: amikor Brotli-tömörített választ olvas a Node.js beépített fetch() függvényével, vagy amikor middleware dekódol egy Brotli-tömörített kérés-törzset.

Az Express 5 body parserei, például az express.json(), express.urlencoded(), express.text() és express.raw(), már Brotli-tömörített kérés-törzseket is dekódolnak az adott útvonalon, a gzip és deflate mellett. Egy egyszerű, Node.js-alapú HTTP-szerver önmagában nem dekódolja a Brotli-tömörített kérés-törzset attól, hogy ilyet kap; ehhez middleware-re vagy kifejezett hívásra van szükség.

Az Imperva mind a kérés-törzsön, mind a válaszon keresztül reprodukálta a kódfuttatást. Az Express 5.0.0–5.3.0 és a body-parser 2.0.0–2.3.0 verziókat tesztelték rögzített verziószámokkal, a köztes kiadásokat nem vizsgálták.

Hogyan működik a hiba

Az Imperva a hiba okát abban találta meg, ahogyan a dekóder egy lehetetlen pontot kezel a Brotli-adatfolyamban. A stream a dekódolás közben jelzi, milyen blokk­típusokat fog használni, a tesztbemenet pedig olyan blokk­váltáshoz ért, amit maga a stream felépítése kizárt. A sebezhető dekóder ezt úgy értelmezte, mintha további bemenetet kérnének tőle, és érvénytelen állapotban is tovább futott.

Egy külön tesztben, memória-szanitizerrel vizsgálva, ebből az állapotból továbbhaladva a kód túlírt egy tervezett puffert. Ez a határon túli írás okozta a sebezhetőséget.

A Node.js a hibát úgy javította, hogy átvette az upstream Brotli javítócsomagot, amely ezen a ponton formátumhibával leállítja a dekódert, ahelyett hogy tovább futna.

Mit érdemes tenni

A megoldás az, ha valaki javított kiadásra vált. A frissítésnek el kell jutnia azokhoz a container image-ekhez és egyéb artefaktumokhoz is, amelyek saját Node binárist csomagolnak, ezeket egy csomaglista könnyen figyelmen kívül hagyhatja. A már életciklusa végére ért 20.x és korábbi ágak nem kapják meg a javítást, ezért ezeket támogatott ágra kell átvinni.

A biztonsági közlemény nem sorol fel Node.js-en belüli kerülőmegoldást, így azoknak az alkalmazásoknak, amelyek nem tudnak azonnal frissíteni, nincs menekülőút a runtime-on belül. Az Imperva azt javasolta, hogy ahol ez megoldható, korlátozzák a nem megbízható Brotli-forgalmat az érintett útvonalakon, és hangsúlyozta, hogy csak a frissítés szünteti meg a hibát. A cég saját webalkalmazás-tűzfalához is hozzáadott szabályokat, és ezeket letesztelte az általa reprodukált támadások ellen.

A Vercel, amely ügyfelei számára futtat Node.js-t, közölte, hogy október 21-én új szabályokat vezetett be, amelyek blokkolják a támadást a bejövő kérésekben. A szabályok nem vonatkoznak azokra a Brotli-válaszokra, amelyeket az alkalmazás más szerverektől tölt le, és nem helyettesítik a frissítést.