آسیبپذیری بحرانی رمزگشای Brotli با امتیاز ۹.۲، Node.js، Python و curl را تهدید میکند

یک آسیبپذیری بحرانی در کتابخانه پرکاربرد فشردهسازی Brotli متعلق به گوگل، با شناسه CVE-2026-111497، میتواند به مهاجم اجازه دهد سرورها و کلاینتهایی که ترافیک HTTP فشردهشده با Brotli را پردازش میکنند، از کار بیندازد یا حتی کد دلخواه روی آنها اجرا کند. این نقص که ابتدا در ۲۱ اکتبر توسط تیم Node.js افشا شد و تا ۲۳ اکتبر مشخص شد دامنه آن بسیار گستردهتر است، امتیاز CVSS v4.0 برابر با ۹.۲ و سطح بحرانی دارد.
Brotli فرمت فشردهسازی پشت کدگذاری محتوایی br است که در سراسر وب مدرن برای کوچککردن حجم پاسخها و درخواستهای HTTP استفاده میشود. از آنجا که این کتابخانه در طیف گستردهای از نرمافزارها بهصورت همراه یا لینکشده استاتیک وجود دارد، یک باگ در رمزگشای آن به یک پروژه محدود نمیماند. شرکت امنیتی Aikido که روند گسترش این مشکل در اکوسیستمهای مختلف زبانهای برنامهنویسی را دنبال کرده، دریافته که این آسیبپذیری کتابخانه اصلی Brotli به زبان C (نسخههای ۱.۰.۳ تا ۱.۲.۰)، پکیجهای brotli و brotlicffi در PyPI، نسخه همراه Node.js و همچنین مصرفکنندگان پاییندستی از جمله کلاینتهای HTTP در Python یعنی urllib3، requests، httpx، aiohttp و Scrapy، بهعلاوه Bun، Envoy، Istio و نسخههایی از curl و libcurl که Brotli را بهصورت استاتیک لینک کردهاند را تحت تأثیر قرار میدهد. بر اساس تحلیل Aikido، Apache و Nginx بهطور پیشفرض تحت تأثیر قرار نمیگیرند.
این باگ یک خطای نوشتن خارج از محدوده حافظه (CWE-787) در رمزگشا است که با یک جریان فرمتنادرست Brotli فعال میشود. از آنجا که رمزگشایی بهصورت خودکار هر زمان که کلاینت یا سرور پشتیبانی از کدگذاری br را اعلام کند انجام میشود، این حمله در هر دو جهت کار میکند: یک کلاینت مخرب میتواند سروری را هدف بگیرد که بدنه درخواستها را رمزگشایی میکند، و یک سرور مخرب میتواند کلاینتی را هدف بگیرد که پاسخهای فشرده را میپذیرد، بدون نیاز به هیچ احراز هویتی. به گفته Aikido، پیامدهای تأییدشده از نشت حافظه و کرش گرفته تا اجرای کد دلخواه متغیر است، هرچند تا ۲۲ اکتبر هیچ سوءاستفاده واقعی از نسخه مربوط به Node.js مشاهده نشده بود.
نکته قابل توجه این است که به گزارشها، باگ اصلی مربوط به امنیت حافظه، در فوریه توسط مهندسان OpenAI در کد منبع Brotli پیدا و بهآرامی اصلاح شده بود، بدون آنکه در آن زمان کسی آن را بهعنوان یک مسئله امنیتی علامتگذاری کند؛ به این معنا که پنجره آسیبپذیر تقریباً هشت ماه پیش از این افشاگری که همه چیز را به هم مرتبط کرد، وجود داشته است.
برای برخی پروژههای تحت تأثیر وصلههایی منتشر شده، هرچند نه برای همه: Node.js نسخههای ۲۲.۲۳.۴، ۲۴.۲۲.۱ و ۲۶.۱۲.۱؛ Brotli نسخه ۱.۲.۱ (با بکپورت به ۱.۰.۱۰ و ۱.۱.۱ در شاخههای قدیمیتر)؛ brotlicffi نسخه ۱.۲.۱.۰؛ Bun نسخه ۱.۴.۴؛ Envoy نسخههای ۱.۴۰.۰، ۱.۳۹.۳، ۱.۳۸.۶ و ۱.۳۷.۸؛ و Istio نسخههای ۱.۲۹.۹، ۱.۳۰.۶ و ۱.۳۱.۲. Aikido هشدار میدهد که تا ۲۳ اکتبر، ابزارهای استاندارد اسکن آسیبپذیری از جمله pip-audit، Dependabot و Safety هنوز نسخههای آسیبپذیر پکیجهای PyPI را علامتگذاری نکرده بودند، به این معنا که تیمهایی که صرفاً به اسکن خودکار وابستگیها متکی هستند ممکن است هیچ هشداری دریافت نکنند. با توجه به اینکه تنها پکیج PyPI کتابخانه Brotli ماهانه حدود ۸۲.۸ میلیون بار دانلود میشود، دامنه عملی نصبهای وصلهنشده احتمالاً قابلتوجه است.
Aikido برای تیمهایی که امکان وصله فوری ندارند، توصیه میکند Brotli یا brotlicffi را در جایی که وابستگی اختیاری هستند حذف کنند و سرورها را طوری پیکربندی کنند که درخواستهای حاوی Content-Encoding: br را رد کنند. این شرکت هشدار میدهد که صرفاً حذف br از هدر خروجی Accept-Encoding کافی نیست، زیرا یک رمزگشای هنوز آسیبپذیر میتواند توسط هر طرفی که تصمیم بگیرد محموله فشردهشده با Brotli ارسال کند فعال شود، صرفنظر از آنچه درخواست شده بود.
در ابتدا توسط Aikido Security گزارش شده است. برای جزئیات بیشتر مقالهٔ اصلی را بخوانید.
مشاهدهٔ منبع اصلی