CVE-2025-9074 (PoC educativo / Código de prueba de concepto)
Este repositorio contiene un PoC con fines educativos que demuestra el riesgo de explotar la API remota no autenticada de Docker Engine para crear un contenedor privilegiado con capacidad de lectura/escritura en el sistema de archivos del host. El archivo ejecutable es poc.go.
Importante: Este PoC debe utilizarse únicamente con fines educativos y de defensa. Está prohibido ejecutarlo en entornos de terceros o sistemas no autorizados.
Evaluación de peligrosidad
- Evaluación general: Crítica
- Valor base CVSS v3.1 estimado: 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- Justificación:
- Accesible a TCP/2375 sin autenticación → PR:N, UI:N, AV:N
- Contenedor privilegiado + bind mount del host provoca cambio de alcance y alto impacto en confidencialidad/integridad/disponibilidad → S:C, C/I/A:H
- El procedimiento de ataque se completa con pocas solicitudes HTTP a la API de Docker Engine → AC:L
- Alcance del impacto:
- Todo el sistema operativo host, otros contenedores, activos en la misma red (incluye robo de credenciales y movimiento lateral)
- Privilegios requeridos:
- Sin autenticación (PR:N). No se requieren privilegios de administrador.
Antecedentes
- Docker Engine proporciona una API remota que se puede operar a través de endpoints como
/version, /info, /containers/create, etc.
- Si el contenedor es accesible desde el exterior, en algunos casos es posible crear contenedores, otorgar privilegios y realizar bind mount de directorios del host sin autenticación.
- En entornos Windows + Docker Desktop, existen rutas de montaje que permiten acceder a las unidades del host de Windows a través de
/run/desktop/mnt/host/<drive> o /host_mnt/<drive>. Este PoC utiliza dicha ruta para visualizar el impacto mediante la creación de archivos en el host.
Resumen de funcionamiento
poc.go realiza lo siguiente:
- Llama a la API de Docker Engine en
http://192.168.65.7:2375 para verificar la conectividad (/version)
- Comprueba la lista de imágenes disponibles (
/images/json) y, si no hay ninguna, intenta extraer alpine:latest
- Crea un contenedor privilegiado y monta en bind las unidades del host (ej. C:, N:) en
/host_root
- Desde el interior del contenedor, escribe un archivo de verificación (ej.
cve_2025_9074_poc.txt) directamente en /host_root para visualizar el impacto
- Después de la ejecución, elimina el contenedor
Riesgos (posible explotación)
- Lectura/escritura del sistema de archivos del host (dentro de los permisos de ejecución de Docker Engine)
- Robo de información confidencial (contraseñas, claves SSH, etc.)
- Manipulación de archivos de configuración del sistema
- Instalación de malware, persistencia
- Movimiento lateral a otros contenedores y redes
- Escalada de privilegios
Requisitos
- Go 1.20+ aproximadamente (funciona con
go run)
- Docker Desktop/Engine (vulnerable) en ejecución
- Ejecutar este código dentro de un contenedor Docker que se ejecute en Docker Desktop/Engine (vulnerable)
- La API de Docker Engine debe responder en
http://192.168.65.7:2375 (valor predeterminado del PoC)
Uso
-
Obtener el repositorio
git clone <this-repo>
cd cve-2025-9074
-
Ejecutar el PoC
-
Ejemplo de salida
- Visualización de conectividad exitosa a
/version
- Detección de imagen disponible o extracción de
alpine:latest
- Creación de contenedor privilegiado, resultado de la creación de archivos en el host
- Visualización de un extracto de información del sistema basado en
/info
-
Ejemplos de curl para demostración (se muestran en pantalla)
- Ejemplo JSON para
/containers/create, ejemplo de inicio de /containers/{id}/start
Personalización de la configuración
- La matriz de candidatos dentro de
attemptHostWrite (/run/desktop/mnt/host/<drive>, /host_mnt/<drive>, C:/, etc.) se puede ajustar según el entorno.
- Imagen utilizada
- Prioriza imágenes existentes. Si no hay ninguna, extrae automáticamente
alpine:latest.
Notas sobre el entorno de verificación
- Se incluyen ejemplos de rutas de montaje basados en el comportamiento en Windows + Docker Desktop.
- En macOS, las rutas del host son diferentes, por lo que es necesario modificarlas según corresponda.
- Dependiendo de la versión y configuración de Docker Desktop, es posible que el PoC no se ejecute (= seguro).
Exención de responsabilidad
- Este repositorio está destinado únicamente a fines de investigación y educación. No promueve ataques, intrusiones o actos de destrucción.
- El autor no se hace responsable de ningún daño que resulte del uso de este PoC.
- No lo ejecute fuera de un entorno aislado sobre el que tenga derechos de administración legítimos.
Licencia