У бібліотеці з еталонною реалізацією декодувальника формату стиснення даних Brotli виявлено вразливість (CVE-2026-111497, кодові імена Broccoli2Shell та HTTP2Shell), що веде до переповнення буфера при обробці спеціально оформлених стислих даних. За даними Google, вразливість може використовуватися для віддаленого виконання коду при атаці на проекти, що використовують офіційну реалізацію декодувальника Brotli. Серед проектів, що торкаються вразливості: Node.js, Bun, Envoy, Istio, web-браузери, проксі-сервери, HTTP-клієнти, HTTP-сервери, архіватори, проксі-сервери, UEFI-прошивки, переглядачі JPEG XL, декодуючі контент PHP і PHP, бібліотеки, що декодують контент, PHP і PHP, і . із нею залежності.
Проблема була виявлена компанією 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), у якому використовується
Бротлі. - Brotli4j, SumatraPDF, Ghostscript, CatBoost та YTsaurus. Уразливість усунена в одному з оновлень.
Джерело: opennet.ru
