Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!
CVE-2021-3156-Project — Ambiente di laboratorio didattico per CVE-2021-3156 (Baron Samedit) con un target sudo vulnerabile dockerizzato, scaffold di exploit, test canary, analisi delle cause profonde e confronto con la versione patchata. | Kitploit
Ambiente di laboratorio didattico per CVE-2021-3156 (Baron Samedit) con un target sudo vulnerabile dockerizzato, scaffold di exploit, test canary, analisi delle cause profonde e confronto con la versione patchata.
⚠️ SOLO PER USO DIDATTICO / LABORATORIO ISOLATO
Tutti i test devono essere eseguiti esclusivamente all'interno del container Docker di laboratorio.
Non eseguire mai su sistemi reali, di produzione o condivisi.
Solo utente locale — NESSUNA autorizzazione sudo necessaria
Cosa Rende Speciale Questa CVE
Proprietà
CVE-2021-3156
LPE sudo tipica
Richiede voce sudoers
❌ No
✅ Sì
Richiede appartenenza al gruppo sudo
❌ No
✅ Sì
Richiede accesso sudo precedente
❌ No
✅ Sì
Funziona da account utente appena creato
✅ Sì
❌ No
Sfrutta il sistema dei permessi
❌ Lo bypassa completamente
✅ Ne abusa
Superficie d'attacco
Parser degli argomenti (pre-autenticazione)
Controllo dei permessi
Concetto chiave: l'overflow avviene in set_cmnd() — la funzione che
analizza gli argomenti — che viene eseguita prima che sudo consulti /etc/sudoers.
Un account creato 10 secondi fa con zero permessi può sfruttare questa vulnerabilità.
Struttura del Progetto
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
Risultati del Team
Membro 1 — Ambiente di Laboratorio e Verifica della CVE
File
Descrizione
lab/Dockerfile
Ubuntu 20.04 con sudo 1.8.31 fissato (vulnerabile); Python 3 installato; account labuser SENZA accesso sudo
lab/docker-compose.yml
Orchestra il target vulnerabile + container di riferimento Ubuntu 22.04 patchato
lab/evidence_helper.sh
Script Bash per acquisire lo stato del sistema (utente, versione sudo, canary) prima/dopo l'exploit
lab/SETUP.md
Passo dopo passo: build → avvio → accesso → verifica versione sudo → esecuzione canary → snapshot
lab/config_notes.md
Spiega perché non è necessaria alcuna configurazione errata, impostazioni di sicurezza Docker, riferimento credenziali
Membro 2 — Sviluppo dell'Exploit (Script PoC)
File
Descrizione
exploit/exploit.py
Framework Python completo: check_platform(), check_sudo_version(), run_canary_test(), get_system_info() + tre stub TODO dell'exploit (select_heap_strategy, build_overflow_argument, trigger_overflow_and_escalate) con riferimenti dettagliati ai PoC di blasty/worawit
exploit/payloads.txt
Concetti sull'overflow dell'heap, equivalente COMPRESSION_TRANSFORM (struttura degli argomenti), tre strategie sull'heap, template di log dei tentativi falliti, firme di rilevamento
Nota: il codice funzionante dell'exploit kernel/heap non è incluso per linee guida etiche.
Gli stub TODO di exploit.py fanno riferimento a https://github.com/blasty/CVE-2021-3156
e a https://github.com/worawit/CVE-2021-3156 come PoC pubblici autorevoli
da studiare e integrare per il vostro team.
Membro 3 — Analisi delle Cause Profonde e Ricerca
File
Descrizione
docs/root_cause_analysis.md
Dettagliato: discrepanza tra dimensione e copia in set_cmnd(), off-by-one con esempi di codice, diff della patch, catena dell'exploit, CVSS 7.8 metrica per metrica, cronologia di 10 anni, tabella dell'impatto sulle distribuzioni
apt-get install --only-upgrade sudo, canary di verifica, hardening AppArmor, monitoraggio auditd, tabella di hardening
Membro 4 — Raccolta delle Prove, Report e Integrazione
File
Descrizione
proof/terminal_logs.txt
Template per la raccolta delle prove (da compilare con l'output reale del lab)
proof/screenshots/
Directory per i 7 screenshot richiesti
report/CVE-2021-3156_Report.docx
Report professionale in 12 sezioni: copertina, sommario esecutivo, descrizione della CVE, analisi delle cause profonde, dettaglio CVSS, fasi di sfruttamento, spiegazione del codice, checklist delle prove, mitigazione, cronologia, riferimenti, disclaimer
Avvio Rapido
1. Build e Avvio del Lab
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
Atteso:
root@kitploit:~
NAME STATUS
baron_samedit_target running
baron_samedit_patched running
2. Accesso al Container Vulnerabile
root@kitploit:~
docker exec -it baron_samedit_target bash
3. Verifica delle Condizioni di Vulnerabilità
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
# 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
Come Funziona l'Exploit
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
┌─────────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────────┘
Dipartimento di Cybersecurity ITSOLERA — Tirocinio Red Team, Estate 2026