Brotli ma'lumotlarni siqish dekoderining ma'lumotnoma implementatsiyasini o'z ichiga olgan kutubxonada zaiflik (CVE-2026-111497, Broccoli2Shell va HTTP2Shell kod nomlari) aniqlandi. Ushbu zaiflik maxsus tayyorlangan siqilgan ma'lumotlarni qayta ishlashda buferning toshib ketishiga olib keladi. Google ma'lumotlariga ko'ra, ushbu zaiflik rasmiy Brotli dekoder implementatsiyasidan foydalanadigan loyihalarga hujum qilishda kodni masofadan bajarish uchun ishlatilishi mumkin. Ta'sirlangan loyihalar orasida Node.js, Bun, Envoy, Istio, veb-brauzerlar, proksi-serverlar, HTTP mijozlari, HTTP serverlari, arxivlovchilar, proksi-serverlar, UEFI proshivkasi, JPEG XL tomoshabinlari, Python, Ruby, Java, PHP va .NET uchun kontentni dekodlash kutubxonalari va ular bilan bog'liq bog'liqliklar mavjud.
Muammo shu yilning fevral oyida OpenAI tomonidan aniqlangan va dekodlash paytida yaroqsiz oqimlarni olib tashlash orqali Brotli kod bazasida bloklangan. 22-oktabr kuni Brotli 1.0.10, 1.1.1 va 1.2.1 patch versiyalari e'lon qilindi, ularda tuzatish aniq e'lon qilindi va asosiy muammo hal qilindi. Shu kuni standart bo'lmagan tuzilmalardan foydalangan holda laboratoriya sharoitida kodni masofadan bajarishga imkon beruvchi prototip ekspluatatsiyasi yaratildi (standart tuzilmalar ishdan chiqishi mumkin edi). Keyinchalik Imperva standart Node.js 24.22.0 tuzilmalariga hujumni aniqladi. Linux- ARM64 tizimidagi muhit.
Siqilgan oqimda bloklarni tahlil qilish paytida noto'g'ri xato ishlov berilishi tufayli zaiflik chegaradan tashqaridagi bufer yozuviga olib keladi. DecodeBlockTypeAndLength() funktsiyasi xato kodi o'rniga faqat true va false qiymatlarini qaytardi, bu esa chaqiruvchiga oqim buzilishi va funksiyaga qo'shimcha ma'lumotlarni uzatishni talab qiladigan holat o'rtasidagi farqni farqlashga to'sqinlik qildi. Agar oqimda noto'g'ri siqilgan ma'lumotlar blok turi ko'rsatilgan bo'lsa, dekoder buni xato sifatida emas, balki oqimdan qo'shimcha o'qishni talab qiladigan ma'lumotlardan tashqari holat sifatida talqin qildi. Biroq, ajratilgan bufer qo'shimcha ma'lumotlarni o'qish uchun mo'ljallanmaganligi sababli, ma'lumotlar dekoderning ichki holatini saqlaydigan buferdan tashqaridagi maydonga yozildi.
Ta'sirlangan loyihalar:
- Brotli ma'lumotnoma kutubxonasi, 1.0.3 versiyasidan beri mavjud bo'lgan va 1.0.10, 1.1.1 va 1.2.1 yangilanishlarida tuzatilgan muammo, libbrotlidec kutubxonasidan foydalanadigan ilovalar va kutubxonalarga ta'sir qiladi.
- Node.js JavaScript platformasi 26.12.1, 24.22.1 va 22.23.4 yangilanishlarida yamoqlangan. Uchinchi tomon kontentini so'rash uchun fetch() usulidan foydalanadigan va HTTP javoblarini "Content-Encoding: br" sarlavhasi bilan avtomatik ravishda dekodlaydigan ilovalar zaif bo'lishi mumkin. Zaiflik, shuningdek, uchinchi tomon kontentini dekompressiyalash uchun zlib.brotliDecompress*(), createBrotliDecompress() va brotli.decompress() usullarini to'g'ridan-to'g'ri chaqirishda yoki Express 5 va body-parser 2.x kutubxonalari orqali tahlil qilingan HTTP so'rovlarini qabul qilishda ham o'zini namoyon qiladi.
- Python brotli va brotlicffi paketlarini (tuzatish 1.2.1 versiyasida taklif qilingan) va ulardan foydalanadigan loyihalarni, jumladan, tashqi veb-resurslarga kirishda "Content-Encoding: br" sarlavhasi bilan javoblarni dekodlaydigan mashhur urllib3, aiohttp, httpx va Scrapy kutubxonalarini o'z ichiga oladi.
- HTTP serverlari, HTTP proksi-serverlari, HTTP mijozlari va Brotli siqishni qo'llab-quvvatlaydigan veb-brauzerlar ("Qabul qilish-kodlash: br"). Apache httpd mod_brotli bilan birga keladi (sukut bo'yicha o'chirilgan). Nginx uchun uchinchi tomon moduli, ngx_brotli, mavjud (bog'liqliklardagi brotli versiyasi eng so'nggi versiyaga yangilandi). Chrome/Chromium va Firefox-da muammo avvalgi yangilanishda allaqachon hal qilingan. Proksi-daserver Envoy zaifligi 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 versiyalarida tuzatildi.
- Ilovada BrotliDecoder, BrotliStream va HttpClient usullaridan foydalanilganda .NET ish vaqti. Zaiflik hali tuzatilmagan.
- brotli_uncompress() funksiyasidan foydalanilganda PHP brotli kengaytmasi. Tuzatish jarayonida.
- Ruby paketi Brotli Brotli.inflate usuli yordamida eksploitlarga qarshi zaif edi. Zaiflik hali tuzatilmagan.
- Siqilgan Parket fayllarini import qilishda DuckDB xatosi. Tuzatish jarayonida.
- ClickHouse ma'lumotlar bazasi ma'lumotlar bazasi. Tuzatish jarayonida.
- YDB DBMS. Zaiflik hali tuzatilmagan.
- Siqilgan Parket fayllarini import qilishda Apache strelkasi. Tuzatish jarayonida.
- libjxl (JPEG XL metama'lumotlarini siqish uchun Brotli dan foydalanadi).
Tayyorgarlik jarayonida tuzatish. - NanaZip, 7-Zip-zstd va p7zip arxivlovchilari .br fayllarini ochishda zaiflikka ega. Zaiflik saqlanib qolmoqda.
- MuPDF. Zaiflik tuzatilmadi.
- Brotli bilan siqilgan EDK II va UEFITool asosidagi UEFI dasturiy ta'minoti. EDK II va UEFITool uchun tuzatish tayyorlanmoqda.
- Bun JavaScript freymvorki. Zaiflik 1.4.4 versiyasida tuzatildi.
- Istio, mikroservislarni boshqarish platformasi. Zaiflik 1.29.9, 1.30.6 va 1.31.2 versiyalarida tuzatildi.
- curl va libcurl da, zaiflik libbrotlidec ning zaif versiyasi bog'liqliklarda mavjud bo'lganda o'zini namoyon qiladi.
- Veb ochiq shrift (WOFF) shrift formati uchun tahlil qiluvchilar, foydalanadi
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost va YTsaurus. Zaiflik yangilanishda tuzatildi.
Manba: opennet.ru
