In de referentiebibliotheek voor de decodering van het gecomprimeerde dataformaat Brotli is een kwetsbaarheid ontdekt (CVE-2026-111497, codenaam Broccoli2Shell en HTTP2Shell), die leidt tot een bufferoverflow bij de verwerking van speciaal gevormde gecomprimeerde gegevens. Volgens Google kan deze kwetsbaarheid worden gebruikt voor remote code execution bij aanvallen op projecten die de officiƫle implementatie van de Brotli-decoder gebruiken. Tot de getroffen projecten behoren: Node.js, Bun, Envoy, Istio, web browsers, proxyservers, HTTP-clients, HTTP-servers, archiveringsprogramma's, proxyservers, UEFI-firmware, JPEG XL-viewers, content decodering bibliotheken voor Python, Ruby, Java, PHP en .NET, en de bijbehorende afhankelijkheden.
Het probleem werd in februari van dit jaar door OpenAI ontdekt en geblokkeerd in de codebase van Brotli door onjuiste streams tijdens decodering te negeren. Op 22 oktober zijn de correctieve versies Brotli 1.0.10, 1.1.1 en 1.2.1 uitgebracht, waarin expliciet werd vermeld dat de kwetsbaarheid was verholpen en het probleem zelf werd opgelost. Op dezelfde dag werd er een prototype-exploit gemaakt, waarmee code op afstand kon worden uitgevoerd onder laboratoriumomstandigheden, met behulp van niet-standaard builds (in standaard builds kwam een crash voor). Later documenteerde Imperva een aanval op standaard builds van Node.js 24.22.0 in een Linux-omgeving op een ARM64-systeem.
De kwetsbaarheid leidt tot een buffer overflow door onjuiste foutverwerking tijdens het parseren van blokken in de gecomprimeerde stroom. De functie DecodeBlockTypeAndLength() retourneerde in plaats van de foutcode alleen de waarden true en false, waardoor de aanroepende code niet kon onderscheiden of de stroom corrupt was of dat een status vereiste om extra gegevens naar de functie door te geven. In het geval dat een onjuiste bloktype in de stroom werd opgegeven, beschouwde de decoder het niet als een fout, maar als een toestand van gegevensgebrek die aanvullende lezing uit de stroom vereiste. Maar omdat de toegewezen buffer niet was berekend op de extra gelezen gegevens, werden deze buiten zijn grenzen geschreven, wat het interne toestand van de decoder beĆÆnvloedde.
Kwetsbare projecten:
- De referentiebibliotheek brotli, het probleem doet zich voor vanaf versie 1.0.3 en is verholpen in de updates 1.0.10, 1.1.1 en 1.2.1. De kwetsbaarheid treft applicaties en bibliotheken die gebruik maken van de libbrotlidec-bibliotheek.
- De JavaScript-platform Node.js heeft het probleem opgelost in de updates 26.12.1, 24.22.1 en 22.23.4. Applicaties die de fetch()-methode gebruiken om externe inhoud op te vragen, kunnen worden aangevallen. Deze methode decodeert automatisch HTTP-responses met de header 'Content-Encoding: br'. De kwetsbaarheid doet zich ook voor bij directe aanroepen van de zlib.brotliDecompress*(), createBrotliDecompress() en brotli.decompress() methoden voor het uitpakken van externe inhoud of bij het ontvangen van HTTP-verzoeken met parsing via de Express 5 en body-parser 2.x bibliotheken.
- Python-pakketten brotli en brotlicffi (oplossing voorgesteld in versie 1.2.1) en de projecten die ze gebruiken, waaronder populaire bibliotheken zoals urllib3, aiohttp, httpx en Scrapy, die antwoorden met de header 'Content-Encoding: br' decoderen bij het benaderen van externe webbronnen.
- HTTP-servers, HTTP-proxy's, HTTP-clients en webbrowsers die Brotli-compressie ondersteunen ('Accept-Encoding: br'). In Apache httpd wordt mod_brotli meegeleverd (standaard uitgeschakeld). Voor nginx is er een externe module ngx_brotli (de versie van brotli in de afhankelijkheden is bijgewerkt naar de huidige versie). In Chrome/Chromium en Firefox is het probleem al opgelost in een van de eerdere updates. In de proxy-de server Envoy is de kwetsbaarheid opgelost in de versies 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime wanneer de BrotliDecoder, BrotliStream en HttpClient methoden in de toepassing worden gebruikt. De kwetsbaarheid is nog niet opgelost.
- PHP-extensie brotli bij gebruik van de functie brotli_uncompress(). De oplossing is in voorbereiding.
- Ruby-pakket brotli bij gebruik van de methode Brotli.inflate. De kwetsbaarheid is nog niet opgelost.
- Database DuckDB bij het importeren van gecomprimeerde Parquet-bestanden. De oplossing is in voorbereiding.
- Database ClickHouse. De oplossing is in voorbereiding.
- Database YDB. De kwetsbaarheid is nog niet opgelost.
- Apache Arrow bij het importeren van gecomprimeerde Parquet-bestanden. De oplossing is in voorbereiding.
- libjxl (bij het comprimeren van metadata in JPEG XL wordt Brotli gebruikt).
De oplossing is in voorbereiding. - Archivers NanaZip, 7-Zip-zstd en p7zip bij het uitpakken van br-bestanden. De kwetsbaarheid is niet opgelost.
- MuPDF. De kwetsbaarheid is niet opgelost.
- UEFI-firmware gebaseerd op EDK II en UEFITool, gecomprimeerd met behulp van Brotli. De oplossing is in voorbereiding - EDK II en UEFITool.
- JavaScript-platform Bun. De kwetsbaarheid is opgelost in versie 1.4.4.
- Platform voor het beheren van microservices Istio. De kwetsbaarheid is opgelost in de versies 1.29.9, 1.30.6 en 1.31.2.
- curl en libcurl, de kwetsbaarheid doet zich voor bij aanwezigheid van een kwetsbare versie van libbrotlidec in de afhankelijkheden.
- Parsers voor het Web Open Font-formaat (WOFF), waarin wordt gebruikt
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost en YTsaurus. De kwetsbaarheid is verholpen in een van de updates.
Bron: opennet.ru
