Erlang/OTP SSH सर्वर में SSH प्रोटोकॉल संदेश प्रबंधन में एक त्रुटि के कारण, एक दुर्भावनापूर्ण अभिनेता बिना वैध क्रेडेंशियल के प्रभावित सिस्टम तक अनधिकृत पहुँच प्राप्त कर सकता है और मनमाने कमांड निष्पादित कर सकता है
✅ PRE-AUTH RCE CONFIRMED — Exploit successfully demonstrated.
📄 Technical Blog (PDF):CVE-2025-32433-Technical-Blog.pdf
📸 Visual Evidence:screenshots/
🔍 Proof of Concept Details:docs/PROOF_OF_CONCEPT.md
CVE-2025-32433, Erlang/OTP SSH daemon में एक CVSS 10.0 Critical vulnerability है। एक unauthenticated attacker SSH channels खोल सकता है और मनमाने commands निष्पादित कर सकता है authentication पूरा करने से पहले — शून्य credentials आवश्यक।
यह lab आपको vulnerability को reproduce करने, exploit चलाने, इसे verify करने और detection mechanisms का परीक्षण करने के लिए एक पूरी तरह से कार्यशील, isolated environment देता है — सब कुछ आपकी local machine पर।
शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित installed हैं:
| Tool | Minimum Version | Check Command |
|---|---|---|
| Docker Desktop | 4.x+ | docker --version |
| Docker Compose | v2.20+ | docker compose version |
| Python | 3.10+ | python --version |
detection suite के लिए आपको Python paramiko library की भी आवश्यकता होगी:
pip install paramiko
CVE-2025-32433 के सार्वजनिक होने के बाद Docker Hub का
erlang:26.2.5इमेज टैग चुपचाप पैच किए गए26.2.5.11रिलीज़ से बदल दिया गया था। इसे Docker Hub से खींचने पर आपको पैच किया गया संस्करण मिलता है, कमज़ोर संस्करण नहीं।इस लैब का
lab/Dockerfileवास्तविक कमज़ोर रनटाइम की गारंटी के लिए OTP 26.2.5 को सीधे आधिकारिक Erlang GitHub रिलीज़ टारबॉल से कंपाइल करता है। पहला बिल्ड लगभग 10 मिनट लेता है।
┌──────────────────────────────────────────┐
│ Isolated Docker Bridge │
│ (cve-lab-bridge) │
└────┬────────────────────────────┬────────┘
│ │
┌───────────────┴─────────────┐┌─────────────┴──────────────┐
│ target_vulnerable ││ target_patched │
│ OTP 26.2.5 (source-built) ││ erlang:26.2.5.11 │
│ Host Port: 127.0.0.1:2222 ││ Host Port: 127.0.0.1:2223 │
└─────────────────────────────┘└─────────────────────────────┘
│
┌──────────────┴──────────────┐
│ attacker │
│ Python 3 + Scapy/Paramiko │
│ Workdir: /work │
└─────────────────────────────┘
| कंटेनर | पोर्ट | OTP संस्करण | स्थिति |
|---|---|---|---|
cve-2025-32433-vulnerable | 127.0.0.1:2222 | 26.2.5 (ERTS 14.2.5) | ❌ असुरक्षित |
cve-2025-32433-patched | 127.0.0.1:2223 | 26.2.5.11 (ERTS 14.2.5.15) | ✅ पैच किया गया |
cve-2025-32433-attacker | केवल आंतरिक | Python 3 टूलिंग | हमलावर टूलसेट |
git clone https://github.com/damnkrishna/CVE-2025-32433-LAB.git
cd CVE-2025-32433-LAB
⏱️ इसमें लगभग 10 मिनट लगते हैं — यह C स्रोत से Erlang/OTP 26.2.5 को कंपाइल करता है। यह अपेक्षित है। इसे बीच में न रोकें।
docker compose build --no-cache target_vulnerable
आपको कंपाइलर आउटपुट ऐसा दिखेगा जैसे make[1]: Leaving directory '/tmp/otp_src_26.2.5/lib/...' —
यह सामान्य है। यह इसके साथ समाप्त होता है:
✔ Image ine_cyber_assignment_job-target_vulnerable Built
docker compose build --no-cache target_patched
docker compose up -d target_vulnerable target_patched
docker compose ps
No input content was provided. Please send the Markdown chunk you want translated.
NAME STATUS PORTS
cve-2025-32433-vulnerable Up (healthy) 127.0.0.1:2222->2222/tcp
cve-2025-32433-patched Up (healthy) 127.0.0.1:2223->2222/tcp
दोनों कंटेनरों को जारी रखने से पहले (healthy) दिखाना चाहिए।
पुष्टि करें कि कंटेनर वास्तव में OTP 26.2.5 चला रहा है (पैच किया गया संस्करण नहीं):
docker exec cve-2025-32433-vulnerable cat /usr/local/otp/lib/erlang/releases/RELEASES
अपेक्षित आउटपुट — 14.2.5 दिखाना चाहिए, बिना किसी .15 प्रत्यय के:
[{release,"Erlang/OTP","26","14.2.5",
[{kernel,"9.2.4",...},
यदि आपको 14.2.5.15 दिखाई देता है — तो कंटेनर इमेज गलत है। --no-cache के साथ पुनः बिल्ड करें।
यह पुष्टि करने के लिए कि सर्वर मानक प्रमाणीकरण स्वीकार करता है, एक वैध उपयोगकर्ता के रूप में कनेक्ट करें:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 [email protected]
जब संकेत दिया जाए तो पासवर्ड दर्ज करें: LabPass2026!Secured
आप एक Erlang शेल में पहुँच जाएँगे:
Eshell V14.2.5 (press Ctrl+G to abort, type help(). for help)
1>
Erlang शेल के अंदर कुछ कमांड आज़माएँ:
ls().
file:write_file("test.txt", "hello").
file:read_file("test.txt").
Erlang शेल से बाहर निकलने के लिए:
q().
एक्सप्लॉइट चलाने से पहले, एक दूसरा PowerShell टर्मिनल खोलें और सर्वर लॉग को टेल करें:
Get-Content -Path .\logs\target_vulnerable\ssh.log -Wait -Tail 20
इस टर्मिनल को खुला रखें। आप कनेक्शन इवेंट्स को वास्तविक समय में प्रकट होते देखेंगे।
यह प्री-ऑथेंटिकेशन रिमोट कोड एक्ज़ीक्यूशन प्रूफ़ ऑफ़ कॉन्सेप्ट है। कोई क्रेडेंशियल्स उपयोग नहीं किए जाते हैं।
cd attacker_work\exploit
python payload.py
No input content was provided. Please send the Markdown chunk you want translated.
[*] Connecting to SSH server...
[+] Received banner: SSH-2.0-Erlang/5.1.4
[*] Sending SSH_MSG_KEXINIT...
[*] Sending SSH_MSG_CHANNEL_OPEN...
[*] Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
[✓] Exploit sent! If the server is vulnerable, it should have written to /lab.txt.
[+] Received response: 000003d4...
यह पुष्टि करने के लिए कि आपने कमज़ोर सर्वर को हिट किया है, बैनर में SSH-2.0-Erlang/5.1.4 (बिना .15 प्रत्यय के) दिखना चाहिए।
docker exec cve-2025-32433-vulnerable cat /lab.txt
No input content was provided. Please send the Markdown chunk you want translated.
pwned
अगर आपको pwned दिखता है — CVE-2025-32433 प्री-ऑथेंटिकेशन RCE की पुष्टि हो गई है।
एक्सप्लॉइट ने शून्य क्रेडेंशियल्स के साथ कंटेनर फ़ाइलसिस्टम में लिखा।
पोर्ट 2223 पर पैच किए गए कंटेनर के विरुद्ध वही एक्सप्लॉइट चलाएँ:
attacker_work\exploit\payload.py की पंक्ति 6 संपादित करें:
PORT = 2223 # change from 2222 to 2223
एक्सप्लॉइट चलाएँ:
python payload.py
फिर फ़ाइल की जाँच करें:
docker exec cve-2025-32433-patched cat /lab.txt
No input content was provided. Please send the Markdown chunk you want translated.
cat: /lab.txt: No such file or directory
पैच किया गया कंटेनर अनप्रमाणित चैनल अनुरोध को अस्वीकार कर देता है। कोई फ़ाइल नहीं लिखी गई = पैच किया गया।
पूरा होने पर payload.py के पोर्ट को वापस 2222 पर सेट करें।
रिपॉज़िटरी रूट पर वापस जाएँ:
cd ..\..