محققان امنیتی در شرکت Imperva اکسپلویت جدیدی تحت عنوان Node2Shell را معرفی کردهاند که میتواند منجر به اجرای کد از راه دور (RCE) در نسخههای رسمی Node.js شود. این حمله با استفاده از دادههای دستکاریشده در فرمت فشردهسازی Brotli انجام میشود.
این آسیبپذیری (CVE-2026-111497) در رمزگشای (decoder) Brotli که به صورت داخلی در Node.js گنجانده شده است، وجود دارد. محققان موفق شدند در نسخه 24.22.0 برای لینوکس (arm64) بدون نیاز به دیباگر یا نسخههای سفارشی، کد خود را اجرا کنند. این نقص در خطوط نسخهبندی 22.x، 24.x و 26.x وجود دارد و کاربران باید بلافاصله سیستمهای خود را بهروزرسانی کنند.
مکانیسم حمله و بردارها
علت اصلی این آسیبپذیری، نحوه مدیریت یک وضعیت غیرممکن در جریان (stream) دادههای Brotli توسط رمزگشا است. این نقص باعث میشود که رمزگشا در یک وضعیت نامعتبر باقی بماند و در نهایت منجر به یک نوشتن خارج از محدوده (out-of-bounds write) در حافظه شود.
حمله میتواند از دو مسیر اصلی انجام شود:
- در پاسخهای HTTP: زمانی که اپلیکیشن از طریق تابع داخلی
fetch()یک پاسخ فشردهشده با Brotli را دریافت میکند. - در درخواستهای HTTP: زمانی که میانافزارها (middleware) مانند
express.json()یا سایر پارسرها در فریمورک Express 5، بدنه درخواست را رمزگشایی میکنند.
راهکارهای مقابله و اصلاح
تیم Node.js با اعمال یک وصله (patch) در کتابخانه Brotli، این مشکل را در نسخههای جدید برطرف کرده است. راهکار اصلی، مهاجرت به نسخههای اصلاحشده (مانند 24.22.1 و بالاتر) است. توجه داشته باشید که نسخههای قدیمیتر که به پایان عمر خود رسیدهاند (End-of-life مانند 20.x و قبل از آن)، دیگر وصلهای دریافت نخواهند کرد و باید حتماً به نسخههای پشتیبانیشده مهاجرت کنند.
اگر بهروزرسانی فوری امکانپذیر نیست، استفاده از قوانین WAF (دیوار آتش اپلیکیشنهای وب) برای محدود کردن ترافیک Brotli غیرقابل اعتماد میتواند تا حدی ریسک را کاهش دهد، اما تنها بهروزرسانی نرمافزار، راهکار قطعی برای حذف این آسیبپذیری است.