پژوهشگران Endor Labs یک آسیب‌پذیری بحرانی در کتابخانهٔ محبوب isolated-vm گزارش کرده‌اند که به کدی که داخل سندباکس اجرا می‌شود اجازه می‌دهد از مرز ایزوله‌شده فرار کند، حافظهٔ فرایند میزبان را خراب کند و حتی جریان کنترل میزبان را ربوده و احتمال اجرای کد از راه دور را فراهم آورد.

کدام نسخه‌ها آسیب‌پذیرند و نسخهٔ اصلاح‌شده کدام است

آسیب‌پذیری با شناسهٔ GHSA-864f-rcv7-6rh4 شامل تمامی نسخه‌های isolated-vm تا و از جمله 7.0.0 می‌شود. توسعه‌دهندگان پچ‌های رفع را در نسخه‌های 6.2.0 و 7.0.1 منتشر کرده‌اند؛ به‌روزرسانی به این نسخه‌ها یا بالاتر فوراً توصیه می‌شود.

isolated-vm چیست و اهمیت این نقص

isolated-vm کتابخانه‌ای برای Node.js است که اجرای کد جاوااسکریپت غیرقابل‌اعتماد را داخل یک V8 Isolate ممکن می‌سازد. هر Isolate نمونهٔ مستقلی از موتور Google V8 دارد تا محیط‌های سندباکس‌شده بتوانند جدا از هم اجرا شوند. بستهٔ npm این پروژه اخیراً نزدیک به 1,000,000 دانلود داشته و در پروژه‌هایی که نیاز به اجرای کد میهمان دارند به‌طور گسترده استفاده می‌شود. مخزن رسمی در GitHub در دسترس است.

تشریح فنی نقص: ExternalCopy و transferList

برای انتقال داده میان میزبان و Isolate، isolated-vm کلاسی به‌نام ExternalCopy ارائه می‌دهد که اشیاء را سریال‌سازی و منتقل می‌کند. پژوهشگران نشان دادند که در مدیریت گزینهٔ transferList توسط ExternalCopy یک اشتباه نوعی (type confusion) وجود دارد. این خطای لایهٔ بایندینگ C++ اجازه می‌دهد تا کدی در سندباکس به حافظهٔ میزبان دسترسی‌ناشایست پیدا کند و آن را خراب کند.

نقطهٔ آغاز مورد نیاز برای بهره‌جویی ساده است: یک ivm.Reference؛ سپس محققان نشان داده‌اند می‌توان از یک کرش کنترل‌شده با آدرس ثابت فراتر رفت و به ربودن جریان کنترل میزبان دست یافت تا فرار کامل از سندباکس رخ دهد.

پیامدهای فنی و عملی

  • حداقل پیامد مشاهده‌شده: کرش قابل‌اعتماد پروسهٔ میزبان با SIGSEGV (انکار سرویس) که می‌تواند توسط هر میهمانی که یک ivm.Reference دارد راه‌اندازی شود.
  • حداکثر پیامد مشاهده‌شده: ربودن جریان کنترل میزبان و احتمال اجرای کد از راه دور (RCE) داخل فرایند میزبان.
  • نکتهٔ فنی مهم: مرز Isolate در موتور V8 پابرجاست؛ شکست در لایهٔ بایندینگ C++ رخ داده که مقادیر را بین میزبان و میهمان منتقل می‌کند.

اقدامات فوری برای کاهش ریسک

توصیه‌های زیر برای توسعه‌دهندگان و مدیران امنیتی اجرا شود:

  • بستهٔ isolated-vm را فوراً به نسخهٔ 6.2.0 یا 7.0.1 (یا بالاتر) به‌روزرسانی کنید.
  • با ابزارهایی مانند npm audit و بررسی فایل‌های قفل، زنجیرهٔ وابستگی‌ها را کنترل کنید تا نسخه‌های آسیب‌پذیر به‌صورت غیرمستقیم وارد پروژه نشوند.
  • در صورت عدم امکان به‌روزرسانی فوری، استفاده از ivm.Reference را محدود یا حذف کنید و انتقال‌های غیرضروری در transferList را متوقف نمایید.
  • اجرای کد ناشناس را در فرایندهای جدا یا کانتینرهای ایزوله‌تر قرار دهید تا دامنهٔ تأثیر در صورت رخداد کاهش یابد.
  • نقاط اتصال بین میزبان و محیط‌های ایزوله (بایندینگ‌های C++) را بازبینی کنید و تست‌های امنیتی مخصوص حافظه (مانند fuzzing و ASAN) را اجرا نمایید.

پرده‌برداری مسئولانه و منابع بیشتر

Endor Labs جزئیات کامل بهره‌جویی را منتشر نکرده تا احتمال سوءاستفاده کاهش یابد. نگهدارندهٔ پروژه نیز دربارهٔ مرزهای آزمایش‌شدهٔ اثرات هشدار داده است. گزارش و تحلیل فنی را می‌توان در وب‌سایت Endor Labs یا خلاصه‌ای که با The Hacker News به اشتراک گذاشته شده، مطالعه کرد.

چشم‌انداز و توصیهٔ نهایی

این رخنه نشان می‌دهد که حتی هنگام استفاده از Isolateهای V8، لایه‌های بایندینگ غیرایمن می‌توانند نقاط شکست حیاتی ایجاد کنند. پس از اعمال پچ‌ها انتظار می‌رود تیم‌های امنیتی و توسعه بازبینی جامعی روی لایه‌های اتصال و مکانیزم‌های انتقال داده انجام دهند تا از تکرار چنین آسیب‌پذیری‌هایی جلوگیری شود.

پیشنهاد فنی: به‌روزرسانی فوری، بازبینی وابستگی‌ها و کاهش سطح دسترسی کد میهمان مؤثرترین مسیر کاهش ریسک هستند.