El fallo SSHole en OpenSSH (CVE-2026-123158): Ejecución remota de root en Alpine Linux mediante desbordamiento de hash
Análisis técnico de la vulnerabilidad CVE-2026-123158 en OpenSSH sobre musl libc. Vectores de ataque observados a las 9 horas de divulgación y protocolo de remediación inmediata.
Fecha de publicación: 2026.11.07
Acceso root sin contraseñas ni claves SSH privadas
Compromiso de honeypots registrado tras la divulgación pública
Alpine Linux expuesto en puerto 22 con sshd activo
Los atacantes comenzaron a explotar de forma masiva la vulnerabilidad CVE-2026-123158 (bautizada como SSHole) menos de nueve horas después de su publicación. El vector permite obtener una sesión interactiva con privilegios de administrador en servidores Linux sin necesidad de robar credenciales ni comprometer claves criptográficas.
La telemetría de seguridad confirmó accesos no autorizados con privilegios de root en entornos señuelo. Las sondas registraron la ejecución de comandos de reconocimiento como id, uname y hostname desde direcciones IP como 89.116.89.18, orientadas a perfilar contenedores y servidores perimetrales.
Mecanismo de explotación del CVE-2026-123158 y la colisión de asterisco en musl
El origen de la vulnerabilidad se remonta al parche introducido en 2016 para mitigar la enumeración de usuarios registrada bajo CVE-2016-6210. Dicho mecanismo intentaba equiparar los tiempos de respuesta computando un hash ficticio cuando el usuario solicitado carecía de contraseña válida en el sistema.
En distribuciones compiladas con la biblioteca estándar musl C sin módulos de autenticación conectables (PAM), la rutina criptográfica falla ante cargas de entrada anómalas. Un atacante no autenticado que envía una contraseña de longitud comprendida entre 257 y 1.024 bytes provoca el aborto del cómputo criptográfico interno.
Al fallar el cálculo, la función devuelve una cadena compuesta exclusivamente por un asterisco (*). En entornos Linux tradicionales, el archivo /etc/shadow almacena precisamente un asterisco en el campo de contraseña para designar cuentas deshabilitadas o restringidas exclusivamente a autenticación por clave pública.
Bypass de autenticación mediante colisión de estado de fallo
El atacante envía una clave de entre 257 y 1.024 bytes al demonio sshd.
La biblioteca musl no procesa la longitud y devuelve el carácter asterisco (*).
sshd compara el asterisco devuelto con el asterisco de la cuenta sin contraseña.
La igualdad booleana resulta positiva y se abre una shell de root directa.
El demonio sshd ejecuta una comparación directa entre el valor retornado por el intento fallido y el valor persistido en el sistema operativo. Al coincidir ambos valores (*), el sistema valida la identidad de forma espuria y abre una sesión remota con los privilegios asignados a dicha cuenta.
El ataque no permite descifrar ni eludir cuentas que contengan hashes reales de contraseñas previamente configuradas. Su radio de impacto se concentra en cuentas administrativas o de servicio deliberadamente bloqueadas para uso de contraseña, como root o alpine.
Matriz de exposición arquitectónica y análisis comparativo de superficie
La vulnerabilidad no afecta de manera uniforme al ecosistema corporativo. El riesgo depende de la combinación precisa entre la biblioteca C del sistema operativo, el subsistema de autenticación activo y la configuración de las cuentas de usuario.
Las imágenes base de Alpine Linux destacan por su ligereza en infraestructuras de microservicios, pero su configuración por defecto prescinde de PAM y utiliza musl. Esta arquitectura deja expuestos los contenedores que ejecutan sshd de forma directa en lugar de apoyarse en agentes de transporte gestionados por el orquestador.
| Arquitectura de sistema | Biblioteca C | Capa PAM | Hash en shadow | Nivel de vulnerabilidad | Vector de mitigación |
|---|---|---|---|---|---|
| Alpine Linux (Default OpenSSH) | musl libc | Deshabilitada | Deshabilitado (*) | Crítico (CVSS 8.1) | Parchear a OpenSSH 10.6p2 o superior |
| Alpine Linux con cuentas con clave | musl libc | Deshabilitada | Hash válido (SHA-512) | Inmune | Mantener rotación de contraseñas |
| Debian / Ubuntu Server | glibc | Habilitada | Deshabilitado (*) | Inmune | Sin acción obligatoria en runtime |
| Red Hat Enterprise Linux / Rocky | glibc | Habilitada | Bloqueado (!!) | Inmune | Sin riesgo de colisión de retorno |
| Dispositivos embebidos con Dropbear | musl / uClibc | Deshabilitada | Deshabilitado (*) | Inmune | Arquitectura no basada en OpenSSH |
En implementaciones corporativas con miles de instancias efímeras, los hosts bastion y los pods de depuración representan el principal riesgo de movimiento lateral. Un acceso no autenticado a través de estas interfaces entrega de forma inmediata credenciales de despliegue, tokens de ServiceAccount y secretos montados en memoria.
Los sistemas construidos sobre glibc gestionan los búferes de contraseñas de gran longitud sin volcar el carácter de escape a la salida estándar de verificación. Por consiguiente, las distribuciones empresariales como RHEL, SUSE o Ubuntu no experimentan esta coincidencia de cadenas en sus configuraciones estándar.
Protocolo de contingencia inmediata y triaje forense en tres fases
Los equipos de ingeniería de infraestructura deben asumir el compromiso de cualquier nodo Alpine expuesto directamente a Internet si este ejecutaba OpenSSH antes del parche. El intervalo de nueve horas entre la divulgación del código de explotación y los primeros escaneos masivos anula las ventanas de mantenimiento programadas.
Para neutralizar la amenaza y clasificar el estado de las máquinas afectadas, los administradores deben ejecutar el siguiente protocolo estructurado.
Plan de respuesta ante incidentes para infraestructuras con OpenSSH y musl
Instalar OpenSSH 10.6p2 y reiniciar el servicio sshd de inmediato.
Buscar patrones sospechosos de Accepted password en cuentas key-only.
Verificar claves authorized_keys y binarios de escalado de privilegios.
1. Despliegue de parches y bloqueo de transporte
La solución definitiva reside en la actualización inmediata de los paquetes binarios provistos por los mantenedores de la distribución. La corrección implementada en OpenSSH 10.6p2 descarta el retorno genérico de fallo que permitía la equiparación con el carácter asterisco.
- Actualización de paquetes: Ejecutar
apk update && apk add --no-cache "openssh>10.6p1"en todos los entornos basados en Alpine. - Reinicio del demonio: Reiniciar el servicio mediante
rc-service sshd restarto destruyendo y recreando los contenedores desde una imagen base corregida. - Aislamiento perimetral: Bloquear el puerto TCP 22 en grupos de seguridad e interfaces públicas, derivando el tráfico exclusivamente a redes privadas virtuales.
2. Triaje de integridad y búsqueda de accesos no autorizados
La auditoría forense debe centrarse en los registros de autenticación del sistema operativo. Es obligatorio verificar /var/log/messages o la salida del subsistema de syslog del contenedor en busca de autorizaciones anómalas por contraseña.
- Patrón de detección en registros: Localizar cadenas exactas que contengan
Accepted password forvinculadas a usuarios definidos formalmente sin contraseña. - Cuentas prioritarias de auditoría: Revisar accesos atribuidos a los identificadores
root,alpineo cualquier cuenta de servicio configurada para operar únicamente mediante clave criptográfica. - Análisis de comandos no interactivos: Examinar registros de auditoría de procesos en busca de ejecuciones de
id,uname,hostnameo descargas mediantecurlywget.
3. Verificación de mecanismos de persistencia
Si se localiza un registro afirmativo de inicio de sesión por contraseña en una cuenta sin credencial asignada, la instancia debe catalogarse como totalmente comprometida. Las acciones de limpieza superficial no garantizan la erradicación del vector de ataque.
- Auditoría de claves autorizadas: Inspeccionar minuciosamente el archivo
/root/.ssh/authorized_keysy los directorios de usuario equivalentes para detectar llaves públicas añadidas durante la intrusión. - Revisión de elevación de privilegios: Validar la configuración del archivo
/etc/doas.confo/etc/sudoersy auditar los binarios con bits SUID activos generados recientemente. - Aislamiento y reemplazo del nodo: Terminar la instancia afectada de forma destructiva y redesplegarla desde plantillas limpias una vez aplicado el parche de OpenSSH.