Jika aplikasi, situs web, toko online, atau API perusahaan Anda dikembangkan dengan Node.js, termasuk situs Next.js dan backend Express atau NestJS, mintalah pengembang Anda hari ini juga untuk memperbarui Node.js ke versi 22.23.4, 24.22.1, atau 26.12.1, lalu membangun ulang dan memulai ulang server. Proyek Node.js merilis versi-versi ini pada 21 Oktober 2026 untuk menutup celah yang dikenal sebagai Node2Shell (CVE-2026-111497), dengan skor 9.2 dari 10, yang memungkinkan penyerang tanpa kata sandi apa pun menjalankan kode di server Anda dengan mengirim data terkompresi yang dibuat khusus. Otoritas Keamanan Siber Nasional Arab Saudi (NCA) telah mengeluarkan peringatan tingkat «sangat tinggi», dan pada 27 Oktober badan keamanan siber Amerika Serikat, CISA, mengonfirmasi bahwa celah ini sedang dieksploitasi dalam serangan nyata.

Apa yang sebenarnya terjadi?

Celahnya ada di Brotli, format kompresi yang dipakai server web dan peramban untuk memperkecil data yang mereka pertukarkan, dan Node.js membawa salinan sendiri dari dekoder Brotli buatan Google. Menurut pengumuman keamanan Node.js, data terkompresi yang rusak membuat dekoder menulis melewati ujung buffer internal, yang bisa membuat aplikasi mogok, membocorkan isi memorinya, atau memungkinkan penyerang menjalankan kode. Pengumuman itu menyebut tim Codex Security dari OpenAI sebagai pelapor celah ini, dan rilis yang sama memperbaiki total 10 kerentanan, 4 di antaranya berkategori tinggi.

Setelah itu semuanya bergerak cepat. Pada 22 Oktober, sehari setelah perbaikan, Red Team Imperva menjalankan kode pada image resmi Node.js 24.22.0 lewat dua jalur sehari-hari: fungsi bawaan fetch() dan body permintaan yang diproses Express 5. Pada 26 Oktober, ELLIO merekam lalu lintas eksploitasi nyata yang membawa kode serangan publik. Pada 27 Oktober, CISA memasukkan celah ini ke katalog kerentanan yang dieksploitasi secara aktif.

Bug-nya sendiri sudah lama. Menurut catatan CVE, bug ini memengaruhi Brotli versi 1.0.3 sampai 1.2.0, dan OpenAI mengatakan akar masalahnya sudah diperbaiki di kode sumber Brotli pada Februari 2026 tanpa ada yang tahu bahwa itu celah keamanan dan tanpa versi baru, sampai Brotli 1.2.1 dirilis pada 21 Oktober. Jika ini terdengar familier, memang begitu: pekan lalu kami membahas PHP2Shell, celah yang membuka server PHP dan WordPress. Node2Shell adalah risiko sejenis bagi aplikasi yang dibangun dengan JavaScript.

Apakah aplikasi saya terdampak?

Node.js menjalankan sisi server dari sebagian besar situs web modern, backend aplikasi seluler, dasbor, dan API. Jika sistem Anda dibangun dalam beberapa tahun terakhir oleh agensi atau pengembang lepas, besar kemungkinan sistem itu berjalan di Node.js tanpa Anda ketahui. Lini yang terdampak adalah 22.x, 24.x, dan 26.x sebelum versi perbaikan, ditambah lini yang sudah tidak didukung, yaitu 20.x, 23.x, dan 25.x, yang menurut proyek Node.js selalu terdampak dan tidak akan mendapat perbaikan.

Menjalankan Node.js saja belum berarti Anda terekspos: harus ada sesuatu yang meneruskan data penyerang ke dekoder. Para peneliti menyebut tiga jalur umum:

  • Permintaan terkompresi yang masuk. Pengurai body permintaan di Express 5, body-parser 2, dan Koa otomatis membuka body berformat Brotli, bahkan sebelum kode Anda sendiri berjalan.
  • Konten yang diambil server Anda. Jika aplikasi Anda membuka tautan dari luar, seperti pratinjau tautan, webhook, crawler, atau agen AI yang membaca halaman web, situs jahat bisa membalas dengan data terkompresi beracun. Fungsi bawaan fetch() di Node, axios, dan permintaan sisi server di framework seperti Next.js membukanya secara otomatis.
  • File yang diunggah pengguna. Kode apa pun yang membuka data Brotli kiriman pelanggan atau pengunjung.

Risikonya melampaui Node.js. Peringatan NCA juga menyebut Python, Bun, dan Envoy, dan Microsoft merilis perbaikan pada 25 Oktober untuk .NET 8, 9, 10, dan 11, Visual Studio 2019, 2022, dan 2026, serta PowerShell 7.4 hingga 7.6, dengan menilai celah ini kritis untuk .NET dan memberi penilaian «Exploitation More Likely». Microsoft mencatat bahwa dekompresi Brotli tidak aktif secara default di .NET, jadi hanya aplikasi yang mengaktifkannya yang terekspos.

Jika situs Anda di-hosting di Vercel, perusahaan itu menyatakan dalam pengumumannya bahwa pada hari yang sama saat Node.js merilis perbaikan, mereka menerapkan aturan firewall yang memblokir jalur serangan masuk untuk semua proyek, dan bahwa semua deployment baru sejak 28 Oktober memakai Node.js yang sudah diperbaiki. Proyek yang sudah ada perlu di-deploy ulang, dan proyek yang masih memakai Node.js 20 harus pindah ke 22 atau 24.

Yang harus dilakukan hari ini: lima langkah

  1. Ajukan satu pertanyaan tertulis. Versi Node.js mana yang berjalan di server kita dan di dalam image Docker kita? Minta pengembang Anda memeriksa nomor versi Node.js dengan perintah node -v. Jangan mengandalkan nomor versi Brotli: ELLIO menemukan bahwa nomor itu menunjukkan 1.2.0 baik pada build yang sudah diperbaiki maupun yang belum.
  2. Perbarui ke versi perbaikan. 22.23.4, 24.22.1, atau 26.12.1. Jika Anda masih di 20.x, 23.x, atau 25.x, pindahlah ke lini yang didukung seperti 22 atau 24, dan lakukan pengujian sebelum tayang.
  3. Bangun ulang dan mulai ulang. Proses yang sedang berjalan tetap memakai kode lama. Bangun ulang image container di atas image dasar yang sudah diperbaiki, karena Dockerfile yang terkunci di 24.22.0 akan terus mengirim build yang rentan sampai seseorang mengubah baris itu. Periksa juga server staging, pipeline build, dan fungsi serverless.
  4. Perbarui salinan lainnya. Paket Python Brotli dan brotlicffi (versi 1.2.1 dan 1.2.1.0), Bun, Envoy, pustaka Brotli di distribusi Linux Anda, serta .NET melalui pembaruan Microsoft tanggal 25 Oktober.
  5. Periksa log dan file crash. Cari permintaan terkompresi Brotli yang luar biasa besar dan proses yang berulang kali mogok. ELLIO memperingatkan bahwa sebagian besar serangan yang gagal membuat proses mogok, dan file crash bisa menyimpan cookie sesi serta kunci milik pengunjung, jadi batasi siapa yang bisa membaca file crash (core dumps) dan berapa lama Anda menyimpannya.

Jika Anda tidak bisa memperbarui hari ini

Sebagai langkah sementara, blokir permintaan masuk yang membawa header Content-Encoding: br di server depan atau firewall Anda, jika aplikasi Anda tidak membutuhkannya. Vercel dan Imperva sudah menambahkan aturan firewall untuk celah ini, tetapi Vercel sendiri menegaskan bahwa firewall tidak mencakup respons yang diambil server Anda dari situs lain: hanya pembaruan Node.js yang menutup jalur itu. Anggap setiap lapisan perlindungan sebagai tambahan waktu, bukan pengganti pembaruan.

Pandangan Origami

Dua celah kritis di fondasi web dalam satu bulan, PHP2Shell lalu Node2Shell, menceritakan kisah yang jelas: kode yang ditulis tim Anda bisa saja baik-baik saja, sementara lingkungan runtime di bawahnya terbuka. Perbaikan Node2Shell tersimpan sekitar delapan bulan di kode sumber Brotli sebelum ada yang memahami bahwa itu masalah keamanan, dan begitu detailnya dipublikasikan, para peneliti hanya butuh satu hari untuk menjalankan kode pada build resmi. Yang sering kami lihat di banyak perusahaan adalah aplikasi yang diserahkan bertahun-tahun lalu, tanpa ada yang bertanggung jawab atas pembaruannya, dan tanpa daftar di mana saja Node.js benar-benar berjalan. Jika itu kondisi Anda, mulailah daftar itu hari ini. Di Origami kami membangun aplikasi web dan sistem, banyak di antaranya berjalan di Node.js dan Next.js, dan kami memantau pembaruan lingkungan runtime-nya sejak hari pertama. Jika Anda ingin aplikasi Anda diperiksa atau Node.js diperbarui tanpa downtime, hubungi kami.

Sumber