
CVE-2024-28397: هروب من صندوق الرمل js2py، تجاوز قيد استيراد pyimport.
js2py هي حزمة بايثون شائعة يمكنها تقييم كود جافاسكريبت داخل مترجم بايثون. تُستخدم من قِبل العديد من أدوات تجريف الويب لتحليل كود جافاسكريبت على الموقع الإلكتروني.
توجد ثغرة في تنفيذ متغير عام داخل js2py، مما يسمح للمهاجم بالحصول على مرجع لكائن بايثون في بيئة js2py، وبالتالي تمكين المهاجم من الهروب من بيئة JavaScript وتنفيذ أوامر عشوائية على المضيف.
عادةً، يستدعي المستخدم js2py.disable_pyimport() لمنع كود جافاسكريبت من الهروب من بيئة js2py. ولكن مع هذه الثغرة، يمكن للمهاجم تجاوز هذا القيد وتنفيذ أي أمر على المضيف المستهدف.
يمكن للجهة المهاجمة استضافة موقع ويب يحتوي على ملف جافاسكريبت خبيث أو إرسال سكربت خبيث عبر HTTP API ليقوم الضحية بتحليله. ومن خلال ذلك، يمكن للجهة تنفيذ كود عن بُعد على المضيف عبر تنفيذ أي أمر شل على الهدف.
js2py لا يدعم python3.12 حالياً.pip install js2py لتثبيت js2py ونفّذ poc.py، والذي سيحاول تنفيذ head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; على المضيف.Success! the vulnerability exists... أو يفتح الآلة الحاسبة.حالياً، لا يتوفر إصلاح رسمي؛ يمكن للمستخدمين استخدام fix.py لتصحيح js2py ديناميكياً أو استخدام patch.txt لإصلاح الكود المصدري.
اكتشفت هذه الثغرة في شهر فبراير، وقدّمت طلب سحب (PR) إلى المستودع الرسمي. ولكن بعد ذلك، نُسي الطلب، وبعد مرور أربعة أشهر، قررت إطلاق الإثبات المفاهيمي (PoC) والإصلاح الآن.