A Node.js október 21-én biztonsági frissítéseket adott ki a három támogatott kiadási sorához (22.x, 24.x és 26.x), amelyek összesen 10 hibát javítanak. A legsúlyosabb egy hiba a Node.js-be csomagolt Brotli tömörítésmentesítő kódban. A projekt szerint ez távoli kódfuttatást tehet lehetővé, vagyis a támadó tetszőleges kódot futtathat az érintett rendszeren.
Minden támogatott ághoz egy-egy javított verzió tartozik: a hosszú távú támogatású sorokon a 22.23.4 és a 24.22.1, az aktuális ágon pedig a 26.12.1. A Node.js 20.x és a korábbi verziók elérték az életciklusuk végét, nem kapják meg a javítást, ezért ezeket át kell állítani egy támogatott kiadási sorra.
A Brotli-hiba a Node.js-be csomagolt kódban van, nem a felhasználó saját programjában. A Node.js ezt a kódot minden alkalommal futtatja, amikor Brotli-adatot tömörítésmentesít, akár közvetlenül a node:zlib modulon keresztül, akár automatikusan, amikor a kód fetch()-et hív egy Brotli-tömörítéssel küldött válaszra.
Azok az alkalmazások érintettek, amelyek olyan Brotli-adatot bontanak ki, amelyet a támadó irányít, például egy kérés törzsét vagy egy másik szervertől lekért választ.
A Brotli-hiba
A hiba egy határon túli írás a Brotli dekóderben, amely hibásan formázott tömörített bemenetre aktiválódik. A javítást a Brotli projekt upstream javítócsomagja adja, amelyet a Node.js átvett. Ez úgy módosítja a dekódert, hogy az érvénytelen bemenetet hamarabb észrevegye és leálljon, ahelyett hogy túlírna a pufferen.
A Brotli a Google tömörítési könyvtára, a Node.js pedig a saját másolatát szállítja vele. Ugyanez a javítás bekerült a Brotli 1.2.1, 1.1.1 és 1.0.10 verziókba is október 21-én, ezért más szoftvereknek is szükségük lehet ugyanerre a frissítésre, ha saját Brotli-másolatot tartalmaznak. A módosítás először 2026 februárjában került be a Brotli forráskódjába, és csak októberben jelent meg biztonsági kiadásként.
A projekt „távoli kódfuttatásként” írja le, mire adhat lehetőséget a hiba, a besorolása azonban magas, nem pedig kritikus. A gyakorlatban eddig ennél szűkebbnek tűnik a ténylegesen elért hatás.
Egy október 22-én közzétett nyilvános proof-of-concept csak egy szándékosan meggyengített teszt build ellen tudott kódfuttatást elérni. Egy szabványos Node.js builden a szerző beszámolója szerint összeomlást és a folyamat memóriájának korlátozott olvasását érte el, de nem kódfuttatást, és nem sikerült működő támadást kidolgoznia normál buildre.
A javított Node.js elutasítja a proof-of-concept által használt hibás bemenetet, és október 22-ig nem érkezett jelentés a hiba aktív kihasználásáról.
A többi hiba
A többi javítás közül hármat szintén magas súlyosságúnak minősítettek. Kettő TLS tanúsítvány-ellenőrzési hiba: a támadó meg tudja kerülni az ellenőrzést, ha a szerver IP-címét szokatlan formában adja meg, így a tanúsítvány olyan gépre is érvényesnek tűnik, amelyre nem lenne szabad (CVE-2026-106069 és CVE-2026-105483). A harmadik hiba miatt a dns.resolve egy beágyazott null byte-nál levágja a hostnevet (CVE-2026-105482).
A Node.js a CVE-2026-105483-at magas súlyosságúnak jelöli, bár az a commit, amely tartalmazza a javítást, alacsony súlyosságúnak és nehezen kihasználhatónak írja le a hibát.
A többi sebezhetőség közepes vagy alacsony súlyosságú. Az egyik közepes hiba miatt a crypto.randomUUID() és a crypto.randomInt() minden folyamatban ugyanazokat az értékeket adja vissza, ha az alkalmazást startup snapshotként vagy egyetlen futtatható állományként építik (CVE-2026-106074). Ez aláássa minden olyan funkció biztonságát, amely ezeknek az értékeknek a kiszámíthatatlanságára épít.
A teljes lista, és hogy melyik kiadási sorokat érintik:
| CVE | Mi a sérülékenység? | Súlyosság | Érintett verziók |
|---|---|---|---|
| CVE-2026-111497 | Határokon túli írás a Brotli dekóderben, amely távoli kódfuttatást tehet lehetővé | Magas | 22.x, 24.x, 26.x |
| CVE-2026-106069 | A TLS-gazdagépnév ellenőrzésének megkerülése, ha a gazdagép nem kanonikus formájú IP-címre oldódik fel | Magas | 22.x, 24.x, 26.x |
| CVE-2026-105483 | A TLS-gazdagépnév ellenőrzésének megkerülése teljes szélességű számjegyekkel megadott IP-cím esetén | Magas | 24.x, 26.x |
| CVE-2026-105482 | A dns.resolve függvény nem megfelelően kezeli a null bájtot tartalmazó neveket | Magas | 22.x, 24.x, 26.x |
| CVE-2026-105481 | A keep-alive socket olyan választ is feldolgozhat, amelyet még a kérés elküldése előtt írtak ki | Közepes | 22.x, 24.x, 26.x |
| CVE-2026-106072 | A nem kanonikus IPv4-címek tanúsítvány-ellenőrzése lehetővé teheti, hogy DNS-nevek IP-végpontokat hitelesítsenek | Közepes | 22.x, 24.x, 26.x |
| CVE-2026-106074 | A randomUUID() és randomInt() gyorsítótárainak nem megfelelő újrafelhasználása indítási pillanatképekben és önálló futtatható alkalmazásokban | Közepes | 22.x, 24.x, 26.x |
| CVE-2026-106070 | A ZipFile sikertelen fejlécellenőrzés után támadó által vezérelt bájtokat adhat vissza | Alacsony | 26.x |
| CVE-2026-106071 | A Permission Model a helyettesítő karaktereket használó keresésen keresztül a kelleténél szélesebb fájlhozzáférést engedélyezhet | Alacsony | 26.x |
| CVE-2026-106073 | A Permission Model megkerülése az fs.realpathSync használatával | Alacsony | 22.x, 24.x, 26.x |
Az eMudhra tanúsítványblokkolás
Ugyanezek a frissítések azt is megakadályozzák, hogy a Node.js megbízzon nyolc, az indiai eMudhra szolgáltatóhoz tartozó köztes hitelesítésszolgáltatói kulcsban, amelyeket napokkal korábban kompromittáltnak jelentettek.
A Node.js a Mozilla root tanúsítványlistáját használja, de alapértelmezés szerint nem végez visszavonás-ellenőrzést, ezért a frissítés előtt egy, a kompromittált kulcsok egyikére épülő tanúsítványlánc még átment az ellenőrzésen.
A mostani kiadások beépített blokkolást adnak a nyolc kulcsra, és frissítik a csomagolt root listát, amelyből kikerül három emSign root. A Go is ugyanígy blokkolta ezeket a kulcsokat a saját október 20-i frissítésében.
A frissítés előtt indult munkamenetből folytatott kapcsolatoknál a rendszer csak a session lejártakor ellenőrzi újra a tanúsítványláncot, és az életciklusa végén járó kiadási sorok egyáltalán nem kapják meg ezt a blokkolást.
Frissített függőségek
A 10 hiba mellett a frissítések több beépített összetevőt is megújítanak. Az undici, vagyis a fetch() mögött dolgozó HTTP kliens olyan verzióra frissül, amely három közepes súlyosságú hibát javít: egyet a Subresource Integrity ellenőrzésben, valamint két memóriakimerüléses hibát, köztük egyet a Node.js-be épített WebSocket kliensben.
A Node.js minden kiadási sorban frissítette a beépített c-ares könyvtárat, az OpenSSL-t a 22.x és 24.x sorozatban, az SQLite-ot pedig a 22.x-ben, hogy ezek is tartalmazzák a nyilvánosan ismert sebezhetőségek javításait.
Ha még nem tudsz verziót frissíteni
A javítást a verziófrissítés jelenti. A biztonsági közlemény nem kínál átmeneti kerülőmegoldást a Brotli hibára, ezért ha egy alkalmazás nem tud azonnal frissíteni, a Node.js-en belül nincs mibe kapaszkodnia.
A Vercel, amely ügyfelei számára futtat Node.js-t, azt közölte, hogy október 21-én olyan tűzfalszabályokat vezetett be, amelyek blokkolják a támadást a bejövő kérésekben. Ezek a szabályok nem védik azokat a Brotli válaszokat, amelyeket az alkalmazás más szerverektől tölt le, és nem helyettesítik a verziófrissítést.

