
Exploit de prova de conceito para CVE-2025-9074 que permite escape da API do Docker Desktop via requisições HTTP brutas. Fornece um shell interativo emulado dentro de um contêiner usando apenas curl, dd e awk.
Um script bash leve e sem dependências que oferece um shell interativo emulado dentro de um contêiner Docker — usando apenas curl, dd, od e awk. Sem Python, sem jq, sem editor necessário.
Desenvolvido para ambientes onde você só tem acesso bruto ao shell e precisa executar comandos dentro de um contêiner Docker por meio da Docker Engine API.
Em vez de usar a CLI do Docker, este script fala diretamente com a REST API da Docker Engine via HTTP (normalmente exposta em http://192.168.65.7:2375 em ambientes Docker Desktop / WSL2).
Ele:
C:\ do Windows montadadd + od — sem necessidade de PythonO Docker envolve toda a saída exec em um formato de enquadramento binário:
[1 byte: stream type] [3 bytes: padding] [4 bytes: payload size (big-endian)] [payload...]
Este script decodifica esse quadro a quadro usando apenas ferramentas Unix padrão.
bashcurldd, od, awk, grep, cut — todas ferramentas Unix padrãohttp://192.168.65.7:2375 (Docker Desktop no WSL2)Sem jq, sem Python, sem nano, sem editor.
git clone https://github.com/yourusername/docker-shell.git
cd docker-shell
chmod +x docker_shell.sh
bash docker_shell.sh
================================================
Docker Emulated Shell [target: alpine_escape]
Commands: 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
| Comando | Descrição |
|---|---|
start | Cria (se necessário) e inicia o contêiner alpine_escape |
status | Mostra o ID do contêiner e o estado atual |
run <cmd> | Executa qualquer comando de shell dentro do contêiner |
exit / quit | Sai do shell emulado |
O contêiner monta sua unidade C:\ do Windows (via WSL2) em /mnt:
| Caminho do Windows | Dentro do Contêiner |
|---|---|
C:\ | /mnt |
C:\Users | /mnt/Users |
C:\Program Files | /mnt/Program Files |
C:\Windows\System32 | /mnt/Windows/System32 |
run é uma instância exec separada — o estado não persiste entre comandos. Use run cd /some/dir && ls para encadear comandos em uma única chamada.alpine_escape), não pelo ID, para não executar acidentalmente no contêiner errado./tmp/docker_out.bin usando dd quadro a quadro.Edite estas variáveis no topo do script para adequar ao seu ambiente:
DOCKER="http://192.168.65.7:2375" # Docker Engine API address
CONTAINER="alpine_escape" # Container name
AGPLv3