
Exploit SSH para CVE-2024-6387 : RCE en el servidor de OpenSSH, en sistemas Linux basados en glibc
CVE-2024-6387 es un ejemplo hipotético, pero supongamos que se trata de una vulnerabilidad real en la implementación del servidor OpenSSH. Esta vulnerabilidad podría implicar un desbordamiento de búfer o un problema de corrupción de memoria que permite a atacantes remotos ejecutar código arbitrario en el servidor. A continuación se ofrece una explicación de alto nivel de cómo podría explotarse una vulnerabilidad de este tipo:
El código Python proporcionado es un exploit diseñado para aprovechar CVE-2024-6387. A continuación se muestra un desglose detallado de los pasos que realiza: Configuración de la conexión: Establece una conexión TCP con el servidor SSH objetivo.
def setup_connection(ip, port):
# ...
Envío y recepción de paquetes: Gestiona el envío y la recepción de paquetes hacia/desde el servidor SSH.
def send_packet(sock, packet_type, data):
# ...
Intercambio de versión SSH: Inicia el handshake de SSH enviando y recibiendo la cadena de versión de SSH.
def send_ssh_version(sock):
# ...
def receive_ssh_version(sock):
# ...
Inicio del intercambio de claves (KEX_INIT): Envía y recibe el paquete de inicialización del intercambio de claves.
def send_kex_init(sock):
# ...
def receive_kex_init(sock):
# ...
Realizar el handshake SSH: Combina los pasos anteriores para completar el handshake de SSH.
def perform_ssh_handshake(sock):
# ...
Preparación del heap: Envía una serie de paquetes para manipular el estado del heap en el servidor.
def prepare_heap(sock):
# ...
Estructura de archivo falsa: Crea estructuras de archivo falsas para explotar la vulnerabilidad de corrupción de memoria.
def create_fake_file_structure(data, glibc_base):
# ...
Medición del tiempo de análisis: Mide el tiempo que tarda el servidor en analizar ciertos paquetes, lo que ayuda a sincronizar correctamente el exploit final.
def time_final_packet(sock):
# ...
Paquete de clave pública: Construye un paquete que contiene la carga útil del exploit, incluido el shellcode.
def create_public_key_packet(packet, size, glibc_base):
# ...
Explotación de la condición de carrera: Intenta explotar la condición de carrera sincronizando correctamente el paquete final.
def attempt_race_condition(sock, parsing_time, glibc_base):
# ...
Función principal: Coordina el proceso general del exploit, incluidos múltiples intentos con diferentes bases de glibc.
def main():
# ...
CVE-2024-6387 representa una vulnerabilidad grave en OpenSSH que permite la ejecución remota de código. El script Python proporcionado explota esta vulnerabilidad manipulando el heap y sincronizando el envío de paquetes para provocar la corrupción de memoria y, finalmente, ejecutar el shellcode del atacante en el servidor. El script demuestra técnicas típicas de desarrollo de exploits, incluidos el heap spraying, la corrupción de memoria y la sincronización precisa para condiciones de carrera.