Sebuah kerentanan (CVE-2026-111497, dengan nama kode Broccoli2Shell dan HTTP2Shell) telah diidentifikasi dalam pustaka yang berisi implementasi referensi dekoder kompresi data Brotli. Kerentanan ini menyebabkan buffer overflow saat memproses data terkompresi yang dibuat secara khusus. Menurut Google, kerentanan ini dapat digunakan untuk eksekusi kode jarak jauh saat menyerang proyek yang menggunakan implementasi dekoder Brotli resmi. Proyek yang terpengaruh meliputi Node.js, Bun, Envoy, Istio, peramban web, server proxy, klien HTTP, server HTTP, pengarsip, server proxy, firmware UEFI, penampil JPEG XL, pustaka dekode konten untuk Python, Ruby, Java, PHP, dan .NET, serta dependensi terkaitnya.
Masalah ini ditemukan oleh OpenAI pada bulan Februari tahun ini dan diblokir dalam basis kode Brotli dengan membuang aliran data yang tidak valid selama proses dekoding. Pada tanggal 22 Oktober, rilis patch Brotli 1.0.10, 1.1.1, dan 1.2.1 diterbitkan, secara eksplisit mengumumkan perbaikan dan mengatasi masalah yang mendasarinya. Pada hari yang sama, sebuah prototipe eksploitasi dibuat yang memungkinkan eksekusi kode jarak jauh dalam kondisi laboratorium menggunakan build non-standar (build standar akan mengalami crash). Imperva kemudian mendeteksi serangan pada build Node.js 24.22.0 standar. Linux- lingkungan pada sistem ARM64.
Kerentanan ini mengakibatkan penulisan buffer di luar batas karena penanganan kesalahan yang tidak tepat selama penguraian blok dalam aliran terkompresi. Fungsi DecodeBlockTypeAndLength() hanya mengembalikan nilai true dan false, bukan kode kesalahan, sehingga mencegah pemanggil membedakan antara kerusakan aliran dan kondisi yang memerlukan data tambahan untuk diteruskan ke fungsi tersebut. Jika tipe blok data terkompresi yang salah ditentukan dalam aliran, dekoder menafsirkannya bukan sebagai kesalahan, tetapi sebagai kondisi kehabisan data yang memerlukan pembacaan tambahan dari aliran. Namun, karena buffer yang dialokasikan tidak dirancang untuk mengakomodasi pembacaan data tambahan, data tersebut ditulis ke area di luar buffer yang menyimpan status internal dekoder.
Proyek yang terpengaruh:
- Pustaka referensi Brotli, sebuah masalah yang telah ada sejak rilis 1.0.3 dan telah diperbaiki dalam pembaruan 1.0.10, 1.1.1, dan 1.2.1, memengaruhi aplikasi dan pustaka yang menggunakan pustaka libbrotlidec.
- Platform JavaScript Node.js telah diperbaiki dalam pembaruan 26.12.1, 24.22.1, dan 22.23.4. Aplikasi yang menggunakan metode fetch() untuk meminta konten pihak ketiga, yang secara otomatis mendekode respons HTTP dengan header "Content-Encoding: br", dapat rentan. Kerentanan ini juga muncul ketika memanggil langsung metode zlib.brotliDecompress*(), createBrotliDecompress(), dan brotli.decompress() untuk mendekompilasi konten pihak ketiga, atau ketika menerima permintaan HTTP yang diuraikan melalui pustaka Express 5 dan body-parser 2.x.
- Paket Python brotli dan brotlicffi (perbaikan diusulkan dalam versi 1.2.1) dan proyek-proyek yang menggunakannya, termasuk pustaka populer urllib3, aiohttp, httpx, dan Scrapy, yang mendekode respons dengan header "Content-Encoding: br" saat mengakses sumber daya web eksternal.
- Server HTTP, proxy HTTP, klien HTTP, dan browser web yang mendukung kompresi Brotli ("Accept-Encoding: br"). Apache httpd dilengkapi dengan mod_brotli (dinonaktifkan secara default). Modul pihak ketiga, ngx_brotli, tersedia untuk nginx (versi brotli dalam dependensi telah diperbarui ke versi terbaru). Di Chrome/Chromium dan Firefox, masalah ini telah diperbaiki dalam pembaruan sebelumnya. Dalam proxy-server Kerentanan Envoy telah diperbaiki pada rilis 1.40.0, 1.39.3, 1.38.6, 1.37.8, dan 1.36.12.
- Kerentanan ini terjadi pada runtime .NET saat menggunakan metode BrotliDecoder, BrotliStream, dan HttpClient dalam sebuah aplikasi. Kerentanan ini belum ditambal.
- Ekstensi PHP brotli saat menggunakan fungsi brotli_uncompress(). Perbaikan sedang berlangsung.
- Paket Ruby Brotli rentan terhadap eksploitasi yang menggunakan metode Brotli.inflate. Kerentanan ini belum ditambal.
- DuckDB saat mengimpor file Parquet terkompresi. Perbaikan sedang berlangsung.
- ClickHouse DBMS. Perbaikan sedang berlangsung.
- Sistem manajemen basis data YDB. Kerentanan tersebut belum diperbaiki.
- Apache Arrow bermasalah saat mengimpor file Parquet terkompresi. Perbaikan sedang dalam proses.
- libjxl (menggunakan Brotli untuk kompresi metadata JPEG XL).
Koreksi sedang dipersiapkan. - Program pengarsipan NanaZip, 7-Zip-zstd, dan p7zip rentan saat membongkar file .br. Kerentanan tersebut masih ada.
- MuPDF. Kerentanan tersebut belum ditambal.
- Firmware UEFI berbasis EDK II dan UEFITool, dikompresi dengan Brotli. Perbaikan sedang dipersiapkan untuk EDK II dan UEFITool.
- Kerangka kerja JavaScript Bun. Kerentanan tersebut telah diperbaiki pada versi 1.4.4.
- Istio, sebuah platform manajemen layanan mikro. Kerentanan tersebut telah diperbaiki pada versi 1.29.9, 1.30.6, dan 1.31.2.
- Pada curl dan libcurl, kerentanan muncul ketika versi libbrotlidec yang rentan hadir dalam dependensi.
- Parser untuk format font Web Open Font (WOFF), yang menggunakan
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost, dan YTsaurus. Kerentanan tersebut telah diperbaiki dalam sebuah pembaruan.
Sumber: opennet.ru
