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-2021-3156-Project — Ambiente de laboratório educacional para CVE-2021-3156 (Baron Samedit) com alvo sudo vulnerável dockerizado, scaffold de exploit, teste canário, análise de causa raiz e comparação com versão corrigida. | Kitploit
Ferramentas/GitHubGitHub/shams-ul-mehmood/cve-2021-3156-project
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoAprendizado e EducaçãoExploração de BináriosLabs e Prática
GitHubshams-ul-mehmood/cve-2021-3156-project

CVE-2021-3156-Project

Ambiente de laboratório educacional para CVE-2021-3156 (Baron Samedit) com alvo sudo vulnerável dockerizado, scaffold de exploit, teste canário, análise de causa raiz e comparação com versão corrigida.

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
Ver Repositório
há 12 diasAinda não revisado

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


root@kitploit:~
  ██████╗  █████╗ ██████╗  ██████╗ ███╗   ██╗    ███████╗ █████╗ ███╗   ███╗███████╗██████╗ ██╗████████╗
  ██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗  ██║    ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
  ██████╔╝███████║██████╔╝██║   ██║██╔██╗ ██║    ███████╗███████║██╔████╔██║█████╗  ██║  ██║██║   ██║
  ██╔══██╗██╔══██║██╔══██╗██║   ██║██║╚██╗██║    ╚════██║██╔══██║██║╚██╔╝██║██╔══╝  ██║  ██║██║   ██║
  ██████╔╝██║  ██║██║  ██║╚██████╔╝██║ ╚████║    ███████║██║  ██║██║ ╚═╝ ██║███████╗██████╔╝██║   ██║
  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝    ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝╚═════╝ ╚═╝   ╚═╝

⚠️ 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

  1. Visão Geral do CVE
  2. O Que Torna Este CVE Especial
  3. Estrutura do Projeto
  4. Entregas da Equipe
  5. Início Rápido
  6. Como o Exploit Funciona
  7. Teste Canário de Vulnerabilidade
  8. Uso do exploit.py
  9. Reset do Laboratório e Snapshot
  10. Comparação Corrigido vs Vulnerável
  11. Referências

Visão Geral do CVE


O Que Torna Este CVE Especial

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

root@kitploit:~
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

Membro 2 — Desenvolvimento do Exploit (Script PoC)

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

ArquivoDescrição

Membro 4 — Coleta de Provas, Relatórios e Integração

ArquivoDescrição
proof/terminal_logs.txtModelo 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.docxRelató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

root@kitploit:~
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

Esperado:

root@kitploit:~
NAME                      STATUS
baron_samedit_target      running
baron_samedit_patched     running

2. Entrar no Contêiner Vulnerável

root@kitploit:~
docker exec -it baron_samedit_target bash

3. Confirmar as Condições de Vulnerabilidade

root@kitploit:~
# Inside the container as labuser

whoami                         # Expected: labuser
id                             # Expected: uid=1000(labuser)...
sudo --version                 # Expected: Sudo version 1.8.31
sudo -l                        # Expected: Sorry, user labuser may not run sudo...
sudoedit -s '\' 2>&1          # Expected: NOT "usage:" → VULNERABLE

4. Copiar e Executar o Exploit

root@kitploit:~
# From host machine
docker cp exploit/exploit.py baron_samedit_target:/home/labuser/

# Inside container
python3 exploit.py --check-only      # verify all prerequisites pass
python3 exploit.py --safe-mode       # canary only, no exploitation
python3 exploit.py --cmd "id"        # LPE → show root identity
python3 exploit.py --cmd "whoami /all" --output /tmp/proof.txt

5. Capturar Evidências

root@kitploit:~
# Inside container — before exploit
~/evidence_helper.sh > /tmp/before.txt

# After exploit
~/evidence_helper.sh > /tmp/after.txt

# Copy to host
docker cp baron_samedit_target:/tmp/before.txt proof/terminal_logs_before.txt
docker cp baron_samedit_target:/tmp/after.txt  proof/terminal_logs_after.txt

Como o Exploit Funciona

root@kitploit:~
Step 1: Run 'sudoedit -s <crafted_argument>'
        ↓
Step 2: sudo calls set_cmnd() to parse arguments in shell mode
        ↓
Step 3: set_cmnd() COUNTS bytes for the cmnd_args buffer (correct size)
        ↓
Step 4: set_cmnd() COPIES bytes — but reads 1 byte past the null
        terminator of any argument ending with '\'
        ↓
Step 5: Off-by-one overflow writes 1 unexpected byte beyond cmnd_args
        ↓
Step 6: Heap grooming (environment variable layout manipulation) ensures
        a valuable sudo struct sits adjacent to the overflowed buffer
        ↓
Step 7: The overflow byte corrupts a pointer in the adjacent struct
        ↓
Step 8: sudo follows the corrupted pointer → executes attacker-controlled
        command (via SUDO_EDITOR) with root privileges
        ↓
Result: uid=0(root) — from a user with ZERO sudo permissions

A Causa Raiz em Uma Linha

root@kitploit:~
size_calculation("A\") = 2 bytes  ≠  copy("A\") = writes 3 bytes → overflow

Teste Canário de Vulnerabilidade

A forma mais segura de confirmar a presença do CVE-2021-3156 — sem necessidade de exploração:

root@kitploit:~
sudoedit -s '\' 2>&1; echo "Exit: $?"

Uso do exploit.py

root@kitploit:~
Usage: python3 exploit.py [OPTIONS]

Modes (mutually exclusive):
  --check-only        Run all pre-checks only — no exploitation
  --safe-mode         Run canary test only — confirm vulnerability
  --cmd COMMAND       Execute COMMAND as root after successful LPE

Options:
  --verbose, -v       Show detailed heap/system debug output
  --output, -o FILE   Save all output to FILE
  --no-colour         Disable ANSI colour codes (for log files)
  --help              Show this help message

Examples:
  python3 exploit.py --check-only
  python3 exploit.py --safe-mode
  python3 exploit.py --cmd "id"
  python3 exploit.py --cmd "cat /etc/shadow" --output proof/root_output.txt
  python3 exploit.py --cmd "whoami" --verbose

Pré-verificações Executadas


Reset do Laboratório e Snapshot

Reset Rápido (manter o contêiner, limpar arquivos temporários)

root@kitploit:~
docker exec baron_samedit_target bash -c "rm -f /tmp/*.txt /tmp/exploit* /home/labuser/exploit.py"

Salvar um Snapshot

root@kitploit:~
docker commit baron_samedit_target baron-samedit:clean-state
echo "[+] Snapshot saved as baron-samedit:clean-state"

Restaurar Snapshot

root@kitploit:~
docker compose down
docker run -it --name baron_samedit_target baron-samedit:clean-state bash

Reset Completo (reconstruir do zero)

root@kitploit:~
docker compose down -v
docker compose up -d --build

Comparação Corrigido vs Vulnerável

Para testar no contêiner corrigido:

root@kitploit:~
docker exec -it baron_samedit_patched bash
# Then repeat the canary test — should output "invalid argument"

Referências


Aviso Ético

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│  This project was created for EDUCATIONAL PURPOSES ONLY as      │
│  part of the ITSOLERA Cybersecurity Red Team Internship 2026.   │
│                                                                 │
│  ✅ DO:  Use against the isolated Docker lab only               │
│  ✅ DO:  Study the vulnerability to understand heap exploits    │
│  ✅ DO:  Contribute findings to the team report                 │
│                                                                 │
│  ❌ DON'T: Run against any real system, VM, or cloud instance   │
│  ❌ DON'T: Share outside the internship programme               │
│  ❌ DON'T: Use for any unauthorised access                      │
└─────────────────────────────────────────────────────────────────┘

Departamento de Cibersegurança ITSOLERA — Estágio Red Team, Verão 2026

Baixar ferramenta
PropriedadeValor
ID do CVECVE-2021-3156
ApelidoBaron Samedit
TipoEstouro de buffer baseado em heap → Escalonamento local de privilégios
Componentesudo — utilitário de privilégios do Linux (set_cmnd() em src/sudo.c)
Pontuação CVSS v37.8 Alto
VetorCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Versões Vulneráveissudo 1.8.2 – 1.8.31p2 e 1.9.0 – 1.9.5p1
Versões Corrigidassudo 1.9.5p2 (branch 1.9) / sudo 1.8.32 (branch 1.8)
Versão Alvo do Laboratóriosudo 1.8.31 no Ubuntu 20.04
Patch KB / AdvisorySA: https://www.sudo.ws/security/advisories/unescape_overflow/
Descoberto PorQualys Research Team
Divulgado2021-01-26
Em campo desde (código)~2011-07-09 (sudo 1.8.2) — ~10 anos sem detecção
Autenticação NecessáriaSomente usuário local — NENHUMA permissão sudo necessária
PropriedadeCVE-2021-3156LPE 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 ataqueAnalisador de argumentos (pré-autenticação)Verificação de permissão
ArquivoDescrição
lab/DockerfileUbuntu 20.04 com sudo 1.8.31 fixado (vulnerável); Python 3 instalado; conta labuser sem acesso sudo
lab/docker-compose.ymlOrquestra o alvo vulnerável + contêiner de referência Ubuntu 22.04 corrigido
lab/evidence_helper.shScript Bash para capturar o estado do sistema (usuário, versão do sudo, canário) antes/depois do exploit
lab/SETUP.mdPasso a passo: construir → iniciar → entrar → verificar a versão do sudo → executar o canário → snapshot
lab/config_notes.mdExplica por que nenhuma configuração incorreta é necessária, configurações de segurança do Docker, referência de credenciais
ArquivoDescrição
exploit/exploit.pyFramework 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.txtConceitos 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
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.mdAdvisory da Qualys, MITRE, NVD, projeto sudo, PoC do blasty, PoC do worawit, ExploitDB, GTFOBins, mapeamento CWE
docs/mitigation.mdapt-get install --only-upgrade sudo, canário de verificação, endurecimento AppArmor, monitoramento auditd, tabela de endurecimento
SaídaSignificado
sudoedit: /\: not a regular file✅ VULNERÁVEL
Segmentation fault / Exit: 139✅ VULNERÁVEL (falha)
sudoedit: invalid argument❌ CORRIGIDO (1.9.5p2+)
usage: sudoedit ...❌ CORRIGIDO
VerificaçãoO Que Ela Faz
Plataforma (Linux)Garante que estamos no Linux
sudoedit presenteEncontra o sudoedit no PATH
Versão do sudoCompara com a faixa vulnerável (1.8.2–1.8.31p2, 1.9.0–1.9.5p1)
Já não é rootConfirma UID ≠ 0 (LPE é significativo)
Informações do sistemaColeta a versão do glibc + arquitetura para a estratégia de heap
Canário de vulnerabilidadeExecuta sudoedit -s '\' e classifica a resposta
TesteVulnerável (sudo 1.8.31)Corrigido (sudo 1.9.5p2+)
sudo --versionSudo version 1.8.31Sudo version 1.9.x
sudoedit -s '\'not a regular file ou falha de segmentaçãoinvalid argument
exploit.py --safe-modeCanário: PASSOU → VULNERÁVELCanário: FALHOU → CORRIGIDO
exploit.py --cmd iduid=0(root)Falha na etapa de verificação
Patch presente?KB ausentePatch aplicado
FonteURL
Advisory da Qualyshttps://blog.qualys.com/vulnerabilities-threat-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3156
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2021-3156
Advisory do sudohttps://www.sudo.ws/security/advisories/unescape_overflow/
PoC do blastyhttps://github.com/blasty/CVE-2021-3156
PoC do worawithttps://github.com/worawit/CVE-2021-3156
ExploitDB #49521https://www.exploit-db.com/exploits/49521
Rapid7 Metasploithttps://www.rapid7.com/db/modules/exploit/linux/local/sudo_baron_samedit/
GTFOBins — sudohttps://gtfobins.github.io/gtfobins/sudo/