Në bibliotekën me zbatimin standard të dekoduesit të formatit të kompresimit të të dhënave Brotli, është zbuluar një vulnerabilitet (CVE-2026-111497, emrat kodik Broccoli2Shell dhe HTTP2Shell), që çon në mbushje të tepërt të tamponit gjatë përpunimit të të dhënave të kompresuara që janë formatuar në mënyrë të veçantë. Sipas Google, ky vulnerabilitet mund të përdoret për ekzekutimin e kodit në distancë gjatë sulmeve në projektet që përdorin zbatimin zyrtar të dekoduesit Brotli. Në mesin e projekteve të prekur nga ky vulnerabilitet janë: Node.js, Bun, Envoy, Istio, shfletuesit web, serverat proxy, klientët HTTP, serverat HTTP, arkivuesit, firmware-t UEFI, shikuesit JPEG XL, bibliotekat që dekodojnë përmbajtjen për Python, Ruby, Java, PHP dhe .NET dhe varësitë përkatëse.
Problemi u identifikua nga kompania OpenAI në shkurt të këtij viti dhe u bllokua në kodin e bazës Brotli duke hedhur jashtë rrjedhat e papërshtatshme gjatë dekodimit. Më 22 tetor, u publikuan versione korrigjuese Brotli 1.0.10, 1.1.1 dhe 1.2.1, në të cilat u deklarua qartë se ishte eliminuar vulnerabiliteti dhe u rregullua thelbi i problemit. Në të njëjtën ditë, u krijua një prototip i një eksploiti që lejonte ekzekutimin e kodit në distancë në kushte laboratorike, duke përdorur ndërtimet e pakonfirmuara (në ndërtimet standarde ndodhte përfundimi i papritur). Më vonë, kompania Imperva dokumentoi një sulm ndaj ndërtimeve standarde të Node.js 24.22.0 në një mjedis Linux në sistemin ARM64.
Vulnerabiliteti çon në shkruajtjen jashtë tamponit për shkak të përpunimit të gabuar të gabimeve gjatë analizimit të blloqeve në rrjedhën e kompresuar. Funksioni DecodeBlockTypeAndLength() përveç kodit të gabimit ktheu vetëm vlerat true dhe false, gjë që nuk lejonte kodin thirrës të dallonte dëmtimin e rrjedhës nga një gjendje që kërkonte dërgimin e të dhënave të tjera në funksion. Në rast se në rrjedhë tregohej një tip blloku të kompresuar të gabuar, dekoduesi e perceptonte atë jo si një gabim, por si një gjendje të mungesës së të dhënave, që kërkonte lexim shtesë nga rrjedha. Por pasi tamponi i ndarë nuk ishte llogaritur për të dhënat e lexuara shtesë, ato u shkruan në një zonë përtej kufijve të tij, ku ndodhej gjendja e brendshme e dekoduesit.
Projektet e prekur nga vulnerabiliteti:
- Biblioteka standarde brotli, problemi shfaqet që nga versioni 1.0.3 dhe është eliminuar në përditësimet 1.0.10, 1.1.1 dhe 1.2.1. Vulnerabiliteti prek aplikacionet dhe bibliotekat që përdorin bibliotekën libbrotlidec.
- Platforma JavaScript Node.js, problemi e është zgjidhur në përditësimet 26.12.1, 24.22.1 dhe 22.23.4. Aplikacionet që përdorin metodën fetch() për kërkimin e përmbajtjes nga burime jashtë mund të jenë të goditura, e cila automatikisht dekodon përgjigjet HTTP me header «Content-Encoding: br». Po ashtu, vulnerabiliteti shfaqet kur thirren drejtpërdrejt metodat zlib.brotliDecompress*(), createBrotliDecompress() dhe brotli.decompress() për të shkarkuar përmbajtje jashtme ose kur pranojnë kërkesa HTTP me analiza përmes bibliotekave Express 5 dhe body-parser 2.x.
- Paketa Python brotli dhe brotlicffi (raportimi është ofruar në versionin 1.2.1) dhe projektet që i përdorin ato, përfshirë bibliotekat e njohura urllib3, aiohttp, httpx dhe Scrapy, të cilat dekodojnë përgjigjet me header «Content-Encoding: br» gjatë kontaktimit me burime web jashtme.
- ServerĂ«t HTTP, proxy-tĂ« HTTP, klientĂ«t HTTP dhe shfletuesit web qĂ« mbĂ«shtesin pĂ«rćimin Brotli («Accept-Encoding: br»). NĂ« Apache httpd ofrohet mod_brotli (i cili Ă«shtĂ« i çaktivizuar nga parazgjedhja). PĂ«r nginx Ă«shtĂ« nĂ« dispozicion moduli ngx_brotli (versioni i brotli nĂ« varĂ«si Ă«shtĂ« rritur nĂ« tĂ« fundit). NĂ« Chrome/Chromium dhe Firefox problemi Ă«shtĂ« tashmĂ« zgjidhur nĂ« njĂ« nga pĂ«rditĂ«simet e kaluara.server Envoy, vulnerabiliteti Ă«shtĂ« zgjidhur nĂ« daljet 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- .NET runtime do të thotë se përdorimi i metodave BrotliDecoder, BrotliStream dhe HttpClient në aplikacion. Vulnerabiliteti ende nuk është zgjidhur.
- Zgjatimi PHP brotli kur përdoret funksioni brotli_uncompress(). Korrektimi është në proces.
- Paketa Ruby brotli kur përdor metoda Brotli.inflate. Vulnerabiliteti ende nuk është zgjidhur.
- DB DuckDB gjatë importimit të skedarëve të compressuar Parquet. Korrektimi është në proces.
- DB ClickHouse. Korrektimi është në proces.
- DB YDB. Vulnerabiliteti ende nuk është zgjidhur.
- Apache Arrow gjatë importimit të skedarëve të compressuar Parquet. Korrektimi është në proces.
- libjxl (kur kompresimi i metadave në JPEG XL përdor Brotli).
Korrektimi është në proces. - Arkivat NanaZip, 7-Zip-zstd dhe p7zip gjatë shkarkimit të skedarëve br. Vulnerabiliteti nuk është zgjidhur.
- MuPDF. Vulnerabiliteti nuk është zgjidhur.
- Firmware UEFI bazuar nĂ« EDK II dhe UEFITool, tĂ« kompresuar duke pĂ«rdorur Brotli. Korrektimi Ă«shtĂ« nĂ« proces â EDK II dhe UEFITool.
- Platforma JavaScript Bun. Vulnerabiliteti është zgjidhur në versionin 1.4.4.
- Platforma për menaxhimin e mikroshërbimeve Istio. Vulnerabiliteti është zgjidhur në versionet 1.29.9, 1.30.6 dhe 1.31.2.
- curl dhe libcurl, vulnerabiliteti shfaqet kur ka në varësi një version të dobët libbrotlidec.
- Parserët e formateve të fontit Web Open Font (WOFF), në të cilin përdoret
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost dhe YTsaurus. Vulnerabiliteti është eliminuar në një nga përditësimet.
Burimi: opennet.ru
