CVE-2021-3156 — Baron Samedit
Estouro de buffer baseado em heap no sudo → Escalonamento local de privilégios
Departamento de Cibersegurança ITSOLERA | Estágio Red Team 2026
██████╗ █████╗ ██████╗ ██████╗ ███╗ ██╗ ███████╗ █████╗ ███╗ ███╗███████╗██████╗ ██╗████████╗
██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗ ██║ ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
██████╔╝███████║██████╔╝██║ ██║██╔██╗ ██║ ███████╗███████║██╔████╔██║█████╗ ██║ ██║██║ ██║
██╔══██╗██╔══██║██╔══██╗██║ ██║██║╚██╗██║ ╚════██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██║██║ ██║
██████╔╝██║ ██║██║ ██║╚██████╔╝██║ ╚████║ ███████║██║ ██║██║ ╚═╝ ██║███████╗██████╔╝██║ ██║
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝ ╚═╝
⚠️ APENAS PARA USO EDUCACIONAL / LABORATÓRIO ISOLADO
Todos os testes devem ser realizados exclusivamente dentro do contêiner de laboratório Docker.
Nunca execute contra sistemas reais, de produção ou compartilhados.
Índice
- Visão Geral do CVE
- O Que Torna Este CVE Especial
- Estrutura do Projeto
- Entregas da Equipe
- Início Rápido
- Como o Exploit Funciona
- Teste Canário de Vulnerabilidade
- Uso do exploit.py
- Reset do Laboratório e Snapshot
- Comparação Corrigido vs Vulnerável
- Referências
Visão Geral do CVE
| Propriedade | Valor |
|---|
| ID do CVE | CVE-2021-3156 |
| Apelido | Baron Samedit |
| Tipo | Estouro de buffer baseado em heap → Escalonamento local de privilégios |
| Componente | sudo — utilitário de privilégios do Linux (set_cmnd() em src/sudo.c) |
| Pontuação CVSS v3 | 7.8 Alto |
| Vetor | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Versões Vulneráveis | sudo 1.8.2 – 1.8.31p2 e 1.9.0 – 1.9.5p1 |
| Versões Corrigidas | sudo 1.9.5p2 (branch 1.9) / sudo 1.8.32 (branch 1.8) |
| Versão Alvo do Laboratório | sudo 1.8.31 no Ubuntu 20.04 |
| Patch KB / Advisory | SA: https://www.sudo.ws/security/advisories/unescape_overflow/ |
| Descoberto Por | Qualys Research Team |
| Divulgado | 2021-01-26 |
| Em campo desde (código) | ~2011-07-09 (sudo 1.8.2) — ~10 anos sem detecção |
| Autenticação Necessária | Somente usuário local — NENHUMA permissão sudo necessária |
O Que Torna Este CVE Especial
| Propriedade | CVE-2021-3156 | LPE típico do sudo |
|---|
| Requer entrada no sudoers | ❌ Não | ✅ Sim |
| Requer associação ao grupo sudo | ❌ Não | ✅ Sim |
| Requer qualquer acesso sudo anterior | ❌ Não | ✅ Sim |
| Funciona a partir de conta de usuário recém-criada | ✅ Sim | ❌ Não |
| Explora o sistema de permissões | ❌ Ignora completamente | ✅ Abusa dele |
| Superfície de ataque | Analisador de argumentos (pré-autenticação) | Verificação de permissão |
Ponto-chave: O estouro ocorre em set_cmnd() — a função que analisa os argumentos — que é executada antes de o sudo consultar /etc/sudoers. Uma conta criada há 10 segundos, com zero permissões, pode explorar isso.
Estrutura do Projeto
CVE-2021-3156-Project/
│
├── README.md ← you are here
│
├── lab/ ← Member 1: Lab Environment
│ ├── Dockerfile ← Ubuntu 20.04 + sudo 1.8.31 (pinned)
│ ├── docker-compose.yml ← vulnerable target + patched reference
│ ├── evidence_helper.sh ← pre/post-exploit state capture
│ ├── SETUP.md ← step-by-step VM/Docker guide
│ └── config_notes.md ← CVE conditions & container details
│
├── exploit/ ← Member 2: Exploit Development
│ ├── exploit.py ← Python LPE framework + canary test
│ └── payloads.txt ← heap overflow research notes
│
├── docs/ ← Member 3: Research & Documentation
│ ├── root_cause_analysis.md ← set_cmnd() deep dive + off-by-one
│ ├── references.md ← all sources, PoCs, CWE mapping
│ └── mitigation.md ← sudo upgrade + hardening checklist
│
├── proof/ ← Member 4: Evidence Collection
│ ├── screenshots/ ← exploitation screenshots
│ └── terminal_logs.txt ← command output template + logs
│
└── report/
└── CVE-2021-3156_Report.docx ← Member 4: Final professional report
Entregas da Equipe
Membro 1 — Ambiente de Laboratório e Verificação do CVE
| Arquivo | Descrição |
|---|
lab/Dockerfile | Ubuntu 20.04 com sudo 1.8.31 fixado (vulnerável); Python 3 instalado; conta labuser sem acesso sudo |
lab/docker-compose.yml | Orquestra o alvo vulnerável + contêiner de referência Ubuntu 22.04 corrigido |
lab/evidence_helper.sh | Script Bash para capturar o estado do sistema (usuário, versão do sudo, canário) antes/depois do exploit |
lab/SETUP.md | Passo a passo: construir → iniciar → entrar → verificar a versão do sudo → executar o canário → snapshot |
lab/config_notes.md | Explica por que nenhuma configuração incorreta é necessária, configurações de segurança do Docker, referência de credenciais |
Membro 2 — Desenvolvimento do Exploit (Script PoC)
| Arquivo | Descrição |
|---|
exploit/exploit.py | Framework Python completo: check_platform(), check_sudo_version(), run_canary_test(), get_system_info() + três stubs TODO do exploit (select_heap_strategy, build_overflow_argument, trigger_overflow_and_escalate) com referências detalhadas aos PoCs blasty/worawit |
exploit/payloads.txt | Conceitos de estouro de heap, equivalente a COMPRESSION_TRANSFORM (estrutura de argumentos), três estratégias de heap, modelo de log de tentativas falhas, assinaturas de detecção |
Nota: O código funcional do exploit de kernel/heap não está incluído por diretrizes éticas.
Os stubs TODO do exploit.py referenciam https://github.com/blasty/CVE-2021-3156
e https://github.com/worawit/CVE-2021-3156 como os PoCs públicos oficiais
para sua equipe estudar e integrar.
Membro 3 — Análise de Causa Raiz e Pesquisa
| Arquivo | Descrição |
|---|
docs/root_cause_analysis.md | Detalhado: incompatibilidade de tamanho vs cópia em set_cmnd(), off-by-one com exemplos de código, diff do patch, cadeia do exploit, CVSS 7.8 métrica por métrica, linha do tempo de 10 anos, tabela de impacto nas distribuições |
docs/references.md | Advisory da Qualys, MITRE, NVD, projeto sudo, PoC do blasty, PoC do worawit, ExploitDB, GTFOBins, mapeamento CWE |
docs/mitigation.md | apt-get install --only-upgrade sudo, canário de verificação, endurecimento AppArmor, monitoramento auditd, tabela de endurecimento |
Membro 4 — Coleta de Provas, Relatórios e Integração
| Arquivo | Descrição |
|---|
proof/terminal_logs.txt | Modelo de coleta de evidências (preencher com a saída real do laboratório) |
proof/screenshots/ | Diretório para 7 capturas de tela obrigatórias |
report/CVE-2021-3156_Report.docx | Relatório profissional com 12 seções: capa, resumo executivo, descrição do CVE, análise de causa raiz, detalhamento do CVSS, etapas de exploração, explicação do código, checklist de provas, mitigação, linha do tempo, referências, aviso de isenção |
Início Rápido
1. Construir e Iniciar o Laboratório
cd CVE-2021-3156-Project/lab/
# Build the vulnerable image (downloads Ubuntu 20.04, pins sudo 1.8.31)
docker compose build
# Start both containers
docker compose up -d
# Confirm containers are running
docker compose ps