- oktoobril 2026 andis Node.js projekt välja versioonid 22.23.4, 24.22.1 ja 26.12.1. Need parandavad kümme haavatavust, millest neli on hinnatud kõrge raskusastmega. Kõige tõsisem, CVE-2026-111497, on piiriülene kirjutamine (out-of-bounds write) Node'i Brotli dekooderis: väärvormistatud pakitud andmed võivad mälu rikkuda ning majutusfirma Vercel teatab, et uurijad kasutasid seda protsessi mälu lugemiseks ja käskude käivitamiseks Node.js protsessi õigustes. Kaks teist kõrge raskusastmega viga lasevad TLS sertifikaadil läbida hostinime kontrolli, kui see ei tohiks läbida. Node.js 20 ja 25 on jõudnud elutsükli lõppu ega saa parandust.
Millised versioonid on parandatud
| Väljalaskeharu | Parandatud versioonis | Staatus |
|---|---|---|
| 26.x | 26.12.1 | praegune |
| 24.x (LTS) | 24.22.1 | toetatud |
| 22.x (LTS) | 22.23.4 | toetatud |
| 25.x | parandust ei ole | elutsükli lõpp, minge üle versioonile 26 või 24 |
| 20.x | parandust ei ole | elutsükli lõpp 30. aprillil 2026, minge üle versioonile 22 või 24 |
Millised on need kümme viga
| CVE | Raskusaste | Probleem | Harud |
|---|---|---|---|
| CVE-2026-111497 | Kõrge | Brotli dekooderi piiriülene kirjutamine, võib viia koodi käivitamiseni | 26, 24, 22 |
| CVE-2026-105483 | Kõrge | TLS hostinime kontroll läbitakse, kui IP on kirjutatud täislaiade numbritega | 26, 24 |
| CVE-2026-106069 | Kõrge | TLS hostinime kontroll läbitakse, kui host laheneb lõdvalt IP-aadressiks | 26, 24, 22 |
| CVE-2026-105482 | Kõrge | dns.resolve lõikab nimed NUL-märgi kohalt | 26, 24, 22 |
| CVE-2026-105481 | Keskmine | Keep-alive sokkel võib vastu võtta vastuse, mis kirjutati enne päringu saatmist | 26, 24, 22 |
| CVE-2026-106072 | Keskmine | Sertifikaadi DNS-nimi võib kanoonilisest vormist erinevate IPv4 hostide puhul autentida IP lõpp-punkti | 26, 24, 22 |
| CVE-2026-106074 | Keskmine | randomUUID() ja randomInt() kordavad samu väärtusi käivitusmälupiltides (startup snapshot) ja üksikutes käivitatavates rakendustes | 26, 24, 22 |
| CVE-2026-106073 | Madal | Permission Model'i möödapääs fs.realpathSync abil | 26, 24, 22 |
| CVE-2026-106070 | Madal | ZipFile tagastab ebaõnnestunud päisekontrolli järel ründaja kontrollitavaid baite | 26 |
| CVE-2026-106071 | Madal | Permission Model annab metamärkide kaudu liiga laia failipääsu | 26 |
Väljalasked uuendavad ka komplekti kuuluvaid komponente: c-ares, Undici, usaldusväärsete CA-de loend (eemaldatakse kompromiteeritud eMudhra vahe-CA), OpenSSL versioonides 24 ja 22 ning SQLite versioonis 22.
Kes on Brotli veale avatud
Node.js ei dekodeeri Brotlit ise. Olete ohus siis, kui teie kood või mõni selle kasutatav teek pakib lahti Brotli andmeid, mida kontrollib keegi teine. See juhtub sagedamini, kui võiks arvata:
- Sisseehitatud
fetch()dekodeerib vastused päisegaContent-Encoding: brautomaatselt. Teenus, mis tõmbab kasutajate valitud URL-e, veebikonksude (webhook) või kolmandate osapoolte API-de andmeid, võib saada pahatahtliku vastuse. - axios, got ja node-fetch dekodeerivad pakitud vastuseid samuti vaikimisi.
- Express 5 (body-parser 2) dekodeerib Brotli päringukehasid vaikimisi, nii et API võib saada andmed otse ründajalt.
- Iga
zlib.brotliDecompress,zlib.createBrotliDecompressvõiDecompressionStreamkutse üleslaaditud või kolmandalt osapoolelt pärit andmetel.
Paigake esimesena need kohad, kus need kokku puutuvad internetiga: avalikud API-d, mis võtavad vastu pakitud kehasid, teenused, mis tõmbavad kasutaja antud URL-e, ja kõik, mis pakib lahti üleslaaditud faile.
TLS vead on olulised peamiselt siis, kui ründaja suudab hankida sertifikaadi CA-lt, keda teie klient usaldab, ja see sertifikaat sisaldab IP-aadressi kujulist DNS-nime. DNS viga on oluline siis, kui teie kood annab dns.resolve funktsioonile välist sisendit. Paranduse commit'i järgi ei ole TLS probleeme lihtne ära kasutada, kuid sama uuendus sulgeb need.
Samm 1: leidke iga Node.js käituskeskkond
Linuxis loetlege kõik node binaarfailid koos versiooniga:
sudo find / -xdev -type f -name node -perm -u+x 2>/dev/null | while read -r n; do echo "$n: $("$n" --version 2>/dev/null)"; done
Kontrollige, millist käituskeskkonda töötavad protsessid kasutavad:
for p in $(pgrep -x node); do echo "$p $(sudo readlink -f /proc/$p/exe)"; done
Docker'is kontrollige iga töötavat konteinerit:
for c in $(docker ps --format '{{.Names}}'); do echo "$c: $(docker exec "$c" node --version 2>/dev/null)"; done
Kontrollige ka versioonihaldureid (nvm, fnm, Volta, asdf), CI runnereid, ehitustõmmiseid, Electron'i rakendusi ja serverita funktsioone, kus käituskeskkonna versioon on määratud projekti seadistuses.
Samm 2: uuendage
Ubuntu ja Debian NodeSource pakettidega:
sudo apt update && sudo apt install --only-upgrade nodejs && node --version
nvm-iga:
nvm install 24.22.1 && nvm alias default 24.22.1
Konteinerid: muutke baastõmmis fikseeritud versiooniks, näiteks node:24.22.1-alpine või node:22.23.4-bookworm-slim, ehitage uuesti ja juurutage uuesti. Hosti uuendamine ei muuda seda, mis töötab konteineri sees.
Serverita ja majutusplatvormid: Vercelis paikab 22.x ja 24.x projektid Vercel ise ning Vercel lisas sissetuleva rünnaku vastu tulemüürireeglid; endiselt 20.x peal olevad projektid peavad üle minema versioonile 22.x või 24.x ja uuesti juurutama. Teistel platvormidel kontrollige teenusepakkuja teadaannet ja juurutage uuesti, kui paigatud käituskeskkond on saadaval.
Distributsiooni paketid, näiteks Ubuntu enda nodejs pakett, jäävad sageli maha. Kui node --version ei näita 22.23.4, 24.22.1 ega 26.12.1 (või distributsiooni ehitust, mis nimetab neid CVE-sid), kasutage ametlikke väljalaskeid.
Samm 3: taaskäivitage ja kontrollige
Töötav protsess hoiab vana käituskeskkonda, kuni see taaskäivitub. Pärast paketi uuendamist Linuxis loetleb see node protsessid, mis töötavad endiselt asendatud binaarfailiga:
sudo ls -l /proc/*/exe 2>/dev/null | grep -i 'node.*(deleted)'
Taaskäivitage need teenused (näiteks käsuga systemctl restart, pm2 reload all või uue juurutusega) ja käivitage sammu 1 käsud uuesti.
Kui te ei saa täna uuendada
Ükski neist ei asenda uuendust, kuid need vähendavad ohtu paariks päevaks:
- Lükake Brotli päringukehad tagasi enne, kui need rakenduseni jõuavad, näiteks NGINX-is käsuga
if ($http_content_encoding ~* br) { return 415; }või vahevaras (middleware), mis töötab enne body parsereid. - Lülitage automaatne lahtipakkimine välja päringute puhul, mis lähevad ebausaldusväärsetele serveritele:
decompress: falseaxiosis ja gotis,compress: falsenode-fetchis või undicirequest(), mis ei paki lahti. Sisseehitatudfetch()välja lülitada ei saa. - Käivitage kasutaja antud URL-ide tõmbamine eraldi protsessis, millel on võimalikult vähe õigusi.
- Enne välise sisendi andmist funktsioonile
dns.resolvelükake tagasi nimed, mis sisaldavad NUL-märki.
Kui te ei ole kindel, millised teie teenused dekodeerivad ebausaldusväärseid andmeid, või vajate abi tootmissüsteemi uuendamisel ilma seisakuta, saavad aidata meie turvalise tarkvara ja hallatud turbe meeskonnad.
