CVE-2025-9074 (PoC Educacional・Prova de Conceito)
Este repositório contém um PoC que demonstra, para fins educacionais, o risco de explorar a API remota não autenticada do Docker Engine para criar um contêiner privilegiado com acesso de leitura e gravação ao sistema de arquivos do host.
O arquivo executável é o poc.go.
Importante: use este PoC apenas para fins educacionais e defensivos. É proibida a execução em ambientes de terceiros ou em sistemas sem autorização.
Avaliação de risco
- Avaliação geral: Crítica
- Valor base estimado do CVSS v3.1: 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- Justificativa:
- Acessível via TCP/2375 sem autenticação → PR:N, UI:N, AV:N
- Contêiner privilegiado + bind mount do host altera o escopo e causa alto impacto em confidencialidade/integridade/disponibilidade → S:C, C/I/A:H
- A sequência de ataque é concluída com poucas requisições HTTP à API do Docker Engine → AC:L
- Escopo do impacto:
- Todo o sistema operacional do host, outros contêineres e ativos na mesma rede (incluindo roubo de credenciais e movimento lateral)
- Privilégios necessários:
- Sem autenticação (PR:N). Não requer privilégios de administrador
Contexto
- O Docker Engine fornece uma API remota que pode ser operada por meio de endpoints como
/version, /info e /containers/create.
- Quando o contêiner está acessível externamente, em alguns casos é possível criar contêineres, conceder privilégios e fazer bind mount de diretórios do host sem autenticação.
- Em ambientes Windows + Docker Desktop, existem caminhos de montagem que permitem acessar as unidades do host Windows por meio de
/run/desktop/mnt/host/<drive> ou /host_mnt/<drive>. Este PoC utiliza esse caminho para demonstrar o impacto criando arquivos no host.
Visão geral do funcionamento
O poc.go realiza o seguinte:
- Chama a API do Docker Engine em
http://192.168.65.7:2375 e executa uma verificação de conectividade (/version)
- Verifica a lista de imagens disponíveis (
/images/json) e, se não houver nenhuma, tenta baixar alpine:latest
- Cria um contêiner privilegiado e faz bind mount das unidades do host (ex.: C:, N:) em
/host_root
- A partir do contêiner, grava um arquivo de verificação (ex.:
cve_2025_9074_poc.txt) diretamente em /host_root, tornando o impacto visível
- Remove o contêiner após a execução
Riscos (exploração possível)
- Leitura e gravação no sistema de arquivos do host (dentro do escopo das permissões de execução do Docker Engine)
- Roubo de informações confidenciais (senhas, chaves SSH etc.)
- Alteração de arquivos de configuração do sistema
- Instalação de malware e persistência
- Movimento lateral para outros contêineres e redes
- Escalação de privilégios
Requisitos
- Go 1.20+ aproximadamente (funciona com
go run)
- Docker Desktop/Engine (vulnerável) em execução
- Executar este código dentro de um contêiner Docker em execução no Docker Desktop/Engine (vulnerável)
- A API do Docker Engine respondendo em
http://192.168.65.7:2375 (valor padrão do PoC)
Como usar
-
Obtenha o repositório
git clone <this-repo>
cd cve-2025-9074
-
Execute o PoC
-
Exemplo de saída
- Exibição de sucesso na conectividade com
/version
- Detecção da imagem em uso ou pull de
alpine:latest
- Criação do contêiner privilegiado e resultado da criação do arquivo no host
- Exibição de um resumo das informações do sistema com base em
/info
-
Exemplos de curl para demonstração (exibidos na tela)
- Exemplo de JSON para
/containers/create e exemplo de inicialização de /containers/{id}/start
Personalização da configuração
- A lista de candidatos em
attemptHostWrite (/run/desktop/mnt/host/<drive>, /host_mnt/<drive>, C:/ etc.) pode ser ajustada de acordo com o ambiente.
- Imagem utilizada
- Prioriza imagens existentes. Se não houver nenhuma, faz pull automático de
alpine:latest.
Observações sobre o ambiente de teste
- Inclui exemplos de caminhos de montagem baseados no comportamento em Windows + Docker Desktop.
- No macOS, os caminhos do host são diferentes, portanto é necessário adaptá-los conforme o caso.
- Dependendo da versão e da configuração do Docker Desktop, o PoC pode não funcionar (= seguro).
Aviso de isenção de responsabilidade
- Este repositório destina-se apenas a fins de pesquisa e educação. Não incentiva ataques, invasões ou atos de destruição.
- O autor não se responsabiliza por quaisquer danos decorrentes do uso deste PoC.
- Não execute fora de um ambiente isolado sobre o qual você tenha autoridade administrativa legítima.
Licença