
CVE-2018-10933 - Bypass de autenticación en libssh
Implementación de Prueba de Concepto para CVE-2018-10933, una vulnerabilidad crítica de omisión de autenticación que afecta la implementación del lado del servidor de libssh.
Aviso legal
Este repositorio se proporciona únicamente con fines educativos, investigación de vulnerabilidades y pruebas de seguridad autorizadas. Nunca pruebe sistemas sin permiso explícito.
CVE-2018-10933 es una vulnerabilidad crítica de omisión de autenticación descubierta en la máquina de estados del lado del servidor de libssh.
A diferencia de las fallas de autenticación tradicionales que implican contraseñas débiles o debilidades criptográficas, esta vulnerabilidad existe porque el servidor confía incorrectamente en un mensaje de protocolo que solo debería enviarse del servidor al cliente.
Por lo tanto, un atacante puede convencer a un servidor libssh vulnerable de que la autenticación ya se ha completado con éxito sin proporcionar ninguna credencial.
Esto permite que un atacante no autenticado establezca una sesión SSH autenticada contra aplicaciones vulnerables que utilizan libssh en modo servidor.
| Campo | Valor |
|---|---|
| CVE | CVE-2018-10933 |
| Gravedad | Crítica |
| CVSS v3 | 9.1 |
| CWE | CWE-287 (Autenticación Incorrecta) |
| Vector de Ataque | Red |
| Interacción del Usuario | Ninguna |
| Privilegios Requeridos | Ninguno |
La vulnerabilidad afecta a libssh en modo servidor.
Las versiones afectadas incluyen:
Las aplicaciones que usan libssh solo como cliente SSH no son vulnerables.
La vulnerabilidad se origina en la máquina de estados de autenticación implementada dentro del código del servidor de libssh.
Durante un flujo de autenticación SSH normal:
Client ----------------------> Server
SSH_MSG_USERAUTH_REQUEST
|
V
Server validates credentials
|
V
SSH_MSG_USERAUTH_SUCCESS
|
V
Authenticated Session
El protocolo especifica que SSH_MSG_USERAUTH_SUCCESS es generado solo por el servidor después de una autenticación exitosa.
Sin embargo, las versiones vulnerables de libssh no validan correctamente el origen de este mensaje.
En lugar de rechazar un SSH_MSG_USERAUTH_SUCCESS suministrado por el cliente, el servidor transiciona incorrectamente su estado interno de autenticación directamente a:
Authenticated = TRUE
sin verificar nunca las credenciales.
Este es un ejemplo clásico de Autenticación Incorrecta (CWE-287).
Client
|
| USERAUTH_REQUEST
|
V
Server
Validate Username
Validate Password
Validate Keys
|
V
USERAUTH_SUCCESS
Authenticated
Attacker
|
| USERAUTH_SUCCESS
|
V
Vulnerable Server
(No validation)
Authenticated
La explotación exitosa permite a un atacante no autenticado:
El impacto real depende de cómo la aplicación vulnerable utiliza libssh después de la autenticación.
La vulnerabilidad existe porque la máquina de estados de autenticación acepta incorrectamente el paquete:
SSH2_MSG_USERAUTH_SUCCESS
del cliente.
En lugar de verificar que el paquete se originó en el servidor, libssh actualiza su estado interno de sesión como si la autenticación se hubiera completado con éxito.
Debido a que las comprobaciones de autorización posteriores dependen de este estado interno, los atacantes pueden abrir inmediatamente canales autenticados.
Esta vulnerabilidad no explota:
En cambio, explota una falla lógica en el manejo del estado del protocolo.
El atacante necesita:
No:
Los indicadores potenciales incluyen:
Las firmas de IDS de red también pueden identificar paquetes SSH2_MSG_USERAUTH_SUCCESS anómalos enviados desde los clientes.
Actualice libssh a una de las versiones parcheadas:
Si no es posible actualizar inmediatamente:
No existe una solución alternativa confiable aparte de actualizar el software afectado.
Este repositorio demuestra cómo las vulnerabilidades de la máquina de estados de autenticación pueden surgir de errores en la implementación del protocolo.
Está destinado a ayudar a:
La Prueba de Concepto incluida ilustra la vulnerabilidad en entornos controlados para mejorar la comprensión de la implementación segura de protocolos.