Blog · 22 Oct 2026 · 7 min read
Update Keamanan Node.js Oktober 2026: Celah Brotli RCE, TLS, dan Cara Memperbarui
Node.js menambal 10 celah di versi 22, 24, dan 26 sekaligus, termasuk bug dekoder Brotli yang bisa berujung RCE dan dua cara melewati verifikasi TLS. Ini rinciannya dan cara memperbarui.
By Tim Gocelerus
Pada 21 Oktober 2026, proyek Node.js merilis pembaruan keamanan untuk semua versi yang masih didukung sekaligus: 22.x, 24.x, dan 26.x. Ada 10 celah yang ditambal, empat di antaranya berstatus High. Yang paling disorot adalah bug di dekoder Brotli (CVE-2026-111497), yang dalam kondisi tertentu bisa berujung pada eksekusi kode dari jarak jauh.
Kalau kamu menjalankan aplikasi Node.js (API, bot, Next.js, Express), atau memakai Node untuk build aset website, artikel ini merangkum apa yang ditambal, mana yang paling penting, dan cara memperbaruinya.
Ringkasan singkat
- Versi yang sudah diperbaiki: v26.12.1, v24.22.1, dan v22.23.4.
- Jumlah celah: 10 CVE: 4 High, 3 Medium, 3 Low. Ditambah pembaruan beberapa dependensi bawaan.
- Paling serius: CVE-2026-111497, out-of-bounds write di dekoder Brotli yang menurut advisory resmi memungkinkan eksekusi kode jarak jauh.
- Versi lama yang sudah end-of-life juga terdampak, dan tidak akan mendapat perbaikan. Pindah ke salah satu versi yang masih didukung.
- Yang perlu dilakukan: perbarui Node.js, lalu restart semua proses Node yang sedang berjalan.
Celah berstatus High
CVE-2026-111497: dekoder Brotli bisa menulis di luar batas memori
Brotli adalah format kompresi yang banyak dipakai di web, sering terlihat sebagai Content-Encoding: br. Node.js punya dekoder Brotli bawaan (zlib). Celah ini membuat dekoder tersebut bisa menulis data di luar area memori yang seharusnya saat memproses data Brotli yang dirancang khusus. Advisory resmi Node.js menyebutnya sebagai out-of-bounds write yang memungkinkan remote code execution.
Kenapa ini mudah terpicu: menurut salah satu laporan, fetch() dan Express 5 otomatis membuka (dekompresi) data Brotli. Artinya aplikasi yang mengambil data dari server luar, atau menerima request terkompresi, bisa memproses data Brotli tanpa pernah memanggil fungsi Brotli secara langsung.
Status di lapangan per 22 Oktober 2026: sebuah proof-of-concept publik sudah muncul, tapi pembuatnya melaporkan bahwa pada build Node.js standar hasilnya adalah crash dan pembacaan memori terbatas, bukan eksekusi kode. Belum ada laporan eksploitasi di dunia nyata. Meski begitu, crash saja sudah cukup untuk membuat layanan mati, jadi tetap perbarui.
Perbaikan yang sama juga dirilis di pustaka Brotli itu sendiri (versi 1.2.1, 1.1.1, dan 1.0.10). Software lain yang membawa pustaka Brotli sendiri mungkin perlu diperbarui terpisah.
CVE-2026-105483 dan CVE-2026-106069: verifikasi sertifikat TLS bisa dilewati
Dua celah ini menyangkut cara Node.js mencocokkan nama host dengan sertifikat TLS:
- CVE-2026-105483: pencocokan hostname bisa dilewati ketika alamat IP ditulis dengan digit lebar penuh (fullwidth digits, karakter angka dari set Unicode Asia Timur). Terdampak di 26.x dan 24.x.
- CVE-2026-106069: pencocokan hostname bisa dilewati ketika host "secara longgar" bisa ditafsirkan sebagai alamat IP. Terdampak di 26.x, 24.x, dan 22.x.
Dalam praktiknya, celah semacam ini membuka peluang sertifikat yang tidak semestinya diterima sebagai sah, yang menjadi dasar serangan man-in-the-middle terhadap koneksi HTTPS keluar dari aplikasi Node.
CVE-2026-105482: dns.resolve memotong nama yang mengandung karakter NUL
Fungsi dns.resolve memotong nama domain yang mengandung karakter NUL. Akibatnya, nama yang di-resolve bisa berbeda dengan nama yang diperiksa oleh kode aplikasi. Ini terutama relevan untuk aplikasi yang melakukan lookup DNS terhadap nama yang dikirim pengguna. Terdampak di 26.x, 24.x, dan 22.x.
Celah berstatus Medium
- CVE-2026-105481: soket keep-alive bisa memproses respons yang dikirim sebelum request-nya dikirim. (26.x, 24.x, 22.x)
- CVE-2026-106072: hostname IPv4 dalam bentuk tidak baku bisa membuat nama DNS di sertifikat (SAN) dipakai untuk mengautentikasi alamat IP. (26.x, 24.x, 22.x)
- CVE-2026-106074: cache entropi untuk
crypto.randomUUID()dancrypto.randomInt()ikut tersimpan di startup snapshot dan Single Executable Application (SEA), sehingga setiap proses yang dijalankan dari snapshot yang sama menghasilkan nilai "acak" yang sama. Relevan kalau kamu mendistribusikan aplikasi sebagai SEA atau memakai snapshot. (26.x, 24.x, 22.x)
Celah berstatus Low
- CVE-2026-106070:
ZipFilemengembalikan byte awalan yang dikendalikan penyerang setelah validasi header ZIP gagal. (hanya 26.x) - CVE-2026-106071: Permission Model memberi akses filesystem lebih luas dari seharusnya lewat pencarian wildcard. (hanya 26.x)
- CVE-2026-106073: Permission Model bisa dilewati lewat
fs.realpathSync. (26.x, 24.x, 22.x)
Dua celah Permission Model hanya berpengaruh kalau kamu menjalankan Node dengan flag --permission.
Pembaruan dependensi bawaan
Rilis ini juga memperbarui beberapa komponen yang dibawa Node.js:
- c-ares (resolver DNS): 26.x, 24.x, 22.x
- Sertifikat CA: penanganan kompromi Intermediate CA eMudhra, di 26.x, 24.x, 22.x
- OpenSSL: 24.x dan 22.x
- SQLite: 22.x
- Undici (mesin di balik
fetch()): 26.x, 24.x, 22.x
Siapa yang perlu memperbarui
Server yang menjalankan aplikasi Node.js. Ini prioritas utama: API, backend Next.js atau Nuxt, bot, worker, dan apa pun yang menerima request dari internet atau mengambil data dari server luar.
Komputer developer. Kalau Node hanya dipakai untuk npm install dan build aset, risikonya lebih kecil dibanding server yang menerima request dari internet. Tapi celah TLS menyangkut koneksi HTTPS keluar, dan npm berbicara dengan registry lewat HTTPS. Memperbarui di mesin lokal tetap langkah yang masuk akal dan mudah.
Website PHP biasa. Website WordPress atau PHP lain di hosting cPanel tidak menjalankan Node.js, kecuali kamu sengaja memasang aplikasi Node lewat menu Setup Node.js App di cPanel.
Cara mengecek versi Node.js
node -v
Bandingkan dengan versi yang sudah diperbaiki: v26.12.1, v24.22.1, atau v22.23.4 (atau lebih baru di cabang yang sama).
Satu komputer bisa punya lebih dari satu Node.js terpasang, misalnya satu dari installer resmi dan satu dari Homebrew atau nvm. Cek semuanya:
which -a node
Lalu jalankan -v untuk masing-masing path yang muncul.
Cara memperbarui
Lewat nvm:
nvm install 24.22.1
nvm alias default 24.22.1
Ganti dengan versi dari cabang yang kamu pakai.
Lewat installer resmi: unduh versi terbaru dari nodejs.org untuk cabangmu, lalu pasang di atas versi lama.
Lewat Homebrew (macOS):
brew update
brew upgrade node
node -v
Pastikan hasil node -v sudah versi yang diperbaiki. Repositori paket kadang tertinggal beberapa jam sampai beberapa hari dari rilis resmi. Kalau versinya belum tersedia, pakai installer resmi atau nvm dulu.
Docker: naikkan tag image ke versi yang diperbaiki (misalnya dari node:24 lama ke node:24.22.1), lalu build ulang dan deploy ulang container. Image yang sudah ter-build tidak berubah sendiri.
cPanel (Setup Node.js App): versi Node yang tersedia di menu ini disediakan oleh penyedia hosting. Cek versi yang dipakai aplikasimu di menu tersebut, dan tanyakan ke penyedia hosting kapan versi yang diperbaiki tersedia.
Jangan lupa restart
Sama seperti pembaruan keamanan lainnya, proses yang sudah berjalan tetap memakai Node versi lama sampai di-restart. Restart aplikasimu setelah memperbarui, misalnya dengan pm2 restart all, systemctl restart nama-layanan, atau restart aplikasi lewat menu Setup Node.js App di cPanel. Setelah itu, cek ulang versinya dari dalam aplikasi kalau memungkinkan.
Daftar periksa
- Cek semua instalasi Node.js dengan
which -a nodedannode -v. - Perbarui ke v26.12.1, v24.22.1, atau v22.23.4.
- Pindah dari versi yang sudah end-of-life.
- Restart semua proses Node.js.
- Build ulang dan deploy ulang image Docker.
- Periksa software lain yang membawa pustaka Brotli sendiri.