October 25, 2026
Updated:
9 min read

Kenapa Satu Bug Brotli Kini Mengancam Node, Python, dan Bun?

Cacat decoder Brotli, CVE-2026-111497, merembet dari Node.js ke Python, Bun, hingga Envoy. Ini daftar yang terdampak dan cara memeriksa proyekmu hari ini.

Bayangkan kamu mengirim paket lewat kurir, lalu kurir itu membuka paketmu dengan alat yang ternyata rusak. Bukan isi paketnya yang salah, melainkan alat pembukanya.

Kurang lebih begitu cara kerja cacat CVE-2026-111497. Cacat ini bersembunyi di decoder Brotli, library kompresi yang dipakai diam-diam oleh banyak runtime dan HTTP client.

Awalnya ia dikenal sebagai Node2Shell karena menyerang Node.js. Pada 24 Oktober 2026, ceritanya melebar: peneliti keamanan Aikido menamainya HTTP2Shell karena jangkauannya ternyata jauh lebih luas.

Dari Node2Shell Menjadi HTTP2Shell

Kisah ini mulai ramai pada 21 Oktober 2026, ketika Node.js merilis pembaruan keamanan. Versi 22.23.4, 24.22.1, dan 26.12.1 menambal decoder Brotli yang bermasalah.

Sehari kemudian, tim Imperva Red Team menunjukkan bukti serangan pada Node.js 24.22.0 lewat fetch dan Express 5. Mereka menjalankan kode lewat data Brotli yang dibuat khusus, dan versi 24.22.1 menolak input yang sama.

Pada 23 Oktober, kabar meluas. Paket Python brotli dan brotlicffi ternyata membawa decoder yang sama, lalu menyusul Bun, Envoy, dan Istio. Aikido pun memakai nama baru, HTTP2Shell, untuk menekankan bahwa ini bukan lagi sekadar urusan Node.js.

Nama HTTP2Shell sendiri menegaskan pergeseran cara pandang. Bukan lagi satu runtime yang bermasalah, melainkan satu format kompresi yang dipakai bersama oleh banyak lapisan web.

Apa Sebenarnya yang Rusak di Brotli?

Brotli adalah format kompresi buatan Google yang membuat data lebih kecil saat dikirim lewat jaringan. Decoder bertugas mengembalikan data itu ke bentuk semula di sisi penerima.

Cacatnya ada di kode decoder C, file decode.c, pada Brotli versi 1.0.3 sampai 1.2.0. Data Brotli yang dibuat penyerang bisa merusak proses decoder, dan pada kondisi tertentu membuka jalan eksekusi kode.

Google CNA memberi skor CVSS 9,2 dengan label kritis. Angka itu bukan vonis bahwa semua aplikasi pasti bisa dibobol, melainkan ukuran seberapa parah dampaknya bila jalur serangannya tersedia.

Aikido juga memperingatkan satu jebakan. Pemetaan cacat ini ke paket PyPI sempat tertinggal, sehingga pemindai otomatis bisa saja tidak memberi peringatan. Pengecekan manual tetap perlu, meski alatmu terlihat diam.

Kenapa Python Ikut Kena Meski Kamu Tidak Mengimpor Brotli?

Inilah bagian yang paling mengejutkan bagi banyak developer Python. Kamu tidak perlu menulis import brotli agar decoder itu berjalan.

Ketika paket brotli terpasang, HTTP client seperti requests lewat urllib3, httpx dengan ekstra brotli, aiohttp, dan Scrapy akan mendekode respons Brotli secara otomatis. Server yang dikendalikan penyerang bisa menyelipkan data berbahaya lewat respons itu.

Jalur kedua datang dari arah berlawanan. Framework atau middleware yang mendekode body permintaan dengan Content-Encoding br ikut membuka pintu yang sama. Aikido mencatat riset pada paket Python belum membuktikan eksekusi kode, tapi risiko kerusakan dan kebocoran memori tetap nyata.

Bagi developer, pelajaran praktisnya jelas. Daftar dependensi di permukaan tidak menceritakan seluruh cerita. Yang menentukan adalah apa yang benar-benar terpasang dan berjalan di environment produksi.

Siapa Saja yang Harus Segera Memeriksa?

Daftar terdampaknya panjang. Node.js versi 20, 23, dan 25 yang sudah end-of-life tidak mendapat perbaikan, jadi penggunanya harus pindah ke jalur yang didukung.

Bun versi 1.4.3 ke bawah ikut terdampak dan diperbaiki di 1.4.4. Envoy dan Istio juga merilis perbaikan masing-masing, dan build curl atau libcurl yang membundel Brotli perlu diperbarui.

Ada kabar baik yang kecil. Apache mod_brotli dan Nginx tidak mendekode Brotli secara default, sehingga tidak membuka jalur yang sama. Sampai laporan Aikido terbit, belum ada eksploitasi di dunia nyata yang terkonfirmasi.

Satu detail penting lain adalah soal versi perbaikan. Brotli merilis 1.2.1, plus backport 1.0.10 dan 1.1.1 untuk jalur rilis lama. Pengelola distribusi Linux pun merilis paket yang sudah ditambal, jadi pembaruan lewat package manager sistem juga patut diperiksa.

Cara Memeriksa dan Menambal Proyekmu Hari Ini

Langkah pertama adalah memeriksa versi yang benar-benar berjalan, bukan hanya yang tertulis di package.json. Periksa lockfile, dependensi turunan, dan semua environment: laptop, CI runner, server, dan container.

Untuk Python, jalankan pip install -U "Brotli>=1.2.1" atau "brotlicffi>=1.2.1.0", lalu regenerate lockfile bila kamu memakai Poetry, uv, atau pip-tools. Untuk Node.js dan Bun, naikkan ke versi perbaikan di atas.

Jangan lupa memeriksa layanan yang memakai proxy atau gateway. Envoy dan Istio yang mengaktifkan decompressor Brotli ikut terdampak, jadi patch di aplikasi saja belum menutup semua jalur.

Periksa juga salinan yang terbundel. Tool yang dikompilasi statis atau image yang menyertakan libbrotli sendiri tidak ikut terperbaiki hanya karena kamu memperbarui satu paket. Itulah alasan rebuild menjadi langkah wajib, bukan opsional.

Terakhir, rebuild image container dan wheel yang membundel paket lama. Image yang dibangun di atas versi rentan tetap rentan sampai kamu membangun ulangnya, meski kode aplikasimu tidak berubah.

Pelajaran dari Satu Library Kecil

HTTP2Shell mengingatkan satu hal yang mudah dilupakan. Satu library kecil yang dibundel di banyak tempat bisa mengubah satu cacat menjadi insiden lintas ekosistem.

Diskusi di Hacker News pada 24 Oktober 2026, yang mengumpulkan ratusan komentar, menunjukkan betapa banyak tim baru sadar bahwa decoder ini ada di tumpukan mereka.

Memperbarui aplikasi saja tidak cukup bila salinan rentan masih tersembunyi di dependency chain. Karena itu, memeriksa apa yang benar-benar berjalan sama pentingnya dengan menulis kode baru.

Ke depan, cara paling murah menghadapi kabar seperti ini adalah satu kebiasaan. Setiap kali ada CVE pada library bersama, periksa seluruh tumpukanmu, bukan hanya aplikasi yang kamu tulis sendiri.

Kalau kamu suka membedah tooling seperti ini, proyek eksperimen lain yang kami kerjakan ada di /projects. Dan untuk urusan keamanan, menambal hari ini selalu lebih murah daripada menjelaskan insiden besok.

Dimas Febriyanto - Fullstack Developer

Dimas Febriyanto

Fullstack & Mobile Developer specializing in Golang & Flutter. Aktif sebagai Junior Mobile Developer di Sagara Technology & asisten lab di Universitas Gunadarma. Passionate about building scalable algorithms & high-impact applications.

Lihat Portofolio

Liked this article?

Feel free to share it with your network or reach out if you have any questions!