У бібліятэцы з эталоннай рэалізацыяй дэкадавальніка фармату сціску дадзеных Brotli выяўлена ўразлівасць (CVE-2026-111497, кодавыя імёны Broccoli2Shell і HTTP2Shell), якая прыводзіць да перапаўнення буфера пры апрацоўцы спецыяльна аформленых сціснутых дадзеных. Па дадзеных Google уразлівасць можа выкарыстоўвацца для выдаленага выканання кода пры нападзе на праекты, якія выкарыстоўваюць афіцыйную рэалізацыю дэкадавальніка Brotli. Сярод закранаемых уразлівасцю праектаў: Node.js, Bun, Envoy, Istio, web-браўзэры, проксі-серверы, HTTP-кліенты, HTTP-серверы, архіватары, проксі-серверы, UEFI-прашыўкі, праглядальнікі JPEG XL, дэкадавальныя кантэнт бібліятэкі для NET-HP. з імі залежнасці.
Праблема была выяўлена кампаніяй OpenAI у лютым гэтага года і блакіравана ў кодавай базе Brotli праз адкідванне некарэктных патокаў пры дэкадаванні. 22 кастрычніка былі апублікаваныя карэкціруючыя выпускі Brotli 1.0.10, 1.1.1 і 1.2.1 у якіх відавочна было заяўлена аб ухіленні ўразлівасці і выпраўленая сутнасць праблемы. У гэты ж дзень быў створаны прататып эксплоіту, які дазволіў аддалена выканаць код у лабараторных умовах, пры выкарыстанні нестандартных зборак (у стандартных зборках адбывалася аварыйнае завяршэнне). Пазней кампанія Imperva зафіксавала напад на штатныя зборкі Node.js 24.22.0 у Linux-акружэнні на сістэме ARM64.
Уразлівасць прыводзіць да запісу за межы буфера з-за некарэктнай апрацоўкі памылак падчас разбору блокаў у сціснутым струмені. Функцыя DecodeBlockTypeAndLength() замест кода памылкі вяртала толькі значэнні true і false, што не дазваляла выклікаламу коду адрозніць пашкоджанне струменя ад стану, патрабавальнага перадачы ў функцыю дадатковых дадзеных. У выпадку ўказання ў струмені некарэктнага тыпу блока сціснутых дадзеных, дэкадавальнік успрымаў яго не як памылку, а як стан недахопу дадзеных, патрабавальнае дадатковага чытання з струменя. Але паколькі выдзелены буфер не быў разлічаны на дадаткова прачытаныя дадзеныя, яны запісваліся ў вобласць за яго межамі, у якой захоўваўся ўнутраны стан дэкадзіроўшчыка.
Схільныя ўразлівасці праекты:
- Эталонная бібліятэка brotli, праблема выяўляецца пачынальна з выпуску 1.0.3 і ўхіленая ў абнаўленнях 1.0.10, 1.1.1 і 1.2.1. Уразлівасць закранае прыкладанні і бібліятэкі, якія выкарыстоўваюць бібліятэку libbrotlidec.
- JavaScript платформа Node.js, праблема ўхіленая ў абнаўленнях 26.12.1, 24.22.1 і 22.23.4. Атакаваны могуць быць прыкладанні, якія выкарыстоўваюць для запыту іншага кантэнту метад fetch(), які аўтаматычна дэкадуе HTTP-адказы з загалоўкам «Content-Encoding: br». Таксама ўразлівасць выяўляецца пры прамым выкліку метадаў zlib.brotliDecompress*(), createBrotliDecompress() і brotli.decompress() для распакавання іншага змесціва або пры прыёме HTTP-запытаў з разборам праз бібліятэкі Express 5 і body-parser 2.x.
- Python-пакеты brotli і brotlicffi (выпраўленне прапанавана ў версіі 1.2.1) і выкарыстоўвалыя іх праекты, сярод якіх папулярныя бібліятэкі urllib3, aiohttp, httpx і Scrapy, якія дэкадуюць адказы з загалоўкам "Content-Encoding: br" пры звароце да вонкавых.
- HTTP-серверы, HTTP-проксі, HTTP-кліенты і web-браўзэры, якія падтрымліваюць сціск Brotli ("Accept-Encoding: br"). У Apache httpd пастаўляецца mod_brotli (адключаны па змаўчанні). Для nginx даступны іншы модуль ngx_brotli (версія brotli у залежнасцях паднятая да актуальнай). У Chrome/Chromium і Firefox праблема ўжо ўхіленая ў адным з мінулых абнаўленняў. У проксі-серверы Envoy уразлівасць ухіленая ў выпусках 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime пры выкарыстанні ў дадатку метадаў BrotliDecoder, BrotliStream і HttpClient. Уразлівасць пакуль не ўхіленая.
- PHP-пашырэнне brotli пры выкарыстанні функцыі brotli_uncompress(). Выпраўленне ў працэсе падрыхтоўкі.
- Ruby пакет brotli пры выкарыстанні метаду Brotli.inflate. Уразлівасць пакуль не ўхіленая.
- СКБД DuckDB пры імпарце сціснутых Parquet-файлаў. Выпраўленне ў працэсе падрыхтоўкі.
- СКБД ClickHouse. Выпраўленне ў працэсе падрыхтоўкі.
- СКБД YDB. Уразлівасць пакуль не ўхіленая.
- Apache Arrow пры імпарце сціснутых Parquet-файлаў. Выпраўленне ў працэсе падрыхтоўкі.
- libjxl (пры сціску метададзеных у JPEG XL выкарыстоўваецца Brotli).
Выпраўленне ў працэсе падрыхтоўкі. - Архіватары NanaZip, 7-Zip-zstd і p7zip пры распакаванні br-файлаў. Уразлівасць не ўхіленая.
- MuPDF. Уразлівасць не ўхіленая.
- UEFI-прашыўкі на базе EDK II і UEFITool, сціснутыя пры дапамозе Brotli. Выпраўленне падчас падрыхтоўкі - EDK II і UEFITool.
- JavaScript-платформа Bun. Уразлівасць ухілена ў версіі 1.4.4.
- Платформа для кіравання мікрасэрвісамі Istio. Уразлівасць ухіленая ў версіях 1.29.9, 1.30.6 і 1.31.2.
- curl і libcurl, уразлівасць выяўляецца пры наяўнасці ў залежнасцях ўразлівай версіі libbrotlidec.
- Парсеры фармату шрыфтоў Web Open Font (WOFF), у якім выкарыстоўваецца
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost і YTsaurus. Уразлівасць ухіленая ў адным з абнаўленняў.
Крыніца: opennet.ru
