انتشار نسخههای امنیتی Node.js با رفع ۱۰ آسیبپذیری از جمله نقص Brotli
حدود ۴ دقیقه مطالعه
پروژهی Node.js روز ۲۱ اکتبر ۲۰۲۶ نسخههای امنیتی 26.12.1، 24.22.1 و 22.23.4 را منتشر کرد و ۱۰ آسیبپذیری را رفع کرد. طبق اطلاعیهی رسمی، بالاترین شدت در هر سه شاخه High است. چهار مورد High، سه مورد Medium و سه مورد Low هستند. مهمترین آنها یک نوشتن خارج از محدوده (out-of-bounds write) در دیکودر Brotli است که طبق اطلاعیه میتواند به اجرای کد از راه دور برسد.
چه آسیبپذیریهایی رفع شد؟
چهار مورد High:
- مورد Brotli با شناسهی CVE-2026-111497 در هر سه شاخه (26.x، 24.x و 22.x) وجود دارد. دیکودر Brotli خارج از حافظهی تخصیصدادهشده مینویسد و اطلاعیه میگوید این باگ میتواند به اجرای کد از راه دور منجر شود.
- مورد CVE-2026-105482 در هر سه شاخه است: dns.resolve اگر در نام ورودی کاراکتر NUL باشد، نام را از همانجا میبرد. نتیجه این است که نام حلشده با نامی که بررسی شده میتواند فرق کند.
- مورد CVE-2026-105483 فقط شاخههای 26.x و 24.x را درگیر میکند: اگر آدرس IP با ارقام تمامعرض (fullwidth) نوشته شود، بررسی hostname در گواهی TLS دور زده میشود.
- مورد CVE-2026-106069 در هر سه شاخه است: وقتی hostname بهصورت شل به یک آدرس IP تبدیل شود، بررسی hostname گواهی TLS دور زده میشود.
سه مورد Medium، هر سه در هر سه شاخه:
- مورد CVE-2026-105481: یک keep-alive socket پاسخی را میپذیرد که پیش از ارسال درخواست نوشته شده بود.
- مورد CVE-2026-106072: برای hostname هایی با نوشتار غیراستاندارد IPv4، گواهی با DNS SAN میتواند یک endpoint از نوع IP را احراز هویت کند.
- مورد CVE-2026-106074: کش entropy مربوط به crypto.randomUUID و randomInt میتواند داخل snapshot استارتآپ یا برنامهی تکفایلی (SEA) ذخیره شود و همهی پردازههایی که از آن بالا میآیند مقدارهای تکراری بگیرند. طبق گزارش XenoSpectrum، این فقط به snapshot ها و بهخصوص SEA هایی که با useSnapshot ساخته شدهاند مربوط است و به این معنی نیست که هر پردازهی Node.js مقدار یکسان میدهد.
سه مورد Low:
- مورد CVE-2026-106073 در هر سه شاخه است: دور زدن Permission Model با fs.realpathSync.
- مورد CVE-2026-106070 فقط شاخهی 26.x را درگیر میکند: ZipFile بعد از شکست اعتبارسنجی هدر، بایتهای ابتدایی کنترلشدهی مهاجم را برمیگرداند.
- مورد CVE-2026-106071 فقط شاخهی 26.x را درگیر میکند: جستوجوی wildcard در radix دسترسی فایلسیستم را بیش از حد مجاز میدهد.
سه شاخه علاوه بر این، وابستگیها را هم بهروز کردهاند: c-ares، Undici و CA certificate (بهخاطر مشکل eMudhra Intermediate CA) در هر سه شاخه، OpenSSL در 24.x و 22.x، و SQLite فقط در 22.x.
چه کار کنیم؟
اطلاعیه راهحل موقت یا workaround ارائه نمیکند و فقط بهروزرسانی به نسخهی اصلاحشدهی شاخهی خودتان را توصیه میکند:
26.x → 26.12.1
24.x → 24.22.1
22.x → 22.23.4
نسخهی فعلی را اینطور چک کنید:
node --version
اگر برنامهی SEA دارید که با snapshot ساخته شده، طبق گزارش XenoSpectrum باید آن را با نسخهی اصلاحشده دوباره بسازید و نسخهی Node.js که دادهی آمادهسازی را تولید میکند باید با نسخهی embed شده در فایل اجرایی یکی باشد. نسخههای End-of-Life هم از این آسیبپذیریها در امان نیستند و طبق اطلاعیه باید به یک شاخهی پشتیبانیشده ارتقا پیدا کنند.
نکتههایی که اطلاعیه نگفته
اطلاعیه نمیگوید این باگها در عمل مورد سوءاستفاده قرار گرفتهاند یا نه، و برای مورد Brotli هم شرایط لازم برای حمله (مثلاً مسیر ورود داده به دیکودر) را توضیح نمیدهد. پس نباید از «اجرای کد از راه دور» نتیجه گرفت که هر سرویس Node.js قابلبهرهبرداری است. دربارهی مشکلهای TLS هم طبق XenoSpectrum ریسک به نحوهی مشخص کردن مقصد و منطق بررسی سفارشی برنامه بستگی دارد. غیرفعال کردن rejectUnauthorized هم حفاظت را تضعیف میکند. Permission Model هم طبق مستندات برای محافظت از کد قابلاعتماد در برابر دسترسی ناخواسته است و برای اجرای کد غیرقابلاعتماد ضمانت ایمنی نمیدهد.
منابع:
