Brotli տվյալների սեղմման դեկոդերի հղման իրականացումը պարունակող գրադարանում հայտնաբերվել է խոցելիություն (CVE-2026-111497, կոդային անուններով՝ Broccoli2Shell և HTTP2Shell): Այս խոցելիությունը հանգեցնում է բուֆերի արտահոսքի՝ հատուկ մշակված սեղմված տվյալները մշակելիս: Google-ի տվյալներով՝ այս խոցելիությունը կարող է օգտագործվել հեռակա կոդի կատարման համար՝ Brotli դեկոդերի պաշտոնական իրականացումն օգտագործող նախագծերի վրա հարձակվելիս: Տուժած նախագծերի թվում են Node.js, Bun, Envoy, Istio, վեբ զննարկիչներ, պրոքսի սերվերներ, HTTP հաճախորդներ, HTTP սերվերներ, արխիվացնողներ, պրոքսի սերվերներ, UEFI ներկառուցված ծրագիր, JPEG XL դիտողներ, Python, Ruby, Java, PHP և .NET բովանդակության վերծանման գրադարաններ և դրանց հետ կապված կախվածություններ:
Խնդիրը հայտնաբերվել է 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 գրադարանն օգտագործող ծրագրերի և գրադարանների վրա։
- Node.js JavaScript հարթակը թարմացվել է 26.12.1, 24.22.1 և 22.23.4 թարմացումներում: Ծրագրերը, որոնք օգտագործում են fetch() մեթոդը՝ երրորդ կողմի բովանդակություն հարցնելու համար, որն ավտոմատ կերպով վերծանում է HTTP պատասխանները «Content-Encoding: br» վերնագրով, կարող են խոցելի լինել: Խոցելիությունը դրսևորվում է նաև zlib.brotliDecompress*(), createBrotliDecompress() և brotli.decompress() մեթոդները անմիջապես կանչելիս՝ երրորդ կողմի բովանդակությունը վերծանելու համար, կամ Express 5 և body-parser 2.x գրադարանների միջոցով վերլուծված HTTP հարցումներ ստանալիս:
- Python-ի brotli և brotlicffi փաթեթները (առաջարկվել է 1.2.1 տարբերակում) և դրանք օգտագործող նախագծերը, այդ թվում՝ urllib3, aiohttp, httpx և Scrapy հայտնի գրադարանները, որոնք արտաքին վեբ ռեսուրսներին մուտք գործելիս վերծանում են պատասխանները «Content-Encoding: br» վերնագրով։
- HTTP սերվերներ, HTTP պրոքսիներ, HTTP հաճախորդներ և վեբ զննարկիչներ, որոնք աջակցում են Brotli սեղմմանը («Ընդունել կոդավորումը. br»): Apache httpd-ն մատակարարվում է mod_brotli-ով (անջատված է ըստ լռելյայնի): Nginx-ի համար հասանելի է երրորդ կողմի մոդուլ՝ ngx_brotli-ն (կախվածություններում brotli տարբերակը թարմացվել է վերջին տարբերակին): Chrome/Chromium-ում և Firefox-ում խնդիրն արդեն լուծվել է նախորդ թարմացմամբ: Proxy-ումսերվեր Envoy խոցելիությունը շտկվել է 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 թողարկումներում։
- .NET գործարկման ժամանակ՝ BrotliDecoder, BrotliStream և HttpClient մեթոդները ծրագրում օգտագործելիս։ Խոցելիությունը դեռևս չի շտկվել։
- PHP brotli ընդլայնումը brotli_uncompress() ֆունկցիան օգտագործելիս սխալ է։ Ուղղումը ընթացքի մեջ է։
- Brotli Ruby փաթեթը խոցելի էր Brotli.inflate մեթոդն օգտագործող շահագործման նկատմամբ։ Խոցելիությունը դեռևս թարմացված չէ։
- DuckDB-ն սխալ էր սեղմված Parquet ֆայլեր ներմուծելիս։ Ուղղումը ընթացքի մեջ է։
- ClickHouse DBMS: Ուղղումը ընթացքի մեջ է:
- YDB DBMS: Խոցելիությունը դեռևս չի շտկվել:
- Apache Arrow-ը սխալ էր սեղմված Parquet ֆայլեր ներմուծելիս։ Ուղղումը ընթացքի մեջ է։
- libjxl (օգտագործում է Brotli-ն JPEG XL մետատվյալների սեղմման համար):
Ուղղում նախապատրաստման փուլում։ - NanaZip, 7-Zip-zstd և p7zip արխիվացնողները խոցելի են .br ֆայլերը բացելիս։ Խոցելիությունը մնում է։
- MuPDF: Խոցելիությունը չի շտկվել։
- UEFI ներկառուցված ծրագիր, որը հիմնված է EDK II-ի և UEFITool-ի վրա, սեղմված է Brotli-ով: EDK II-ի և UEFITool-ի համար պատրաստվում է ուղղում:
- Bun JavaScript framework: Խոցելիությունը շտկվել է 1.4.4 տարբերակում:
- Istio, միկրոսպասարկումների կառավարման հարթակ։ Խոցելիությունը շտկվել է 1.29.9, 1.30.6 և 1.31.2 տարբերակներում։
- curl-ում և libcurl-ում խոցելիությունը դրսևորվում է, երբ կախվածություններում առկա է libbrotlidec-ի խոցելի տարբերակը։
- Վեբ Բաց Տառատեսակի (WOFF) տառատեսակի ձևաչափի վերլուծիչներ, որոնք օգտագործում են
Բրոտլի։ - Brotli4j, SumatraPDF, Ghostscript, CatBoost և YTsaurus: Խոցելիությունը շտկվել է թարմացման մեջ:
Source: opennet.ru
