
كشفت أبحاث أمنية عن ثغرة خطيرة في مكتبة Happy DOM، وهي إحدى أشهر تطبيقات جافا سكريبت الخاصة بمحاكاة بيئة DOM، تؤثر في جميع الإصدارات حتى الإصدار 19. وتعرض هذه الثغرة ما يقدر بنحو 2.7 مليون مستخدم أسبوعياً لخطر هجمات تنفيذ الأوامر عن بعد (RCE).
ترجع الثغرة إلى أن بيئة Node.js VM Context المستخدمة في Happy DOM ليست معزولة بالكامل، ما يتيح للبرمجيات غير الموثوقة الخروج من البيئة الافتراضية والوصول إلى وظائف النظام الأساسية. وتكمن المشكلة الأساسية في أن التقييم البرمجي JavaScript Evaluation مفعل بشكل افتراضي داخل المكتبة، وهو ما قد يغيب عن كثير من المطورين الذين يستخدمونها في مشاريعهم.
عند تنفيذ كود جافا سكريبت غير موثوق، يستطيع المهاجم إنشاء سكريبت خبيث يستغل سلسلة البُنى الكائنية للوصول إلى منشئ تابع على مستوى العمليات، ما يتيح له تشغيل أوامر خارج البيئة المعزولة وتنفيذ ما يعرف بالهروب من البيئة الافتراضية.
سيناريوهات الهجوم المحتملة
تتضح خطورة الثغرة بشكل خاص في التطبيقات التي تعتمد على العرض من جهة الخادم Server-Side Rendering أو أطر الاختبار التي تعالج محتوى قادماً من مصادر خارجية. ففي هذه الحالات يمكن لمهاجم حقن شفرة خبيثة داخل محتوى HTML يتحكم به المستخدم، لينفذ لاحقاً على الخادم.
تشمل النتائج المحتملة:
- تسريب البيانات: الوصول إلى متغيرات البيئة وملفات الإعدادات والأسرار.
- الحركة الجانبية: استغلال الاتصال الشبكي للوصول إلى أنظمة داخلية أخرى، رغم وجود بعض آليات الحماية في Happy DOM.
- تنفيذ الأوامر: تشغيل عمليات فرعية لتنفيذ أوامر عشوائية على الخادم.
- الاستمرارية: تعديل ملفات النظام للحفاظ على وجود طويل الأمد داخل البيئة المصابة.
إجراءات التخفيف والتحديثات الأمنية
أصدر مطورو Happy DOM نسخة مصححة (الإصدار 20) تعالج الثغرة عبر تعطيل التقييم البرمجي افتراضياً، وتنبيه المستخدم عند تفعيله في بيئة غير آمنة. وينصح المطورون جميع المستخدمين بالترقية الفورية إلى الإصدار الجديد لحماية أنظمتهم.
أما من لا يمكنهم التحديث مباشرة، فيجب عليهم تعطيل خاصية JavaScript Evaluation يدوياً إلا إذا كانوا يتعاملون مع محتوى موثوق بالكامل. كما يوصى بتشغيل Node.js باستخدام الخيار الأمني –disallow-code-generation-from-strings الذي يمنع استخدام الدالتين eval() وFunction() على مستوى العملية، ما يغلق الثغرة التي تسمح بالهروب من البيئة الافتراضية.
تسلط هذه الثغرة الضوء على المخاطر الكامنة في المكتبات التي تتيح تنفيذ الشيفرات ضمن بيئات غير معزولة بالكامل، وعلى أهمية مراجعة الإعدادات الافتراضية لأي مكونات تُستخدم في بناء تطبيقات الويب الحديثة.