
Prueba de concepto de exploit para CVE-2025-9074 que permite el escape de la API de Docker Desktop mediante solicitudes HTTP sin procesar. Proporciona un shell interactivo emulado dentro de un contenedor utilizando solo curl, dd y awk.
Un script bash ligero y sin dependencias que te proporciona un shell interactivo emulado dentro de un contenedor Docker — usando solo curl, dd, od y awk. Sin Python, sin jq, sin editor necesario.
Creado para entornos donde solo tienes acceso raw a la terminal y necesitas ejecutar comandos dentro de un contenedor Docker a través de la API del motor Docker.
En lugar de usar la CLI de Docker, este script se comunica directamente con la API REST del motor Docker a través de HTTP (normalmente expuesta en http://192.168.65.7:2375 en entornos Docker Desktop / WSL2).
Hace lo siguiente:
C:\ de Windows montadadd + od — sin necesidad de PythonDocker envuelve toda la salida de exec en un formato de trama binaria:
[1 byte: tipo de flujo] [3 bytes: relleno] [4 bytes: tamaño del payload (big-endian)] [payload...]
Este script decodifica esa trama, trama por trama, usando solo herramientas Unix estándar.
bashcurldd, od, awk, grep, cut — todas herramientas Unix estándarhttp://192.168.65.7:2375 (Docker Desktop en WSL2)Sin jq, sin Python, sin nano, sin editor.
git clone https://github.com/yourusername/docker-shell.git
cd docker-shell
chmod +x docker_shell.sh
bash docker_shell.sh
================================================
Shell emulado de Docker [destino: alpine_escape]
Comandos: start | status | run <cmd> | exit
================================================
docker> start
docker> status
docker> run ls /mnt
docker> run ls /mnt/Users
docker> run cat /etc/os-release
docker> run id
docker> exit
El contenedor monta tu unidad C:\ de Windows (a través de WSL2) en /mnt:
| Ruta de Windows |
|---|
run es una instancia exec independiente — el estado no persiste entre comandos. Usa run cd /some/dir && ls para encadenar comandos en una sola llamada.alpine_escape), no por ID, por lo que no ejecutará accidentalmente en el contenedor equivocado./tmp/docker_out.bin usando dd trama por trama.Edita estas variables al principio del script para que coincidan con tu entorno:
DOCKER="http://192.168.65.7:2375" # Docker Engine API address
CONTAINER="alpine_escape" # Container name
AGPLv3
| Comando | Descripción |
|---|
start | Crea (si es necesario) e inicia el contenedor alpine_escape |
status | Muestra el ID del contenedor y su estado actual |
run <cmd> | Ejecuta cualquier comando de shell dentro del contenedor |
exit / quit | Sale del shell emulado |
| Dentro del contenedor |
|---|
C:\ | /mnt |
C:\Users | /mnt/Users |
C:\Program Files | /mnt/Program Files |
C:\Windows\System32 | /mnt/Windows/System32 |