یک آسیبپذیری (CVE-2026-111497، با نامهای رمز Broccoli2Shell و HTTP2Shell) در کتابخانهای که حاوی پیادهسازی مرجع رمزگشای فشردهسازی دادههای Brotli است، شناسایی شده است. این آسیبپذیری منجر به سرریز بافر هنگام پردازش دادههای فشردهشدهی دستکاریشدهی خاص میشود. به گفتهی گوگل، این آسیبپذیری میتواند برای اجرای کد از راه دور هنگام حمله به پروژههایی که از پیادهسازی رسمی رمزگشای Brotli استفاده میکنند، مورد استفاده قرار گیرد. پروژههای تحت تأثیر شامل Node.js، Bun، Envoy، Istio، مرورگرهای وب، سرورهای پروکسی، کلاینتهای HTTP، سرورهای HTTP، بایگانیکنندهها، سرورهای پروکسی، میانافزار UEFI، نمایشگرهای JPEG XL، کتابخانههای رمزگشایی محتوا برای پایتون، روبی، جاوا، PHP و .NET و وابستگیهای مرتبط با آنها هستند.
این مشکل در فوریه امسال توسط OpenAI کشف و با حذف جریانهای نامعتبر در طول رمزگشایی، در پایگاه کد Brotli مسدود شد. در ۲۲ اکتبر، نسخههای پچ Brotli 1.0.10، ۱.۱.۱ و ۱.۲.۱ منتشر شدند که صراحتاً رفع مشکل و رفع مشکل اساسی را اعلام میکردند. در همان روز، یک نمونه اولیه از اکسپلویت ایجاد شد که امکان اجرای کد از راه دور را در شرایط آزمایشگاهی با استفاده از نسخههای غیر استاندارد (نسخههای استاندارد از کار میافتادند) فراهم میکرد. Imperva بعداً حملهای را بر روی نسخههای استاندارد Node.js 24.22.0 شناسایی کرد. Linux- محیط روی سیستم ARM64.
این آسیبپذیری منجر به نوشتن خارج از محدوده بافر به دلیل مدیریت نادرست خطا در هنگام تجزیه بلوک در یک جریان فشرده میشود. تابع DecodeBlockTypeAndLength() فقط مقادیر درست و غلط را به جای کد خطا برمیگرداند و مانع از تشخیص بین خرابی جریان و شرایطی میشود که نیاز به ارسال دادههای اضافی به تابع دارد. اگر نوع بلوک داده فشرده نادرستی در جریان مشخص شده باشد، رمزگشا آن را نه به عنوان خطا، بلکه به عنوان یک شرایط خارج از داده که نیاز به خواندن اضافی از جریان دارد، تفسیر میکند. با این حال، از آنجایی که بافر اختصاص داده شده برای گنجاندن دادههای اضافی خوانده شده طراحی نشده بود، دادهها در ناحیهای خارج از بافر که وضعیت داخلی رمزگشا را ذخیره میکرد، نوشته میشدند.
پروژههای آسیبدیده:
- کتابخانه مرجع Brotli، مشکلی که از زمان انتشار نسخه ۱.۰.۳ وجود داشته و در بهروزرسانیهای ۱.۰.۱۰، ۱.۱.۱ و ۱.۲.۱ برطرف شده است، برنامهها و کتابخانههایی را که از کتابخانه libbrotlidec استفاده میکنند، تحت تأثیر قرار میدهد.
- پلتفرم جاوا اسکریپت Node.js در بهروزرسانیهای ۲۶.۱۲.۱، ۲۴.۲۲.۱ و ۲۲.۲۳.۴ وصله شد. برنامههایی که از متد fetch() برای درخواست محتوای شخص ثالث استفاده میکنند، که به طور خودکار پاسخهای HTTP را با هدر "Content-Encoding: br" رمزگشایی میکند، میتوانند آسیبپذیر باشند. این آسیبپذیری همچنین هنگام فراخوانی مستقیم متدهای zlib.brotliDecompress*()، createBrotliDecompress() و brotli.decompress() برای رمزگشایی محتوای شخص ثالث یا هنگام دریافت درخواستهای HTTP تجزیهشده از طریق کتابخانههای Express 5 و body-parser 2.x خود را نشان میدهد.
- بستههای پایتون brotli و brotlicffi (اصلاحیه در نسخه ۱.۲.۱ پیشنهاد شده است) و پروژههایی که از آنها استفاده میکنند، از جمله کتابخانههای محبوب urllib3، aiohttp، httpx و Scrapy، که هنگام دسترسی به منابع وب خارجی، پاسخها را با هدر "Content-Encoding: br" رمزگشایی میکنند.
- سرورهای HTTP، پروکسیهای HTTP، کلاینتهای HTTP و مرورگرهای وب که از فشردهسازی Brotli پشتیبانی میکنند ("Accept-Encoding: br"). آپاچی httpd با mod_brotli (که به طور پیشفرض غیرفعال است) ارائه میشود. یک ماژول شخص ثالث، ngx_brotli، برای nginx در دسترس است (نسخه brotli در وابستگیها به آخرین نسخه بهروزرسانی شده است). در کروم/کرومیوم و فایرفاکس، این مشکل در بهروزرسانی قبلی برطرف شده است. در proxy-سرور آسیبپذیری Envoy در نسخههای ۱.۴۰.۰، ۱.۳۹.۳، ۱.۳۸.۶، ۱.۳۷.۸، ۱.۳۶.۱۲ برطرف شده است.
- زمان اجرای .NET هنگام استفاده از متدهای BrotliDecoder، BrotliStream و HttpClient در یک برنامه. این آسیبپذیری هنوز وصله نشده است.
- افزونهی brotli در PHP هنگام استفاده از تابع brotli_uncompress(). در حال انجام است تا مشکل برطرف شود.
- بستهی روبی Brotli در برابر سوءاستفادههایی که از روش Brotli.inflate استفاده میکنند، آسیبپذیر بود. این آسیبپذیری هنوز وصله نشده است.
- DuckDB هنگام وارد کردن فایلهای فشرده پارکت. رفع مشکل در حال انجام است.
- پایگاه داده ClickHouse. در حال رفع مشکل.
- سیستم مدیریت پایگاه داده YDB. این آسیبپذیری هنوز برطرف نشده است.
- آپاچی ارو هنگام وارد کردن فایلهای فشرده پارکت. رفع مشکل در حال انجام است.
- libjxl (از Brotli برای فشردهسازی فراداده JPEG XL استفاده میکند).
اصلاحیه در حال آمادهسازی است. - بایگانیکنندههای NanaZip، 7-Zip-zstd و p7zip هنگام باز کردن فایلهای .br آسیبپذیر هستند. این آسیبپذیری همچنان پابرجاست.
- MuPDF. این آسیبپذیری هنوز وصله نشده است.
- فریمور UEFI مبتنی بر EDK II و UEFITool، فشرده شده با Brotli. یک اصلاحیه برای EDK II و UEFITool در حال آمادهسازی است.
- چارچوب جاوا اسکریپت Bun. این آسیبپذیری در نسخه ۱.۴.۴ برطرف شده است.
- Istio، یک پلتفرم مدیریت میکروسرویسها. این آسیبپذیری در نسخههای ۱.۲۹.۹، ۱.۳۰.۶ و ۱.۳۱.۲ برطرف شده است.
- curl و libcurl، این آسیبپذیری زمانی خود را نشان میدهد که یک نسخه آسیبپذیر از libbrotlidec در وابستگیها وجود داشته باشد.
- تجزیهکنندههای فرمت فونت وب اوپن فونت (WOFF) که از
بروتلی - Brotli4j، SumatraPDF، Ghostscript، CatBoost و YTsaurus. این آسیبپذیری در یک بهروزرسانی برطرف شد.
منبع: opennet.ru
