HTTP/2Shell adalah salah satu nama yang digunakan untuk CVE-2026-111497, sebuah kerentanan pada decoder Brotli. Meski namanya menyebut HTTP/2, masalah intinya bukan protokol HTTP/2 itu sendiri. Bug berada pada kode yang membuka kembali data Brotli terkompresi. Aplikasi berisiko jika menerima aliran Brotli yang dikendalikan penyerang lalu mendekompresinya dengan versi decoder yang terdampak.
Kerentanan ini juga disebut Node2Shell atau Broccoli2Shell. Nama-nama tersebut merujuk pada bug decoder Brotli yang sama, bukan kerentanan terpisah. Isu ini berbeda dari PHP2Shell: PHP2Shell menyangkut dua bug pada inti runtime PHP, sedangkan CVE-2026-111497 berada pada pustaka kompresi Brotli yang digunakan oleh berbagai runtime dan produk.
Apa yang terjadi?
Brotli adalah algoritma kompresi tanpa kehilangan data yang umum dipakai di web. Browser, server, proxy, runtime, dan pustaka klien dapat menggunakan Brotli untuk mengurangi ukuran data. Saat aplikasi mendekompresi aliran yang cacat, bug pada decoder versi terdampak dapat menyebabkan penulisan di luar batas memori (out-of-bounds write). Konsekuensi yang mungkin meliputi crash, kebocoran sebagian memori proses, korupsi memori, dan dalam kondisi tertentu eksekusi kode.
Node.js menjelaskan bahwa aliran input dengan block switch yang tidak valid dapat ditafsirkan sebagai kebutuhan akan input tambahan, bukan sebagai format yang harus ditolak. Decoder streaming lalu melanjutkan penambahan data ke buffer internal yang terlalu kecil. Detail implementasi ini membantu menjelaskan mengapa versi decoder perlu diperbarui, tetapi tidak berarti setiap program yang hanya memasang Node.js otomatis dapat diserang.
Kapan sebuah aplikasi terpapar?
Faktor kuncinya adalah apakah komponen terdampak benar-benar melakukan dekompresi Brotli pada data yang dapat dipengaruhi pihak luar. Misalnya, server bisa menerima badan permintaan terkompresi, klien HTTP dapat otomatis membuka respons dari server lain, atau proxy dapat mengaktifkan filter Brotli. Sebaliknya, penggunaan Brotli hanya untuk mengompresi respons keluar tidak dengan sendirinya membuktikan bahwa jalur decoder yang rentan dapat dipicu.
Setiap ekosistem memiliki kondisi berbeda. Node.js menyebut aplikasi yang mendekompresi data Brotli yang dikendalikan penyerang melalui node:zlib sebagai jalur yang perlu diperiksa. Advisory .NET menyatakan aplikasi tidak otomatis terpapar hanya karena paket runtime terpasang: paparan memerlukan fitur Brotli request/response decompression atau API decoder yang memproses data tidak tepercaya. Envoy terdampak pada versi tertentu bila Brotli decompressor dikonfigurasi. Untuk PHP, periksa ekstensi dan pustaka Brotli yang benar-benar digunakan; masalah ini terpisah dari patch inti PHP2Shell.
Komponen dan versi yang perlu diinventarisasi
Versi upstream Google Brotli yang terdampak adalah 1.0.3 sampai 1.2.0. Rilis perbaikan upstream mencakup 1.0.10, 1.1.1, dan 1.2.1. Namun banyak aplikasi membundel atau menautkan pustaka sendiri. Memperbarui paket sistem operasi belum tentu memperbarui salinan statis di Node.js, image container, executable NativeAOT, proxy, atau dependensi Python.
- Node.js: rilis keamanan awal untuk cabang yang terdampak mencakup 22.23.4, 24.22.1, dan 26.12.1. Gunakan rilis keamanan terbaru yang tersedia untuk cabang Node.js yang masih didukung, bukan hanya versi awal tersebut.
- Python: paket PyPI
Brotlidiperbaiki pada 1.2.1 danbrotlicffipada 1.2.1.0. Dependensi opsional pada klien HTTP dapat mengaktifkan dukungan Brotli. - Envoy: advisory proyek mencantumkan perbaikan pada 1.40.0, 1.39.3, 1.38.6, 1.37.8, dan 1.36.12.
- .NET: perbaikan tersedia melalui pembaruan runtime/SDK vendor. Periksa advisory Microsoft untuk versi yang cocok dengan major version serta penggunaan NativeAOT atau aplikasi self-contained.
- PHP dan image aplikasi: periksa ekstensi Brotli, pustaka yang ditautkan, dan pembaruan image/runtime dari penyedia. Patch inti PHP untuk PHP2Shell tidak otomatis berarti setiap komponen Brotli yang disertakan pihak lain sudah diperbaiki.
Cara memeriksa proyek dan server
- Buat daftar layanan. Inventaris Node.js, Python, .NET, PHP, Envoy, proxy, image container, serverless function, build agent, dan aplikasi desktop/server yang memproses konten Brotli.
- Periksa dependensi langsung maupun transitif. Tinjau lockfile seperti
package-lock.json,pnpm-lock.yaml,yarn.lock,requirements.txt,poetry.lock, file project .NET, serta SBOM image. Cari paket Brotli dan klien HTTP yang dapat mengaktifkan dekompresi. - Pastikan jalur decode. Tanyakan apakah layanan mendekompresi badan permintaan, respons dari host eksternal, pesan antrean, unggahan, atau konten yang disimpan. Periksa konfigurasi proxy dan middleware; jangan hanya melihat nama dependensi.
- Cocokkan versi dengan vendor. Vendor dapat membundel patch atau memberikan backport. Verifikasi advisory untuk versi produk dan paket yang benar-benar terpasang.
- Perbarui dan bangun ulang. Upgrade runtime/paket, rebuild image dan aplikasi self-contained, lalu deploy ulang. Restart proses agar salinan pustaka lama tidak tetap dimuat.
- Verifikasi hasil. Periksa versi runtime dan dependensi setelah deploy, pastikan semua replika diperbarui, lalu uji fungsi kompresi normal serta pantau log error.
Mitigasi sementara
Jika belum bisa memasang pembaruan, cara paling aman adalah menghentikan sementara jalur yang mendekompresi data Brotli dari sumber yang tidak tepercaya, selama dampak operasionalnya dapat diterima. Pada proxy atau load balancer, menolak badan permintaan Brotli dapat membantu untuk jalur masuk tertentu, tetapi tidak melindungi aplikasi yang mengunduh respons Brotli dari server lain. Jangan menganggap menonaktifkan kompresi respons keluar cukup untuk menutup decoder.
Untuk layanan yang harus tetap berjalan, batasi sumber data, letakkan proses dalam isolasi yang sesuai, kurangi hak akses, dan tingkatkan logging serta pemantauan. Ini hanya mengurangi paparan atau dampak; pembaruan decoder tetap tindakan utama. Uji setiap perubahan pada staging karena klien atau integrasi tertentu mungkin mengandalkan Brotli.
Berlangganan gratis. Artikel & tutorial coding terbaru langsung ke email kamu. Tanpa spam.
Apakah bug ini sudah dieksploitasi?
CVE-2026-111497 telah masuk ke katalog Known Exploited Vulnerabilities CISA. Perlakukan inventaris dan patch sebagai prioritas, khususnya bila layanan memproses data terkompresi dari internet. Keberadaan eksploitasi yang dilaporkan tidak berarti setiap sistem yang memuat Brotli telah dikompromikan. Setelah patch, tinjau log untuk crash decoder, restart tak terduga, permintaan tidak biasa, atau perilaku proses yang menyimpang dari baseline.
FAQ
Apakah HTTP/2 harus dimatikan?
Tidak ada dasar untuk mematikan HTTP/2 secara umum hanya dari nama isu ini. Fokuskan pemeriksaan pada komponen Brotli yang mendekompresi input. Ikuti advisori produk spesifik jika vendor menyarankan tindakan tambahan.
Apakah semua situs yang memakai Brotli rentan?
Tidak otomatis. Perlu ada decoder terdampak dan jalur yang memproses data Brotli yang dapat dikendalikan penyerang. Konfigurasi dan cara pustaka dibundel menentukan paparan.
Apakah pembaruan library Brotli sistem sudah cukup?
Belum tentu. Perangkat lunak dapat membundel salinan statis. Perbarui juga runtime, dependency, container image, executable, atau produk vendor yang menyertakan decoder.
Apakah ini sama dengan PHP2Shell?
Tidak. Keduanya isu berbeda. PHP2Shell merujuk ke CVE-2026-109618 dan CVE-2026-109619 pada inti PHP. HTTP/2Shell/Node2Shell merujuk ke CVE-2026-111497 pada decoder Brotli.
Rujukan utama: advisori keamanan Node.js, GitHub Advisory untuk Brotli dan Python, advisori Envoy, dan rilis resmi Google Brotli.