Di antara dua celah berat yang rilis pada 21 Oktober 2026, ada satu yang cenderung diabaikan karena skornya lebih rendah: CVE-2026-111497 di Node.js. Celah ini adalah out-of-bounds write di decoder Brotli, dan meski dinilai High bukan Critical, ia tetap layak ditangani cepat karena berada di jalur yang sangat umum dipakai aplikasi web.
Rilis keamanan Node.js 21 Oktober memperbaiki beberapa masalah sekaligus di tiga jalur rilis, 26.x, 24.x, dan 22.x. Celah Brotli adalah satu dari empat isu High di rilis tersebut.
Apa Itu Decoder Brotli
Brotli adalah algoritma kompresi yang dikembangkan Google dan kini dipakai luas untuk mengompres respons HTTP, aset statis, dan payload API. Browser modern mengirim header Accept-Encoding: br, server mengompres dengan Brotli, dan klien mendekompres hasilnya. Di Node.js, kemampuan ini juga dipakai di sisi server saat menerima data terkompres atau saat aplikasi memproses payload dari layanan lain.
Decoder adalah bagian yang membaca data terkompres dan mengubahnya kembali menjadi data asli. Out-of-bounds write di decoder berarti panjang data yang ditulis bisa melampaui batas buffer yang dialokasikan. Pada kasus terburuk, ini bisa menyebabkan crash, dan secara teori membuka jalan untuk eksekusi kode tergantung bagaimana memori diatur proses tersebut.
Yang membuat celah seperti ini relevan: input yang tidak tepercaya. Aplikasi yang menerima payload terkompresi dari klien, gateway, atau layanan pihak ketiga memproses byte yang tidak sepenuhnya dia kendalikan.
Versi yang Diperbaiki
Perbaikan tersedia di tiga jalur rilis:
- Node.js 26.x → 26.12.1 (Current)
- Node.js 24.x → 24.22.1 (LTS)
- Node.js 22.x → 22.23.4 (LTS)
Sesuai kebijakan Node.js, versi yang sudah end-of-life selalu terdampak dan tidak mendapat perbaikan. Kalau proyekmu masih di jalur rilis yang sudah tidak didukung, ini saat yang tepat untuk memindahkan jalur, bukan hanya menambal.
Isi Lengkap Rilis 24.22.1
Untuk memberi gambaran betapa padatnya rilis ini, berikut daftar perubahan keamanan di 24.22.1:
- CVE-2026-106069 dan CVE-2026-106072 — tls: menolak alamat IP non-kanonik (High)
- CVE-2026-105482 — dns: validasi input resolve terhadap null byte (High)
- CVE-2026-105483 — tls: perbaikan regresi normalisasi IP (High)
- CVE-2026-111497 — deps: brotli, cherry-pick patch upstream (High)
- CVE-2026-105481 — http: memastikan penjaga data agent bekerja tanpa I/O (Medium)
- CVE-2026-106074 — crypto: reset cache acak antar snapshot (Medium)
- CVE-2026-106073 — permission: cek model izin di realpathSync (Low)
Selain itu ada pembaruan non-keamanan: sertifikat root ke NSS 3.131.1, c-ares ke 1.34.9, data zona waktu ke 2026e, sumber OpenSSL ke 3.5.9, dan undici ke 7.30.1.
Perhatikan tiga isu TLS dan DNS di daftar itu. Bagi layanan yang menerima koneksi dari luar, memperbaiki hanya Brotli tanpa memperbaiki validasi IP dan input DNS akan meninggalkan celah yang sama-sama High. Karena itu, naik versi minor lengkap lebih aman daripada menambal satu komponen.
Dampak Praktis bagi Aplikasi Web
Bagi sebagian besar aplikasi, upgrade minor Node.js adalah pekerjaan 30 menit: ubah versi di Dockerfile atau file konfigurasi versi, jalankan uji, deploy. Yang perlu diperhatikan:
- Cek dependensi native. Modul yang dikompilasi terhadap header Node.js tertentu mungkin perlu dibangun ulang.
- Uji jalur kompresi. Kalau aplikasimu mengaktifkan kompresi Brotli di server atau menerima payload terkompresi, uji satu alur end-to-end setelah upgrade.
- Perhatikan perubahan undici. Pembaruan undici bisa mengubah sedikit perilaku HTTP client, terutama soal timeout dan header.
- Jalankan uji beban singkat. Celah di decoder sering baru terasa pada data berukuran besar, jadi uji dengan payload realistis, bukan hanya halaman kosong.
Kenapa Skor "High" Bukan Alasan Menunda
Ketika tiga celah rilis di hari yang sama, mudah tergoda mengerjakan yang skornya 10,0 dulu dan menunda yang High. Secara prioritas itu wajar. Tapi ada dua hal yang membuat penundaan berisiko.
Pertama, penyerang tidak membaca skor vendor. Mereka memindai versi. Server dengan Node.js 24.22.0 akan terlihat sama mudahnya baik celahnya 9,2 maupun 7,5.
Kedua, satu rilis Node.js biasanya memperbaiki beberapa isu sekaligus, dan sebagian di antaranya baru diumumkan bersamaan. Menunda upgrade berarti menumpuk beberapa celah sekaligus dalam satu server.
Untuk gambaran urutan kalau kamu harus menangani beberapa layanan sekaligus, lihat panduan patch 30 menit untuk PHP, Node.js, dan GitLab. Kalau yang kamu cari penjelasan istilahnya, mulai dari RCE, UAF, dan overflow; kalau waktumu tinggal satu jam, pakai urutan patch untuk tim kecil.
Kalau Kamu Tidak Bisa Upgrade Sekarang
Pada beberapa organisasi, upgrade minor butuh persetujuan. Kalau itu situasimu, ada langkah sementara yang masuk akal:
- Batasi siapa yang bisa mengirim payload terkompresi ke layananmu.
- Kalau memakai reverse proxy, tangani dekompresi di proxy dan teruskan data yang sudah didekompres ke aplikasi.
- Pantau log untuk crash proses yang tidak jelas penyebabnya, terutama setelah menerima request berukuran besar.
Semua itu hanya pengurangan risiko, bukan perbaikan. Jangan jadikan alasan untuk menutup tiket.
Pertanyaan yang Sering Muncul
Apakah ini memengaruhi browser? Tidak. Ini celah di implementasi Node.js, bukan di browser.
Apakah aplikasi yang tidak memakai Brotli tetap terdampak? Kalau tidak ada jalur yang mendekode Brotli sama sekali, paparannya sangat kecil. Tapi banyak stack web mengaktifkan Brotli secara default di lapisan server.
Apakah cukup memperbarui npm? Tidak. Ini celah di runtime Node.js, bukan di paket npm.
Apakah versi 20.x juga dipatch? Node.js menyebut versi end-of-life selalu terdampak dan tidak mendapat perbaikan. Cek jadwal rilis resmi untuk jalur yang kamu pakai.
Penutup
CVE-2026-111497 bukan celah paling dramatis minggu ini, tapi ia contoh bagus untuk satu kebiasaan yang membedakan tim yang rapi: menganggap setiap rilis keamanan runtime sebagai pekerjaan rutin, bukan proyek khusus. Node.js merilis tiga jalur sekaligus dengan perbaikan yang sudah tersedia. Yang perlu kamu lakukan cuma memastikan nomor versi di server berubah, dan menguji jalur kompresi yang mungkin belum pernah kamu sentuh sejak aplikasi pertama kali dideploy.
Komentar 0