Brotli-ի դեկոդերի կրիտիկական խոցելիությունը ազդում է Node.JS-ի, Bun-ի, բրաուզերների, HTTP հաճախորդների և այլ նախագծերի վրա։

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

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster