Data Brotli berbahaya terbukti mampu memicu sebuah aplikasi pada build resmi Node.js menjalankan kode arbitrer yang dikirimkan oleh penyerang, sebagaimana telah didemonstrasikan oleh para peneliti keamanan siber di Imperva.
Bukti konsep bertajuk "Node2Shell" yang mereka kembangkan sukses mengeksekusi kode pada image resmi Node.js 24.22.0 untuk arsitektur Linux arm64 tanpa debugger maupun build kustom, yakni murni dengan memasok data manipulasi ke dekoder Brotli bawaan (CVE-2026-111497). Pihak Node.js telah mengungkap kerentanan ini serta merilis sejumlah perbaikan pada tanggal 21 Oktober, sehingga seluruh aplikasi yang memproses dekode data Brotli tidak tepercaya diimbau segera memperbarui sistem mereka.
Pengujian yang dilakukan Imperva tidak langsung berhasil pada setiap percobaan, di mana eksekusi kode memerlukan beberapa kali upaya dalam lingkungan Linux arm64 tersebut. Temuan hasil ini mencakup satu build dan konfigurasi aplikasi spesifik tersebut, sementara arsitektur lain serta lini versi 22.x dan 26.x belum diuji secara menyeluruh. Pada versi rilis perbaikan, yakni 24.22.1, paket data manipulasi yang sama langsung ditolak mentah-mentah dan tidak ada kode yang berhasil berjalan.
Demonstrasi mutakhir ini melangkah jauh melampaui bukti konsep publik perdana, yang kala itu hanya berhasil meraih eksekusi kode pada build uji coba yang sengaja dilemahkan secara khusus. Pada build standar umum, penulis bukti konsep awal tersebut hanya melaporkan terjadinya crash serta pembacaan memori proses yang terbatas alih-alih eksekusi kode, dan menyatakan bahwa serangan yang berfungsi penuh pada build normal belum berhasil dicapai saat itu.
Hingga tanggal 22 Oktober, tidak ada laporan mengenai eksploitasi aktif atas celah keamanan tersebut di alam liar.
Aplikasi Mana Saja yang Terdampak
Celah keamanan ini berakar langsung pada dekoder Brotli yang dibundel di dalam Node.js, sehingga dampaknya menyasar seluruh aplikasi pada lini versi 22.x, 24.x, dan 26.x, bukan hanya satu build yang diuji Imperva. Sebuah layanan komputasi dapat menjangkau modul dekoder tersebut melalui kedua sisi pertukaran HTTP: ketika membaca respons terkompresi Brotli menggunakan fungsi bawaan fetch(), atau saat komponen middleware mendekompresi isi request body yang terkompresi Brotli.
Modul pengurai body pada Express 5, mencakup express.json(), express.urlencoded(), express.text(), dan express.raw(), kini secara otomatis mendekode payload request body Brotli ketika dipasang pada suatu rute, berdampingan dengan kompresi gzip dan deflate. Server HTTP Node.js standar murni pada dasarnya tidak mendekode request body Brotli hanya karena menerimanya, sehingga proses dekode tersebut memang mutlak memerlukan middleware tadi atau pemanggilan kode secara eksplisit.
Imperva mereproduksi keberhasilan eksekusi kode melalui jalur request-body maupun response path, menguji rilis Express 5.0.0 hingga 5.3.0 serta body-parser 2.0.0 hingga 2.3.0 pada versi terpilih yang dipatok, dan tidak mengecek seluruh rilis minor di antaranya.
Cara Kerja Celah Keamanan Tersebut
Peneliti Imperva melacak akar masalah pada metode penanganan dekoder ketika menghadapi kondisi mustahil dalam aliran data Brotli: aliran tersebut mengumumkan tipe blok yang akan dipakai seiring berjalannya dekode, dan input uji coba memicu perubahan blok yang strukturnya sendiri sudah dieliminasi. Dekoder yang rentan keliru menafsirkan status ini sebagai permintaan input tambahan dan terus memproses data dalam keadaan tidak valid.
Dalam pengujian terpisah memakai memory sanitizer, tindakan melanjutkan proses dari status cacat tersebut memicu penulisan melewati batas buffer yang telah ditentukan, yang menjadi akar out-of-bounds write di balik celah ini.
Node.js menambal kelemahan ini dengan mengimpor patch Brotli hulu yang memaksa dekoder langsung berhenti memunculkan format error pada titik tersebut alih-alih melanjutkan pemrosesan.
Langkah perbaikan utama adalah beralih ke rilis yang sudah ditambal. Pembaruan wajib diterapkan hingga mencakup container images dan artifak lain yang memuat binary Node, yang kerap terlewat dalam inventarisasi paket. Lini end-of-life versi 20.x ke bawah tidak memperoleh patch dan harus dimigrasikan ke lini yang masih didukung penuh.
Pemberitahuan resmi tidak mencantumkan solusi alternatif internal di Node.js, sehingga aplikasi yang belum bisa segera memperbarui tidak memiliki penangkal di tingkat runtime. Imperva menyarankan pembatasan lalu lintas Brotli tidak tepercaya pada rute terdampak jika memungkinkan, serta menegaskan hanya pembaruan yang menuntaskan celah. Perusahaan juga menambahkan aturan penangkal pada web application firewall milik mereka dan mengujinya terhadap serangan hasil reproduksi.
Penyedia hosting Vercel, yang menjalankan Node.js bagi para pelanggannya, menyatakan telah menambahkan aturan pemblokiran serangan pada permintaan masuk per 21 Oktober. Aturan proteksi ini tidak mencakup respons Brotli yang diambil aplikasi dari server eksternal lain, dan tidak menggantikan kewajiban pembaruan versi.