تکامل Node2Shell به HTTP2Shell؛ آسیبپذیری بحرانی Brotli ابعاد گستردهای پیدا کرد — Node2Shell evolves to HTTP2Shell, blast radius affects many HTTP libs and apps
خلاصه
یک آسیبپذیری خطرناک خارج از محدوده حافظه در کتابخانه فشردهسازی Brotli (با شناسه CVE-2026-111497) که ابتدا با نام Node2Shell شناخته میشد، اکنون مشخص شده که پلتفرمهای زیادی از جمله پایتون و کتابخانههای HTTP مختلف را درگیر کرده است. این آسیبپذیری به مهاجمان اجازه میدهد از طریق دادههای دستکاریشده، کد دلخواه اجرا کنند.
زمینه و تاریخچه آسیبپذیری
کتابخانه Brotli یک الگوریتم فشردهسازی بدون اتلاف داده است که توسط Google توسعه یافته و بهطور گسترده برای فشردهسازی محتوای وب (مانند HTML، CSS و JavaScript) در پروتکل HTTP استفاده میشود. اخیراً آسیبپذیری خطرناکی با شناسه CVE-2026-111497 در این کتابخانه کشف شده است که به آن آسیبپذیری نوشتن خارج از محدوده (Out-of-Bounds Write) میگویند. این نقص امنیتی که ابتدا در Node.js با عنوان Node2Shell سر و صدا به پا کرد، اکنون ابعاد وسیعتری به خود گرفته و از آن با عنوان HTTP2Shell یاد میشود.
این مشکل که امتیاز بحرانی CVSS v4.0 معادل ۹.۲ را دریافت کرده است، نسخههای ۱.۰.۳ تا ۱.۲.۰ از دیکدر Brotli گوگل را تحت تأثیر قرار میدهد. ریشه این مشکل توسط OpenAI در ماه فوریه شناسایی شده بود، اما در آن زمان به عنوان یک مسئله امنیتی جنایی یا بحرانی شناخته نشده بود.
جزئیات فنی دقیق
نقص اصلی در تابع DecodeBlockTypeAndLength() نهفته است که وظیفه مدیریت تغییرات بلوک و درختهای Huffman را بر عهده دارد. در نسخههای آسیبپذیر، این تابع یک مقدار بولی ساده برمیگرداند که در آن BROTLI_FALSE هم میتواند به معنای «جریان داده خراب است» باشد و هم «به ورودی بیشتری نیاز دارم».
بخشهای مختلف کدِ دیکدر این مقدار بازگشتی را نادیده میگیرند. یک مهاجم میتواند با ارسال یک جریان داده دستکاریشده، دیکدر را وادار کند که یا دادههای کامل را همچنان ناقص ببیند و به دنبال بایتهای بیشتر بگردد، یا با همان وضعیت قبلی به دیکد کردن ادامه دهد. این روند منجر به سرریز شدن بافر کوچک کاری و آسیب دیدن حافظه برنامه میشود که مهاجم از طریق آن میتواند کنترل اجرای برنامه را به دست بگیرد.
این مسئله هم در درخواستهای ورودی (Inbound) و هم در پاسخهای خروجی (Outbound) رخ میدهد. یعنی یک سرور مخرب میتواند کلاینتِ آسیبپذیر را تسخیر کند و برعکس، یک کلاینت یا درخواستدهنده مخرب میتواند سرور را از کار بیندازد.
چرا برای مهندسان نرمافزار مهم است؟
دامنه تأثیر این آسیبپذیری بسیار فراتر از Node.js است.生态 پایتون نیز به شدت تحت تأثیر قرار گرفته است؛ پکیجهای Brotli و brotlicffi در PyPI نسخههای آسیبپذیر را کامپایل میکنند. کلاینتهای محبوب HTTP مانند requests، httpx، aiohttp و ابزارهایی مانند Scrapy بهطور خودکار این پکیجها را بارگذاری کرده و هدر Accept-Encoding: br را ارسال میکنند. این یعنی حتی اگر کد شما به طور مستقیم از Brotli استفاده نکند، وجود آن به عنوان یک وابستگی گذرا (Transitive Dependency) شما را در معرض خطر قرار میدهد.
نکته نگرانکننده این است که ابزارهای اسکن آسیبپذیری متداول مانند Dependabot، pip-audit یا Safety ممکن است تا زمان بهروزرسانی پایگاههای داده مشاوره امنیتی، این نسخه را به عنوان آسیبپذیری پرچم نکنند.
نحوه رفع و اصلاح آسیبپذیری
برای ایمنسازی سیستمها، باید کتابخانه Brotli یا رانتایمهای آسیبپذیری را به نسخههای اصلاحشده ارتقا دهید:
- Node.js: ارتقا به نسخههای اصلاحشده در شاخههای پشتیبانیشده.
- پکیجهای پایتون: ارتقا پکیج Brotli به نسخه
1.2.1یا بالاتر وbrotlicffiبه نسخه1.2.1.0یا بالاتر. - زیرساختها و ابزارها: بهروزرسانی ابزارهایی نظیر
Bun،curl،EnvoyوIstioبه نسخههای امن.
اگر در حال حاضر امکان ارتقا ندارید، میتوانید کارهای زیر را به عنوان راهحل موقت (Workaround) انجام دهید:
- در برنامههای پایتون، در صورت امکان، پکیجهای Brotli و brotlicffi را کاملاً حذف کنید.
- در پروکسی معکوس یا لود بالانسر خود، درخواستهایی را که هدر
Content-Encodingآنها شاملbrاست فیلتر و رد کنید. - در کلاینتهای خروجی، مقدار
brرا از هدرAccept-Encodingحذف کنید.
واکنش جامعه در هکرنیوز
کاربران هکرنیوز به نامگذاری این آسیبپذیری با اصطلاحات دهانپُرکنی مثل HTTP2Shell انتقاد کرده و آن را عنوانی بسیار وسیع و مبهم دانستند که ماهیت فنی دقیق مشکل را به خوبی توصیف نمیکند. با این حال، جامعه مهندسی بر اهمیت و حجم بالای کار لازم برای وصلهکردن پکیجهای مختلف در اکوسیستمهای گوناگون تأکید داشتند.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل