Celah keamanan Node.js yang dijuluki Node2Shell (CVE-2026-111497) adalah out-of-bounds write di decoder Brotli milik Google yang dibundel Node.js. Data terkompresi yang sengaja dirusak bisa membuat server crash, membocorkan isi memori, atau menjalankan kode dari jarak jauh. Perbaikannya tersedia di Node.js 22.23.4, 24.22.1, dan 26.12.1.
Celah ini ada di runtime, yaitu program yang menjalankan aplikasi Anda, bukan di framework. Jadi, aplikasi Next.js, Nuxt, atau Express yang framework-nya sudah diperbarui tetap bisa rentan bila versi Node.js di servernya masih lama. Kasus ini berbeda dengan celah di framework yang dibahas dalam artikel celah keamanan Laravel dan Next.js.
Pada 27 Oktober 2026, CISA (lembaga keamanan siber Amerika Serikat) memasukkan CVE ini ke katalog Known Exploited Vulnerabilities. Artinya, celah ini sudah dieksploitasi dan bukan lagi sekadar risiko di atas kertas. Artikel ini menjelaskan siapa yang terdampak, versi mana yang aman, dan apa saja yang perlu Anda tanyakan ke developer.
Apa Itu Celah Node2Shell dan Seberapa Serius?
Node2Shell adalah bug memori di pustaka Brotli. Brotli adalah format kompresi yang umum dipakai untuk mengecilkan ukuran data di web. Menurut rilis keamanan resmi Node.js (Oktober 2026), data Brotli yang rusak membuat decoder terus menambahkan data ke buffer internal yang hanya berukuran 8 byte. Akibatnya, memori proses ikut rusak.
Beberapa fakta penting dari sumber resmi:
- 21 Oktober 2026: Node.js merilis perbaikan untuk lini 22.x, 24.x, dan 26.x dan menilai tingkat keparahannya High.
- 22 Oktober 2026: GitHub Advisory GHSA-9v8h-qqgm-4m35 memberi skor CVSS v4 9.2 (Critical) untuk pustaka Brotli versi 1.0.3 sampai 1.2.0. Sumber masalahnya ada di kode C Google Brotli, sehingga dampaknya tidak hanya mengenai Node.js.
- 27 Oktober 2026: Katalog KEV CISA mencantumkan CVE-2026-111497 dengan tenggat perbaikan 10 November 2026 bagi instansi federal AS.
Julukannya juga bertambah. Mula-mula celah ini disebut Node2Shell karena Node.js yang pertama merilis perbaikan. Setelah itu muncul nama HTTP2Shell, karena perangkat lunak lain yang mendekompresi Brotli lewat HTTP juga terdampak. Menurut Strobes (24 Oktober 2026), semua nama itu mengacu pada satu bug dengan satu nomor CVE.
Dalam laporannya (diperbarui 26 Oktober 2026), perusahaan keamanan ELLIO mengklaim sensor mereka menangkap lalu lintas eksploit untuk CVE ini. Klaim itu berasal dari data satu vendor. Sinyal yang lebih netral adalah status KEV dari CISA, karena katalog itu hanya memuat celah yang terbukti dieksploitasi secara nyata.
Siapa yang Terdampak Celah Keamanan Node.js Ini?
Yang terdampak adalah aplikasi web atau API yang berjalan di Node.js 22, 24, atau 26 yang belum diperbarui dan memproses data Brotli yang bisa dikendalikan pihak luar. Versi yang rentan saja belum cukup untuk diserang. Data berbahaya juga harus punya jalan untuk sampai ke decoder.
Jalur 1: Request masuk dengan Content-Encoding br
Menurut Aikido (22 Oktober 2026), Express 5 dan body-parser 2.x mendekompresi body request yang ber-Content-Encoding: br, dan request seperti itu bisa dikirim oleh klien mana pun. Semgrep (22 Oktober 2026) memberi contoh express.json() dan menyebut @koa/bodyparser ikut terdampak lewat co-body. Server HTTP Node.js tanpa parser tambahan tidak mendekompresi body yang masuk.
Jalur 2: Respons yang diambil server Anda
fetch() bawaan Node.js otomatis mendekompresi respons Brotli. Risikonya paling tinggi bila server memanggil URL yang bisa ditentukan pengguna, misalnya untuk webhook, pratinjau tautan, atau impor dari URL. Server jahat cukup membalas dengan data Brotli yang sudah dirusak. Klien HTTP lain yang otomatis mendekompresi respons juga perlu dicek.
Jalur 3: Pemanggilan node:zlib secara langsung
Kode yang memakai fungsi Brotli di node:zlib, misalnya createBrotliDecompress(), untuk mengolah data dari klien juga rentan.
Di luar Node.js: Bun dan Python
- Bun sebelum versi 1.4.4 terdampak lewat
fetch,node:zlib, danDecompressionStream. Menurut advisory Bun (23 Oktober 2026), executable hasilbun build --compiletetap rentan sampai dibangun ulang. - Python: menurut Aikido (23 Oktober 2026), requests/urllib3, httpx, aiohttp, dan Scrapy ikut terdampak bila paket Brotli di bawah 1.2.1 atau brotlicffi di bawah 1.2.1.0 terpasang, meskipun kode Anda tidak mengimpornya secara langsung.
Versi Aman Node.js, Bun, dan Python
Satu-satunya perbaikan yang tuntas adalah memperbarui ke versi di bawah ini. Rilis Node.js tidak memberikan workaround, dan advisory Bun menyatakan tidak ada workaround yang melindungi seluruh proses.
- Node.js: 22.23.4, 24.22.1, atau 26.12.1, dirilis 21 Oktober 2026.
- Node.js 20, 23, dan 25: sudah EOL (tidak didukung lagi), jadi tidak mendapat perbaikan. Aplikasi yang memakai versi ini harus dimigrasikan ke lini LTS yang masih didukung.
- Bun: 1.4.4 atau lebih baru.
- Python: Brotli 1.2.1 dan brotlicffi 1.2.1.0.
- Paket libbrotli di distro Linux seperti Debian, Alpine, dan Ubuntu juga perlu diperbarui. Menurut Aikido (Oktober 2026), Debian dan Amazon Linux memasang perbaikan lewat backport. Karena itu nomor versinya terlihat lebih rendah dari 1.2.1 meskipun sudah ditambal. Jadikan advisory distro masing-masing sebagai acuan.
Cara Mengecek dan Menambal Server Anda
Pastikan versi runtime yang benar-benar berjalan di server sudah aman, lalu bangun ulang image dan deploy ulang. Langkah-langkah berikut ditujukan untuk developer atau tim IT Anda:
- Jalankan
node -vdi server atau container produksi. Jangan berpatokan padaprocess.versions.brotli. Menurut ELLIO, Node.js memasang tambalan tanpa mengubah string versi tersebut, sehingga nilainya tetap1.2.0di build yang rentan maupun yang sudah ditambal. - Periksa base image Docker pada baris
FROM node:XX. Menurut Aikido, image yang dikunci ke tag lama sepertinode:24.22.0tetap rentan meskipun dibangun ulang berkali-kali. Naikkan tag-nya, bangun ulang image, lalu deploy ulang. Restart container saja tidak cukup kalau image-nya masih lama. - Untuk layanan Python, jalankan
pip show brotli brotlicffidi setiap environment dan di dalam setiap image. - Bangun ulang executable Bun hasil
bun build --compiledengan Bun 1.4.4. - Perbarui paket libbrotli di sistem operasi server.
Kalau upgrade belum bisa dilakukan, ada mitigasi sementara. Tolak request dengan Content-Encoding yang mengandung br di reverse proxy, WAF, atau middleware, dan jangan mendekompresi data Brotli dari input yang tidak tepercaya. Mitigasi ini hanya menutup jalur request masuk. Respons yang diambil server dari pihak luar tetap terbuka, jadi upgrade tetap harus dilakukan.
Checklist Pemilik Bisnis yang Memakai Vendor
Kalau website atau aplikasi Anda dikelola vendor atau developer lepas, Anda tidak perlu memeriksa server sendiri. Cukup ajukan pertanyaan yang tepat dan minta jawabannya secara tertulis.
- Aplikasi kami berjalan di runtime apa (Node.js, Bun, atau Python), dan versi berapa yang terpasang di server produksi?
- Kapan patch untuk CVE-2026-111497 dipasang, dan versi berapa yang terpasang sekarang?
- Apakah image Docker sudah dibangun ulang dan di-deploy ulang, bukan hanya di-restart?
- Apakah ada server lain yang belum dicek, misalnya staging, worker, atau layanan Python?
- Siapa yang memantau advisory keamanan seperti ini, dan berapa lama target waktu untuk memasang tambalan?
Pertanyaan terakhir paling menentukan. Celah di runtime tidak terlihat dari tampilan website, jadi pemantauan dan pemasangan patch sebaiknya tertulis dalam cakupan pemeliharaan, bukan dikerjakan kalau sempat saja. Saat membandingkan penawaran vendor, pastikan poin ini tercantum, seperti dibahas dalam cara membandingkan penawaran website murah dan profesional. Patch juga perlu didukung pengamanan lain, misalnya SSL dan backup website, supaya data tetap bisa dipulihkan bila terjadi insiden.
Pertanyaan yang Sering Diajukan
Apakah website WordPress atau PHP terdampak Node2Shell?
Umumnya tidak lewat jalur Node.js, karena WordPress berjalan di PHP. Namun, server yang sama bisa saja memasang libbrotli versi rentan atau menjalankan layanan Node.js lain. Minta pengelola server memastikan paket libbrotli sudah diperbarui sesuai advisory distro.
Apakah cukup memperbarui Next.js atau Nuxt?
Tidak. Bug ini ada di decoder Brotli yang dibundel runtime Node.js, bukan di kode framework. Next.js atau Nuxt versi terbaru tetap berjalan di atas Node.js yang terpasang di server, jadi Node.js juga harus diperbarui ke 22.23.4, 24.22.1, atau 26.12.1.
Apa artinya CVE masuk katalog KEV CISA?
Katalog Known Exploited Vulnerabilities milik CISA hanya memuat celah yang terbukti sudah dieksploitasi secara nyata. Tenggat 10 November 2026 berlaku untuk instansi federal AS, tetapi organisasi lain juga bisa memakainya sebagai acuan prioritas. Celah berstatus KEV sebaiknya ditambal lebih dulu daripada celah lain.
Bagaimana cara memastikan server sudah aman?
Pastikan node -v di server produksi menunjukkan versi yang sudah diperbaiki, image sudah dibangun ulang dari base image baru, dan paket Brotli di Python serta libbrotli di sistem operasi sudah diperbarui. Satu server yang terlewat masih bisa menjadi celah masuk.
Kalau Anda belum yakin apakah aplikasi bisnis Anda berjalan di runtime yang rentan, atau belum ada pihak yang rutin memantau patch keamanan, tim konsultan IT Anaverse bisa membantu memeriksa versi runtime dan menyusun alur pemeliharaannya. Anaverse, software house dan IT consultant di Pekanbaru, Riau, melayani klien di Pekanbaru dan di seluruh Indonesia. Silakan hubungi kami lewat halaman kontak.
Referensi
- Node.js: October 2026 Security Releases (21 Oktober 2026)
- CISA: Known Exploited Vulnerabilities Catalog, CVE-2026-111497 (27 Oktober 2026)
- GitHub Advisory Database: GHSA-9v8h-qqgm-4m35 (22 Oktober 2026)
- Bun Security Advisory GHSA-663w-cv8g-jj2p (23 Oktober 2026)
- Aikido: Node2Shell, Node.js Brotli Vulnerability (22 Oktober 2026)
- Aikido: Python Packages Vulnerable to Node2Shell (23 Oktober 2026)
- Semgrep: Patch Your Node and Eat Your Brotli (22 Oktober 2026)
- Strobes: HTTP2Shell (CVE-2026-111497) (24 Oktober 2026)
- ELLIO: Node2Shell RCE on Stock Node.js Builds (25–26 Oktober 2026)



