Fallo crítico en OpenSSH permite eludir la autenticación por contraseña en servidores Alpine Linux
Se ha identificado una vulnerabilidad crítica en OpenSSH (sshole) que puede permitir a un atacante remoto evadir la autenticación por contraseña en determinados servidores Alpine Linux. Bajo condiciones específicas, un usuario no autorizado podría obtener acceso a cuentas configuradas para autenticación mediante clave pública, comprometiendo la seguridad del sistema.
El problema afecta principalmente a entornos que utilizan Alpine Linux con musl libc, tienen habilitada la autenticación por contraseña y no emplean PAM (Pluggable Authentication Modules). Tanto Alpine Linux como OpenSSH ya han publicado actualizaciones de seguridad para corregir esta condición.
La vulnerabilidad se origina por una interacción inesperada entre el servicio SSH (sshd) y la implementación de la función crypt() incluida en musl libc. Cuando una cuenta está configurada sin contraseña, su campo correspondiente en el sistema suele contener el carácter *, indicando que no debe aceptarse autenticación mediante contraseña.
Sin embargo, si un atacante envía una contraseña excesivamente larga (más de 256 bytes), la implementación de crypt() en musl devuelve también el carácter * como indicador de error. Bajo determinadas circunstancias, OpenSSH puede interpretar incorrectamente este resultado y considerar que la autenticación fue exitosa. En consecuencia, una verificación que debería fallar puede transformarse en un inicio de sesión válido.
En determinados escenarios, un único intento de autenticación podría ser suficiente para explotar la vulnerabilidad exitosamente. Por lo que un atacante remoto podría:
- Eludir los mecanismos de autenticación por contraseña.
- Obtener acceso a cuentas que deberían permitir únicamente autenticación mediante claves SSH.
- Escalar posteriormente sus privilegios dependiendo de la configuración del sistema.
- Comprometer la confidencialidad, integridad y disponibilidad del servidor afectado.
La explotación requiere que se cumplan simultáneamente las siguientes condiciones:
- El servicio SSH debe estar accesible desde la red.
- La opción PasswordAuthentication debe encontrarse habilitada.
- El atacante debe conocer el nombre de usuario objetivo.
- La cuenta objetivo debe tener el carácter * en su campo de contraseña.
- Debe existir al menos otra cuenta local con un hash de contraseña tipo $5$ o $6$.
- El sistema debe utilizar musl libc y no emplear PAM para la autenticación.
- El atacante debe enviar una contraseña especialmente larga (entre 257 y 1024 bytes).
Los sistemas potencialmente vulnerables incluyen, servidores Alpine Linux que utilicen OpenSSH sin PAM, entornos con autenticación por contraseña habilitada e instalaciones que empleen musl libc para el manejo de contraseñas.
De manera particular, las imágenes oficiales tiny-cloud de Alpine Linux desde las versiones 3.18.11 hasta 3.24.3 pueden resultar vulnerables bajo determinadas configuraciones.
Los sistemas que utilizan openssh-server-pam, entornos con UsePAM "yes" y ontenedores donde no exista un servicio SSH activo no se consideran afectados.
Esta vulnerabilidad demuestra cómo una condición de error en el proceso de validación de contraseñas puede derivar en una omisión completa de la autenticación. Las organizaciones que operen servidores Alpine Linux con OpenSSH sin PAM deben verificar de inmediato su exposición, aplicar los parches disponibles y revisar posibles accesos no autorizados para reducir el riesgo de compromiso de sus sistemas.
Versiones Afectadas
| Producto | Versiones afectadas | Versiones no afectadas |
|---|---|---|
| Alpine Linux (imágenes tiny-cloud y sistemas con openssh-server sin PAM) | 3.18.11 - 3.24.3 (explotable cuando se cumplen las condiciones descritas) | 3.21.10, 3.22.8, 3.23.8, 3.24.4 y cualquier instalación con OpenSSH Portable 10.6p2 o superior aplicando parches |
| OpenSSH (compilaciones enlazadas contra musl sin PAM) | Portable < 10.6p2 en sistemas musl sin PAM | OpenSSH Portable 10.6p2 y posteriores, o builds con PAM/glibc |
Recomendaciones
1. Actualizar inmediatamente los sistemas afectados
Ejecutar los siguientes comandos en los sistemas Alpine Linux afectados:
apk upgrade -U -a
rc-service sshd restart
Posteriormente, verificar que el servicio SSH se haya reiniciado correctamente y que esté utilizando los paquetes actualizados.
2. Actualizar OpenSSH
Implementar OpenSSH Portable 10.6p2 o una versión posterior en todos los sistemas potencialmente afectados.
3. Deshabilitar temporalmente la autenticación por contraseña
Si la actualización no puede realizarse de inmediato, configurar:
PasswordAuthentication no
Antes de aplicar el cambio, validar que el acceso mediante claves SSH funcione correctamente para evitar interrupciones operativas.
4. Reiniciar el servicio SSH de forma segura
Mantener una sesión administrativa activa mientras se reinicia sshd para verificar el acceso posterior y evitar bloqueos accidentales.
5. Revisar eventos de autenticación
Analizar registros como:
/var/log/messages
Buscar especialmente eventos similares a:
Accepted password for
Prestar especial atención a cuentas que no deberían admitir autenticación mediante contraseña.
6. Realizar una revisión de compromiso
Si no es posible descartar accesos no autorizados:
- Revisar archivos
authorized_keys. - Auditar actividad administrativa realizada mediante
doas. - Identificar cuentas nuevas o modificaciones no autorizadas.
- Realizar análisis forense conforme a los procedimientos internos de respuesta a incidentes.
7. Fortalecer la configuración de autenticación
Como medida permanente:
- Utilizar
openssh-server-pamcuando esté disponible. - Habilitar
UsePAM yes. - Reducir o eliminar cuentas configuradas sin contraseña.
- Limitar la exposición de servicios SSH mediante segmentación de red y listas de control de acceso.