
CVE-2024-34832 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट: CubeCart एडमिन पैनल में डायरेक्टरी ट्रैवर्सल, जो क्राफ्टेड `_g` पैरामीटर और अपलोड किए गए `.inc.php` फाइलों के माध्यम से रिमोट कोड एक्ज़ीक्यूशन की ओर ले जाता है।
एडमिन पैनल में, _g और node जैसे पैरामीटर का उपयोग .inc.php फ़ाइलों को शामिल करने और PHP कोड निष्पादित करने के लिए पथ बनाने में किया जाता है। सर्वर पर कहीं भी .inc.php फ़ाइलें अपलोड करने में सक्षम एक दुर्भावनापूर्ण उपयोगकर्ता पथ ट्रैवर्सल भेद्यता का शोषण करके उन्हें शामिल कर सकता है और दुर्भावनापूर्ण कोड निष्पादित कर सकता है।
.inc.php एक्सटेंशन वाली फ़ाइलें अपलोड करने की क्षमता (जैसे FTP तक पहुंच, उसी सर्वर पर कोई अन्य एप्लिकेशन जो फ़ाइल अपलोड की अनुमति देता है, CubeCart की अपलोड सुविधाओं में नई कमजोरियां, आदि)।मान लें कि उसी सर्वर पर जहां CubeCart स्थापित है, एक FTP सर्वर चल रहा है और एक उपयोगकर्ता एक विशिष्ट स्थान पर फ़ाइलें अपलोड करने में सक्षम है। हमारे मामले में, मान लें कि FTP के माध्यम से अपलोड की गई कोई भी चीज़ /opt/FTP_Example में समाप्त होगी। यह भी मान लें कि इस उपयोगकर्ता ने FTP के माध्यम से path_traversal.inc.php नामक एक फ़ाइल अपलोड की और इसकी सामग्री निम्नलिखित PHP कोड है <?php system('whoami;id;hostname;ls') ?>।

शुरू में ऐसी फ़ाइल अपलोड करने में कोई खतरा नहीं है क्योंकि इसे निष्पादित नहीं किया जाएगा और न ही यह किसी वेब सर्वर - जैसे Apache - की निर्देशिका में है जो इसे निष्पादित कर सकता है।
यही उपयोगकर्ता CubeCart के एडमिन पैनल पर बहुत सीमित या बिल्कुल भी विशेषाधिकार नहीं रखता हो सकता है, लेकिन वह फिर भी इसमें लॉग इन कर सकता है। उदाहरण के लिए, हमने julio नाम का एक उपयोगकर्ता बनाया जिसके पास कोई विशेषाधिकार नहीं है।

julio के रूप में एप्लिकेशन में लॉग इन करने के बाद, हमने _g और node पैरामीटर का परीक्षण शुरू किया। हमने देखा कि ये पैरामीटर स्वचालित रूप से पथ के अंत में .inc.php जोड़ देते हैं और ऐसा लगता है कि PHP कोड निष्पादित करने के लिए उस फ़ाइल पर include() का उपयोग करते हैं। जैसा कि नीचे देखा गया है, जब फ़ाइल नहीं मिलती है, तो निम्नलिखित त्रुटि संदेश लौटाया जाता है।

हमने सोचना शुरू किया कि क्या हम पथ को पार कर सकते हैं और सर्वर में कहीं और एक निर्देशिका में .inc.php फ़ाइल तक पहुंच सकते हैं - जैसे हमारा FTP फ़ोल्डर। चूंकि हमारे पास /opt/FTP_Example फ़ोल्डर में path_traversal.inc.php नामक एक फ़ाइल थी, हमने बहुत सारे /../../../ जोड़ने का प्रयास किया जब तक कि हम रूट निर्देशिका तक नहीं पहुंच गए, फिर हमने /opt/FTP_Example/path_traversal जोड़ा और एप्लिकेशन ने स्वचालित रूप से पथ के अंत में .inc.php जोड़ दिया। जैसा कि नीचे देखा गया है, कोड सफलतापूर्वक निष्पादित किया गया।

हमने देखा कि node पैरामीटर वास्तव में स्लैश (/) को एस्केप करता है, लेकिन _g नहीं करता। पथ बनाने के लिए उपयोग किए जाने वाले सभी पैरामीटर को पथ ट्रैवर्सल कमजोरियों को रोकने के लिए स्लैश को एस्केप करना चाहिए। यद्यपि इस कमजोरी के सफल शोषण के लिए पूर्वापेक्षाएँ हैं - जो जोखिम को काफी कम करती हैं - फिर भी इसे पैच से लाभ होता है। आप संदर्भों में देख सकते हैं कि CubeCart के लेखकों ने इस कमजोरी को कैसे ठीक किया और आधिकारिक रिलीज़ आने तक अपने स्वयं के CubeCart इंस्टेंस पर फिक्स लागू करें जो पहले से पैच किया गया हो।