
Reprodução em laboratório do CVE-2026-34040: contorna os plugins AuthZ do Docker/Moby usando corpos de requisição excessivamente grandes (>1MB) para criar contêineres privilegiados com acesso ao host.
KO: Projeto de reprodução prática de uma vulnerabilidade que contorna o plugin de autorização (AuthZ) do Docker (Moby) usando um corpo de requisição superior a 1MB. PT: Uma reprodução laboratorial de uma vulnerabilidade que contorna os plugins de autorização (AuthZ) do Docker (Moby) usando um corpo de requisição maior que 1MB.
| Item | Value |
|---|---|
| CVE | CVE-2026-34040 |
| CVSS 3.1 | 8.8 (Alto) — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-288 (Contorno de Autenticação Usando um Caminho ou Canal Alternativo), CWE-863 (Autorização Incorreta) |
| Afetados | moby/moby < 29.3.1, docker/docker < 29.3.1, moby/moby/v2 < 2.0.0-beta.8 |
| Corrigido em | 29.3.1, 2.0.0-beta.8 |
| Causa raiz | Correção incompleta para CVE-2024-41110 |
| Commit do patch | moby/moby@e89edb1 |
KO: O vetor CVSS oficial é
AV:L(Local). Ou seja, o cenário avaliado é um usuário com privilégios baixos com acesso local à API Docker (tipicamente/var/run/docker.sock). Este PoC também utiliza apenas o socket UNIX local. PT: O vetor CVSS oficial éAV:L(Local). O cenário avaliado é um usuário com privilégios reduzidos com acesso local à API Docker (normalmente/var/run/docker.sock). Este PoC usa apenas o socket UNIX local.
KO:
- Uma requisição de criação de contêiner privilegiado de tamanho normal é bloqueada pelo plugin AuthZ (HTTP 403).
- A mesma requisição com padding acima de 1MB contorna a verificação AuthZ.
- A requisição contornada alcança o daemon Docker e cria um contêiner privilegiado.
- Com a combinação de contêiner privilegiado + bind mount do host, é possível demonstrar leitura de arquivos do host e execução de comandos no host.
EN:
- Uma requisição de criação de contêiner privilegiado de tamanho normal é bloqueada pelo plugin AuthZ (HTTP 403).
- A mesma requisição com padding além de 1MB contorna a verificação AuthZ.
- A requisição contornada alcança o daemon Docker e cria um contêiner privilegiado.
- Com a combinação de contêiner privilegiado + bind mount do host, é possível demonstrar leitura de arquivos do host e execução de comandos no host.
KO: Este CVE em si não lê diretamente
/etc/shadownem realiza RCE. A contornação de uma requisição à API Docker que o AuthZ deveria bloquear é a essência da vulnerabilidade; as etapas posteriores (leitura de arquivos, chroot, execução de comandos) são demonstrações de impacto que abusam das funcionalidades normais do Docker/Linux. EN: O CVE em si não lê/etc/shadownem executa RCE diretamente. A vulnerabilidade é a contornação de uma requisição à API Docker que o AuthZ deveria bloquear; as etapas posteriores (leitura de arquivos, chroot, execução de comandos) são demonstrações de impacto que abusam das funcionalidades normais do Docker/Linux.
.
├── README.md
├── poc.py # PoC funcional (apenas socket UNIX local)
├── requirements.txt # Apenas bibliotecas padrão Python
├── LICENSE
├── lab/
│ ├── authz.rego # Política OPA: bloqueia contêiner privilegiado + bind da raiz do host
│ └── daemon.json # Regista o plugin AuthZ
└── docs/
├── concepts.md # Conceitos / Concepts
├── lab-setup.md # Configuração do laboratório / Lab setup
├── how-it-works.md # Como funciona (nível de código fonte) / How it works (source-level)
├── usage.md # Uso / Usage
├── troubleshooting.md # Resolução de problemas / Troubleshooting
└── references.md # Referências / References
KO: Para que este PoC funcione de forma significativa, todas as condições abaixo são necessárias. PT: Todas as condições abaixo são necessárias para que este PoC seja significativo.
# 1) Baixar a imagem usada pelo PoC
sudo docker pull alpine
# 2) Executar a verificação de bypass não destrutiva
sudo python3 poc.py --mode check
Resultado esperado num alvo vulnerável / Expected on a vulnerable target:
small request -> HTTP 403 (AuthZ bloqueia)
oversized request -> HTTP 201 ou HTTP 404 (AuthZ contornado; daemon processou a requisição)
KO: Um
404 No such imagetambém é evidência de bypass — significa que a requisição passou pelo AuthZ (não 403) e alcançou a etapa de verificação de imagem do daemon. Baixealpinepreviamente para evitar confusão numa demonstração. PT: Um404 No such imageainda é evidência de bypass — a requisição passou pelo AuthZ (não 403) e alcançou a busca de imagem do daemon. Baixealpinepreviamente para evitar confusão numa demonstração.
Consulte docs/usage.md para uso completo. / See docs/usage.md for full usage.
KO: Use apenas num laboratório isolado que lhe pertença ou para o qual tenha autorização explícita de teste. Não execute contra APIs Docker remotas, servidores de terceiros, produção ou endpoints Docker expostos à internet. Os modos de demonstração de impacto (
rce-proof,host-command,reverse-shell-local) requerem uma flag de confirmação explícita para funcionar. PT: Use apenas num laboratório isolado que lhe pertença ou para o qual tenha autorização explícita de teste. Não execute contra APIs Docker remotas, servidores de terceiros, produção ou endpoints Docker expostos à internet. Os modos de demonstração de impacto (rce-proof,host-command,reverse-shell-local) requerem uma flag de confirmação explícita para funcionar.
Consulte docs/references.md. / See docs/references.md for references.
| Condição | Necessário | Motivo |
|---|
Acesso local à API Docker (/var/run/docker.sock) | Sim | O PoC envia requisições para o socket |
| Plugin AuthZ ativado com uma política que inspeciona o corpo | Sim | O alvo do bypass é a verificação AuthZ |
| Docker/Moby < 29.3.1 | Sim | Versões corrigidas rejeitam corpos de requisição grandes |
Imagem alpine presente localmente | Recomendado | Caso contrário, a criação retorna 404 No such image |