Jawaban langsung: CVE-2026-111497, yang juga disebut Node2Shell atau Brotli2Shell, adalah celah out-of-bounds write di decoder Brotli 1.0.3 sampai 1.2.0. Aplikasi yang membuka data Brotli dari luar bisa crash, membocorkan memori, atau menjalankan kode penyerang. CISA KEV memasukkan celah ini ke daftar celah yang sudah dieksploitasi pada 27 Oktober 2026. Update Node.js hari ini ke 22.23.4, 24.22.1, atau 26.12.1.
Node.js bukan satu-satunya produk yang terdampak. Decoder yang sama ada di Bun, paket Python brotli dan brotlicffi, .NET 8 sampai 11, Envoy, Istio, dan paket libbrotli1 di Debian dan Ubuntu.
Kondisi utama: Node.js dari nodejs.org, nvm, dan image Docker resmi membawa decoder sendiri, jadi Anda update Node.js. Node.js dari apt Ubuntu dan Debian memakai library sistem, jadi Anda update libbrotli1. Batas: Langkah sementara di artikel ini hanya mengurangi paparan. Artikel ini tidak memuat kode eksploit.
Kami membaca advisory Node.js 21 Oktober, rilis Brotli 1.2.1, advisory .NET 25 Oktober, advisory PyPI, halaman CVE Ubuntu, tracker Debian, dan CISA KEV pada 30 Oktober 2026, sekitar pukul 20.30 WIB. Perintah di langkah 1 sampai 5 kami jalankan di container podman dengan image resmi Node.js 24.22.0 dan 24.22.1, Ubuntu 24.04, Python 3.13, .NET runtime 8.0.32 dan 8.0.33, serta nginx 1.29 pada tanggal yang sama. Server uji tidak memuat data pelanggan.
Masalah: update Node.js saja belum menutup semua jalur
Celah ini ada di library, bukan di satu aplikasi. Server yang sudah update Node.js bisa tetap rentan lewat Python, .NET, atau library sistem.
Menurut Tenable, Google memasang perbaikan di kode sumber Brotli pada 27 Februari 2026. Node.js dan Google baru merilis versi dengan patch pada 21 Oktober 2026. Sehari kemudian, peneliti menjalankan kode di image Node.js 24.22.0 resmi. Pada 26 Oktober, ELLIO mencatat percobaan eksploitasi ke Node.js 24.22.0 di x86-64.
Ada 2 jebakan lain. Pertama, process.versions.brotli menulis 1.2.0 di Node.js yang rentan dan di Node.js yang sudah ditambal. Uji kami di langkah 1 menunjukkan hasil yang sama dengan catatan ELLIO. Kedua, proses yang berjalan sebelum update tetap memakai decoder lama sampai proses itu di-restart.
Check Point menulis pada 29 Oktober bahwa tim keamanan tidak boleh menutup insiden sesudah patch Node.js saja. Inventaris harus mencakup runtime, paket bahasa, proxy, service mesh, container, dan software yang membawa library Brotli sendiri.

Bulan ini kami juga membahas celah PHP2Shell dan celah GitLab CVSS 10. Pola yang sama muncul lagi: jarak dari patch ke percobaan serangan hanya beberapa hari. Untuk celah ini, jaraknya 5 hari.
Cara kerja: data Brotli yang rusak membuat decoder menulis melewati buffer
Decoder salah membaca data rusak sebagai data yang belum lengkap. Akibatnya, decoder terus menulis ke buffer kecil sampai melewati batasnya.
Bagian ini memakai ringkasan dari advisory resmi. Tujuannya membantu Anda memilih langkah yang tepat, bukan menjelaskan cara menyerang.
Ringkasan dari advisory Node.js
Menurut advisory Node.js 21 Oktober, block switch yang tidak valid dilaporkan sebagai kebutuhan input tambahan, bukan sebagai error format. Decoder streaming terus menambah byte input ke buffer internal 8 byte, lalu menulis melewati ujung buffer itu (CWE-787). CISA menamai celah ini "Google Brotli Unchecked Return Value Vulnerability".
Node.js memberi level High dan menulis bahwa celah ini bisa menjalankan kode dari jarak jauh. Cabang 22, 24, dan 26 terdampak. Cabang 20, 23, dan 25 juga terdampak, tetapi sudah habis masa dukungan dan tidak mendapat patch.
Skor dari setiap lembaga
Skor berbeda per sumber, jadi tulis skor bersama sumbernya. NVD memberi CVSS 3.1 9.8. Google sebagai CNA memberi CVSS 4.0 9.2. Microsoft memberi 8.1 untuk .NET, karena dekompresi Brotli di .NET mati secara default.

Status eksploitasi per 30 Oktober
CISA KEV memasukkan celah ini pada 27 Oktober 2026 berdasarkan bukti eksploitasi aktif. ELLIO mencatat 1 request Brotli sekitar 23 MB ke Node.js 24.22.0 pada 26 Oktober, pukul 15.08 UTC. Dalam 50 percobaan di lab ELLIO, rantai penyerang itu belum menghasilkan shell.
Check Point melaporkan bahwa 90,5% event di telemetrinya membawa payload HTTP berkode Brotli, dan 24,5% menyasar endpoint upload. Tenable belum mengonfirmasi aktivitas yang dilaporkan ELLIO secara mandiri. CSA Singapura meminta patch segera pada 30 Oktober 2026.
Siapa yang paling berisiko
Aplikasi yang membuka body request atau respons berkode Brotli dari pihak luar paling berisiko. Server MCPMCPAturan standar yang memungkinkan program AI memakai alat dan data Anda dengan izin yang jelas.Buka glosarium, chatbot, dan backend APIAPIPintu resmi yang dipakai 2 sistem untuk saling mengirim data, tanpa orang menyalin data secara manual.Buka glosarium di Node.js sering memakai Express dan fetch(), jadi masuk kelompok ini.
Tabel ini merangkum Aikido, ELLIO, advisory .NET 25 Oktober, dan Tenable.
| Cara aplikasi memakai Brotli | Risiko | Yang Anda update |
|---|---|---|
Express 5 atau body-parser 2 menerima body Content-Encoding: br | Tinggi | Node.js |
Koa 3 dengan @koa/bodyparser 6 | Tinggi, diuji ELLIO | Node.js |
fetch() ke URL dari pengguna, webhookWebhookPesan otomatis yang sebuah sistem kirim ke sistem lain tepat saat sesuatu terjadi, misalnya pesan WhatsApp masuk.Buka glosarium, scraper, atau agen AI | Tinggi, proxy tidak menahan | Node.js |
zlib.brotliDecompress pada berkas upload | Tinggi | Node.js |
| Python requests, urllib3, atau httpx dengan paket brotli terpasang | Tinggi bila URL dari luar | pip brotli atau brotlicffi |
| ASP.NET Core atau HttpClient dengan dekompresi br aktif | Bila diaktifkan | Runtime .NET, publish ulang NativeAOT |
| Envoy atau Istio dengan filter decompressor Brotli | Bila diaktifkan | Envoy atau Istio |
| Node.js dari apt Ubuntu atau Debian | Ikut library sistem | libbrotli1, lalu restart |

Server node:http polos tidak membuka body Brotli sendiri, menurut Aikido. Tetap update, karena paket di node_modules bisa membukanya tanpa Anda sadari.
Versi yang sudah memuat patch
Update setiap produk ke versi minimum di tabel ini atau versi yang lebih baru di cabang yang sama.
| Produk | Versi minimum aman | Catatan |
|---|---|---|
| Node.js 22 | 22.23.4 | Binary resmi, nvm, image Docker |
| Node.js 24 | 24.22.1 | Binary resmi, nvm, image Docker |
| Node.js 26 | 26.12.1 | Binary resmi, nvm, image Docker |
| Node.js 20, 23, 25 | Tanpa patch | Pindah ke 22, 24, atau 26 |
| Bun | 1.4.4 | Build ulang executable hasil compile |
| Google Brotli | 1.0.10, 1.1.1, 1.2.1 | Aplikasi yang membawa library sendiri |
| pip brotli / brotlicffi | 1.2.1 / 1.2.1.0 | Setiap virtualenv dan image |
| .NET 8 / 9 / 10 | 8.0.33 / 9.0.22 / 10.0.14 | Publish ulang aplikasi self-contained dan NativeAOT |
| Envoy | 1.36.12, 1.37.8, 1.38.6, 1.39.3 | Bila decompressor Brotli aktif |
| Istio | 1.29.9, 1.30.6, 1.31.2 | Bila dekompresi Brotli aktif |

Untuk paket distro, pakai versi dari halaman CVE Ubuntu dan tracker Debian. Menurut kedua sumber itu, paket nodejs dari apt di Ubuntu 22.04 ke atas dan di Debian memakai library sistem, jadi update libbrotli1 menutup celah di Node.js itu.
| Rilis | libbrotli1 dengan patch |
|---|---|
| Ubuntu 22.04 LTS | 1.0.9-2ubuntu0.1 |
| Ubuntu 24.04 LTS | 1.1.0-2ubuntu0.1 |
| Ubuntu 26.04 LTS | 1.2.0-3ubuntu0.1 |
| Debian 12 (bookworm) | 1.0.9-2+deb12u1 |
| Debian 13 (trixie) | 1.1.0-2+deb13u1 |
PHP juga punya jalur. Menurut Tenable, build PHP resmi untuk Windows terdampak lewat ekstensi cURL bila dekompresi otomatis aktif, dengan patch di 8.2.35-1, 8.3.36-1, 8.4.27-1, dan 8.5.12-1. PHP di Linux mengikuti library sistem atau ekstensi PHP brotli, yang ditambal di 0.21.1.
Prasyarat sebelum mulai
- Akses SSH dengan hak
sudoke server, atau aksesdocker execke container. - Daftar semua tempat Node.js, Python, dan .NET berjalan: server, CI runner, image container, dan fungsi serverless.
- Akses ke repo aplikasi untuk mengubah Dockerfile,
package.json, danrequirements.txt. - Jadwal restart singkat untuk setiap layanan.
- Akses baca ke log nginx atau load balancer, journal systemd, dan PM2.
Bila Anda baru memasang Node.js di server, baca dulu panduan install Node.js di Linux. Panduan itu menjelaskan perbedaan Node.js dari apt, NodeSource, dan nvm.
Langkah 1: Cek versi Node.js di setiap server, CI runner, dan container
Simpan skrip ini sebagai cek-node.sh. Skrip membaca versi Node.js dan cara build-nya, lalu membandingkan versi dengan patch untuk cabangnya.
command -v node >/dev/null || { echo "Node.js tidak terpasang di mesin ini."; exit; }
v=$(node -p process.versions.node)
if [ "$(node -p process.config.variables.node_shared_brotli)" = "true" ]; then
echo "$v: memakai Brotli sistem. Cek libbrotli1 di langkah 2."; exit; fi
case ${v%%.*} in
22) fix=22.23.4;; 24) fix=24.22.1;; 26) fix=26.12.1;;
*) echo "$v: cabang tanpa patch. Pindah ke Node.js 22, 24, atau 26."; exit;;
esac
lt() { [ "$1" != "$2" ] && [ "$(printf '%s\n' "$1" "$2" | sort -V | head -1)" = "$1" ]; }
if lt "$v" "$fix"; then echo "$v: RENTAN CVE-2026-111497. Update ke $fix."
else echo "$v: memuat patch Brotli (minimum $fix)."; fi
Jalankan skrip di server, di container yang berjalan, dan di image sebelum deploy.
bash cek-node.sh # server atau CI runner
docker exec -i nama-container bash < cek-node.sh # container yang berjalan
docker run --rm -i --entrypoint bash node:24.22.0 < cek-node.sh # image sebelum deploy

Image berbasis Alpine tidak memuat bash. Untuk image itu, jalankan node -v, lalu bandingkan hasilnya dengan tabel versi. Untuk Bun, jalankan bun --version. Versi di bawah 1.4.4 rentan.
Cek hasil: Output menulis "memuat patch Brotli". Hasil "RENTAN" berarti Node.js harus update hari ini. Hasil "memakai Brotli sistem" berarti Anda lanjut ke langkah 2 untuk libbrotli1.
Langkah 2: Cek libbrotli1, paket Python, dan .NET
Simpan skrip ini sebagai cek-lib.sh. Skrip mengecek library sistem di Debian dan Ubuntu, paket pip brotli dan brotlicffi, dan runtime .NET.
lt() { [ "$1" != "$2" ] && [ "$(printf '%s\n' "$1" "$2" | sort -V | head -1)" = "$1" ]; }
# 1. Library Brotli sistem di Debian dan Ubuntu
. /etc/os-release
case $VERSION_CODENAME in
jammy) fix=1.0.9-2ubuntu0.1;; noble) fix=1.1.0-2ubuntu0.1;; resolute) fix=1.2.0-3ubuntu0.1;;
bookworm) fix=1.0.9-2+deb12u1;; trixie) fix=1.1.0-2+deb13u1;; *) fix=;;
esac
cur=$(dpkg-query -W -f='${Version}' libbrotli1 2>/dev/null)
if [ -z "$cur" ]; then :
elif [ -z "$fix" ]; then echo "libbrotli1 $cur: cek advisory distro Anda."
elif dpkg --compare-versions "$cur" lt "$fix"; then echo "libbrotli1 $cur: RENTAN. Update ke $fix."
else echo "libbrotli1 $cur: memuat patch."; fi
# 2. Paket Python brotli dan brotlicffi
for py in python3 python; do command -v $py >/dev/null && break; done
for pkg in brotli:1.2.1 brotlicffi:1.2.1.0; do
v=$($py -c "import importlib.metadata as m; print(m.version('${pkg%%:*}'))" 2>/dev/null) || continue
if lt "$v" "${pkg#*:}"; then echo "pip ${pkg%%:*} $v: RENTAN. Update ke ${pkg#*:}."
else echo "pip ${pkg%%:*} $v: memuat patch."; fi
done
# 3. Runtime .NET
dotnet --list-runtimes 2>/dev/null | while read -r name v rest; do
case $v in 8.*) fix=8.0.33;; 9.*) fix=9.0.22;; 10.*) fix=10.0.14;; *) continue;; esac
if lt "$v" "$fix"; then echo "$name $v: RENTAN. Update ke $fix."
else echo "$name $v: memuat patch."; fi
done
bash cek-lib.sh # server
source .venv/bin/activate && bash cek-lib.sh # virtualenv Python
docker exec -i nama-container bash < cek-lib.sh # container

Skrip hanya mencetak baris untuk komponen yang ada di mesin itu. Untuk keluarga RHEL, jalankan rpm -q brotli dan bandingkan dengan advisory distro Anda. Untuk Envoy dan Istio, jalankan envoy --version atau istioctl version, lalu bandingkan dengan tabel versi.
Aplikasi .NET self-contained dan NativeAOT membawa decoder di dalam berkas aplikasinya. Menurut advisory .NET 25 Oktober, update runtime di mesin tidak memperbaiki aplikasi itu. Publish ulang aplikasi dengan paket yang sudah ditambal.
Cek hasil: Setiap baris menulis "memuat patch". Jalankan skrip di setiap virtualenv Python, karena setiap virtualenv punya paket pip sendiri.
Langkah 3: Update, lalu restart setiap proses
Update komponen yang rentan, lalu restart setiap proses yang memakainya. Pakai perintah yang sesuai dengan cara Anda memasang komponen.
# Node.js lewat nvm
nvm install 24.22.1 && nvm alias default 24.22.1
# Dockerfile: FROM node:24.22.1-bookworm-slim, lalu build ulang dengan image dasar baru
docker build --pull -t app:patch .
docker compose up -d --force-recreate
# Library sistem Debian dan Ubuntu
sudo apt update && sudo apt install --only-upgrade libbrotli1
# Paket Python
pip install -U 'brotli>=1.2.1' 'brotlicffi>=1.2.1.0'
# Bun
bun upgrade
Pakai tag image dengan versi lengkap, atau build ulang dengan --pull agar image dasar ikut baru. Aikido mencatat bahwa image dengan tag lama, contohnya node:24.22.0, tetap rentan sampai Anda build ulang. Untuk .NET, pasang runtime 8.0.33, 9.0.22, atau 10.0.14, lalu publish ulang aplikasi self-contained.
Sesudah update library sistem, simpan skrip ini sebagai cek-restart.sh. Skrip mencari proses yang masih memakai library Brotli lama dari memori.
n=0
for m in $(grep -l "libbrotli.*(deleted)" /proc/[0-9]*/maps 2>/dev/null); do
p=${m#/proc/}; p=${p%/maps}; n=$((n + 1))
echo "PID $p masih memakai Brotli lama: $(tr "\0" " " < /proc/$p/cmdline)"
done
echo "$n proses perlu restart."
sudo bash cek-restart.sh
sudo systemctl restart nama-layanan # layanan systemd
pm2 reload all # aplikasi PM2


Skrip itu hanya melihat library sistem. Node.js resmi membawa decoder di dalam binary node, jadi restart setiap layanan Node.js sesudah update. Fungsi serverless dan platform hosting butuh deploy ulang agar build memakai runtime baru.
Cek hasil: Ulangi langkah 1 dan 2. Semua baris menulis "memuat patch", dan cek-restart.sh menulis "0 proses perlu restart".
Langkah 4 (opsional): Tolak body Brotli sementara bila belum bisa update
Langkah ini hanya untuk jeda pendek sampai update selesai. advisory Node.js 21 Oktober tidak memberi workaround, dan Tenable menulis bahwa blokir di proxy tidak melindungi respons yang aplikasi ambil dari server luar.
Di nginx, tolak request dengan header Content-Encoding: br. Taruh baris if di blok server yang menerima API dan upload, lalu jalankan sudo nginx -t dan sudo systemctl reload nginx.
server {
listen 80;
# Tolak body Brotli sampai semua aplikasi di belakang proxy ditambal.
if ($http_content_encoding ~* "\bbr\b") { return 415; }
location / { return 200 "ok\n"; }
}
Di Express, tolak body Brotli sebelum express.json() dan parser lain membukanya.
// Tolak body Brotli sebelum body parser membukanya.
app.use((req, res, next) => {
if (/\bbr\b/i.test(req.headers['content-encoding'] || '')) return res.status(415).send('Brotli tidak diterima');
next();
});
app.use(express.json());

Di .NET, advisory .NET 25 Oktober meminta Anda membuang entri "br" dari DecompressionProviders dan membatasi AutomaticDecompression. Microsoft juga meminta Anda tidak menambah pengaturan dekompresi baru bila belum ada.
// ASP.NET Core: buang "br" dari DecompressionProviders yang sudah ada.
// HttpClient: buka hanya GZip dan Deflate.
var handler = new HttpClientHandler {
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
Di Python, Tenable menyarankan copot paket brotli dan brotlicffi sampai versi baru terpasang. Tanpa paket itu, urllib3 dan requests tidak membuka respons Brotli. Di Envoy dan Istio, matikan filter decompressor Brotli untuk 2 arah. Menghapus br dari header Accept-Encoding saja belum menutup jalur.
Cek hasil: Request dengan Content-Encoding: br mendapat HTTP 415. Request tanpa Brotli tetap mendapat HTTP 200.
Langkah 5: Periksa tanda server sudah disentuh
Serangan yang gagal sering membuat proses crash. Serangan yang berhasil bisa tanpa jejak di log. Simpan skrip ini sebagai cek-tanda.sh dan jalankan dengan sudo di server nginx.
log() { zcat -f /var/log/nginx/access.log*; }
echo "IoC ELLIO : $(log | grep -cE "node2shell-check|94\.154\.43\.7")"
echo "Ditolak 415 : $(log | awk "\$9 == 415" | wc -l)"
echo "Error 5xx : $(log | awk "\$9 >= 500" | wc -l)"
Lalu cek crash, restart, dan proses anak untuk periode sejak 21 Oktober 2026.
sudo journalctl --since 2026-10-21 | grep -ciE 'node.*(segfault|sigsegv|sigabrt)|core dumped'
coredumpctl list node --since 2026-10-21
pm2 list # kolom ↺ adalah jumlah restart
docker inspect -f '{{.Name}} restart={{.RestartCount}}' $(docker ps -q)
ps -eo pid,ppid,user,etime,cmd --forest | grep -A3 '[n]ode'


Cari 4 pola dari ELLIO dan Check Point. Pertama, proses node yang crash, restart beruntun, atau core dump baru. Kedua, proses anak seperti sh, bash, atau curl di bawah proses node.
Ketiga, body Brotli yang besar atau rusak, terutama ke endpoint upload dan API. Keempat, IoC dari ELLIO: user agentAgent AIProgram AI yang mengerjakan langkah pekerjaan sendiri, misalnya membaca pesan, menyiapkan balasan, lalu mencatat hasilnya.Buka glosarium node2shell-check, alamat 94.154.43.7, dan error ERR__ERROR_FORMAT_BLOCK_SWITCH di versi yang sudah aman. Error itu menunjukkan bahwa seseorang sedang menguji server Anda.
Cek hasil: Hitungan IoC 0, tidak ada crash atau restart beruntun, dan tidak ada proses anak yang Anda tidak kenal. Bila ada tanda, isolasi server dan simpan log. Batasi akses ke core dump, karena ELLIO menulis bahwa core dump bisa memuat data sesi. Ganti semua secret yang bisa dibaca proses node: isi .env, API key, token database, dan token cloud.
Contoh: 1 malam respons untuk 4 layanan
Simulasi ini memakai data dummy. Nama layanan, waktu, dan hasil bukan data pelanggan.
| Waktu (WIB) | Layanan dummy | Yang dicek | Hasil | Tindakan |
|---|---|---|---|---|
| 19.00 | api-toko (Docker node:24.22.0, Express 5) | Langkah 1 | RENTAN | Langkah 4 di nginx, lalu build ulang ke 24.22.1 |
| 19.40 | bot-wa (nvm Node.js 22.23.3, fetch webhook) | Langkah 1 | RENTAN | nvm install 22.23.4, pm2 reload all |
| 20.10 | scraper-harga (Python 3.12, brotli 1.1.0) | Langkah 2 | pip brotli RENTAN | pip install -U brotli, restart worker |
| 20.30 | web-lama (Ubuntu 24.04, Node.js dari apt) | Langkah 1 dan 2 | libbrotli1 RENTAN | apt upgrade, cek-restart.sh, restart 2 layanan |
| 21.00 | api-toko | Langkah 5 | 3 restart beruntun pada 26 Oktober | Isolasi, simpan log, ganti secret |
Pelajaran dari simulasi: layanan yang mengambil URL dari luar tidak terlindungi oleh aturan nginx. Restart beruntun sebelum patch butuh pemeriksaan, bukan hanya update.
Siapa yang memasang patch
Tanggung jawab patch berbeda per cara hosting. Tabel ini membantu Anda tahu siapa yang harus bergerak hari ini.
| Cara hosting | Pemegang patch | Yang Anda kerjakan |
|---|---|---|
| VPS atau server sendiri | Tim IT Anda | Langkah 1 sampai 5 |
| Container atau Kubernetes | Tim yang mengelola image | Ganti image dasar, build ulang, lalu langkah 1 dan 5 |
| Serverless atau platform hosting | Platform dan tim Anda | Cek pengumuman platform, lalu deploy ulang |
| Aplikasi yang dikelola vendor | Vendor | Minta bukti versi tertulis, lalu minta hasil langkah 5 |
Rekomendasi Rama Digital: bila server Node.js Anda memegang token pembayaran, token WhatsApp, atau API key model AI, perlakukan setiap tanda di langkah 5 sebagai insiden. Untuk server MCP, baca juga hak akses, approval, dan audit log server MCP.
Checklist hari ini
- Inventaris semua tempat Node.js, Bun, Python, dan .NET berjalan. Pemilik: tim DevOps. Bukti: daftar host, image, dan CI runner.
- Cek Node.js dengan langkah 1. Pemilik: admin server. Bukti: output skrip per host dan per image.
- Cek libbrotli1, pip, dan .NET dengan langkah 2. Pemilik: admin server. Bukti: output skrip per host dan per virtualenv.
- Update dan build ulang image. Pemilik: developer. Bukti: Dockerfile dan lockfile baru.
- Restart setiap proses. Pemilik: admin server. Bukti: output
cek-restart.shmenulis 0. - Pasang langkah 4 di layanan yang belum bisa update. Pemilik: admin nginx. Bukti: uji HTTP 415.
- Periksa tanda dengan langkah 5. Pemilik: admin server. Bukti: output perintah, disimpan bersama log.
- Berhenti bila semua komponen menulis "memuat patch" dan langkah 5 bersih. Bila ada tanda, hentikan kerja patch dan mulai respons insiden.
Pertanyaan yang sering muncul
Saya tidak memakai Express. Apakah saya tetap perlu update? Ya. fetch() membuka respons Brotli secara otomatis, dan paket lain di node_modules bisa membuka body Brotli. Update Node.js adalah satu-satunya perbaikan lengkap.
process.versions.brotli menulis 1.2.0. Apakah Node.js saya aman? Belum tentu. Node.js 24.22.0 yang rentan dan 24.22.1 yang aman sama-sama menulis 1.2.0. Cek versi Node.js dengan langkah 1.
Node.js saya dari apt Ubuntu. Apa yang harus saya update? Update paket libbrotli1, lalu restart layanan Node.js. Ubuntu menulis bahwa paket nodejs di 22.04 ke atas memakai library sistem.
Apakah blokir Content-Encoding br di nginx sudah menutup celah? Tidak. Blokir itu menahan body request dari luar. Respons yang aplikasi ambil dari server luar tetap dibuka oleh decoder.
Saya masih memakai Node.js 20. Kapan patch keluar? Tidak ada patch. Node.js 20, 23, dan 25 sudah habis masa dukungan. Pindah ke Node.js 22, 24, atau 26.
Apakah website PHP atau WordPress saya terdampak? Bisa, lewat library sistem atau ekstensi PHP brotli. Update libbrotli1 dan ekstensi brotli ke 0.21.1, lalu restart PHP-FPM.
Bagaimana saya tahu server sudah dibobol? Cari crash, restart beruntun, proses anak yang aneh, dan IoC di langkah 5. Log yang bersih tidak membuktikan server aman.
Langkah berikutnya
Batas yang tetap berlaku: update menutup celah ini, tetapi tidak menghapus akses yang mungkin sudah tertanam sebelum patch. Bila layanan Anda menunjukkan tanda di langkah 5, atau Anda butuh bantuan memeriksa image dan secret sesudah insiden, pakai Vibe Code Rescue untuk audit dan stabilisasi. Untuk 1 kendala yang mendesak hari ini, Jadwalkan sesi 30 menit.
Sumber
- advisory Node.js 21 Oktober: ringkasan celah, cabang terdampak, dan versi patch.
- rilis Brotli 1.2.1: rilis library dengan patch.
- CVE-2026-111497 dan NVD: catatan CVE, CWE-787, skor 9.2 dan 9.8.
- CISA KEV: CVE-2026-111497 masuk KEV, 27 Oktober 2026.
- advisory .NET 25 Oktober: versi .NET, skor 8.1, dan mitigasi.
- advisory PyPI: versi brotli dan brotlicffi.
- halaman CVE Ubuntu dan tracker Debian: versi libbrotli1 dan status paket nodejs.
- ELLIO: percobaan eksploitasi 26 Oktober, IoC, dan tanda deteksi.
- Aikido: API Node.js yang terpapar dan versi Bun.
- Tenable: linimasa, produk lain, dan langkah sementara.
- Check Point: telemetri 29 Oktober dan urutan respons.
- CSA Singapura: peringatan 30 Oktober 2026.




