Проблема была выявлена компанией 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» при обращении к внешним web-ресурсам.
- HTTP-серверы, HTTP-прокси, HTTP-клиенты и web-браузеры, поддерживающие сжатие Brotli («Accept-Encoding: br»). В Apache httpd поставляется mod_brotli (отключён по умолчанию). Для nginx доступен сторонний модуль ngx_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. Уязвимость устранена в одном из обновлений.
Источник: http://www.opennet.ru/opennews/art.shtml?num=66537
