CVE-2021-3156 — Baron Samedit
Desbordamiento de búfer basado en heap en sudo → Escalada local de privilegios
Departamento de Ciberseguridad ITSOLERA | Prácticas de Red Team 2026
██████╗ █████╗ ██████╗ ██████╗ ███╗ ██╗ ███████╗ █████╗ ███╗ ███╗███████╗██████╗ ██╗████████╗
██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗ ██║ ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
██████╔╝███████║██████╔╝██║ ██║██╔██╗ ██║ ███████╗███████║██╔████╔██║█████╗ ██║ ██║██║ ██║
██╔══██╗██╔══██║██╔══██╗██║ ██║██║╚██╗██║ ╚════██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██║██║ ██║
██████╔╝██║ ██║██║ ██║╚██████╔╝██║ ╚████║ ███████║██║ ██║██║ ╚═╝ ██║███████╗██████╔╝██║ ██║
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝ ╚═╝
⚠️ SOLO PARA USO EDUCATIVO / LABORATORIO AISLADO
Todas las pruebas deben realizarse exclusivamente dentro del contenedor de laboratorio Docker.
Nunca ejecutar contra sistemas reales, de producción o compartidos.
Tabla de contenidos
- Resumen de la CVE
- Qué hace especial a esta CVE
- Estructura del proyecto
- Entregables del equipo
- Inicio rápido
- Cómo funciona el exploit
- Prueba canario de vulnerabilidad
- Uso de exploit.py
- Restablecimiento e instantánea del laboratorio
- Comparación: parcheado vs vulnerable
- Referencias
Resumen de la CVE
| Propiedad | Valor |
|---|
| ID de CVE | CVE-2021-3156 |
| Alias | Baron Samedit |
| Tipo | Desbordamiento de búfer basado en heap → Escalada local de privilegios |
| Componente | sudo — utilidad de privilegios de Linux (set_cmnd() en src/sudo.c) |
| Puntuación CVSS v3 | 7.8 Alta |
| Vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Versiones vulnerables | sudo 1.8.2 – 1.8.31p2 y 1.9.0 – 1.9.5p1 |
| Versiones parcheadas | sudo 1.9.5p2 (rama 1.9) / sudo 1.8.32 (rama 1.8) |
| Versión objetivo del laboratorio | sudo 1.8.31 en Ubuntu 20.04 |
| Aviso / KB del parche | SA: https://www.sudo.ws/security/advisories/unescape_overflow/ |
| Descubierta por | Equipo de Investigación de Qualys |
| Divulgada | 2021-01-26 |
| Activa en entornos reales desde (código) | ~2011-07-09 (sudo 1.8.2) — ~10 años sin detectar |
| Autenticación requerida | Solo usuario local — NO se necesitan permisos de sudo |
Qué hace especial a esta CVE
| Propiedad | CVE-2021-3156 | LPE típico de sudo |
|---|
| Requiere entrada en sudoers | ❌ No | ✅ Sí |
| Requiere pertenencia al grupo sudo | ❌ No | ✅ Sí |
| Requiere acceso previo a sudo | ❌ No | ✅ Sí |
| Funciona desde una cuenta de usuario recién creada | ✅ Sí | ❌ No |
| Explota el sistema de permisos | ❌ Lo omite por completo | ✅ Abusa de él |
| Superficie de ataque | Analizador de argumentos (pre-autenticación) | Comprobación de permisos |
Idea clave: el desbordamiento ocurre en set_cmnd() — la función que analiza los argumentos — que se ejecuta antes de que sudo consulte /etc/sudoers. Una cuenta creada hace 10 segundos con cero permisos puede explotar esto.
Estructura del proyecto
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
Entregables del equipo
Miembro 1 — Entorno de laboratorio y verificación de la CVE
| Archivo | Descripción |
|---|
lab/Dockerfile | Ubuntu 20.04 con sudo 1.8.31 fijado (vulnerable); Python 3 instalado; cuenta labuser SIN acceso a sudo |
lab/docker-compose.yml | Orquesta el objetivo vulnerable + el contenedor de referencia parcheado de Ubuntu 22.04 |
lab/evidence_helper.sh | Script Bash para capturar el estado del sistema (usuario, versión de sudo, canario) antes/después del exploit |
lab/SETUP.md | Paso a paso: construir → iniciar → entrar → verificar la versión de sudo → ejecutar el canario → instantánea |
lab/config_notes.md | Explica por qué no se necesita una configuración incorrecta, los ajustes de seguridad de Docker y la referencia de credenciales |
Miembro 2 — Desarrollo del exploit (script PoC)
| Archivo | Descripción |
|---|
exploit/exploit.py | Framework completo en Python: check_platform(), check_sudo_version(), run_canary_test(), get_system_info() + tres stubs TODO del exploit (select_heap_strategy, build_overflow_argument, trigger_overflow_and_escalate) con referencias detalladas a los PoC de blasty/worawit |
exploit/payloads.txt | Conceptos de desbordamiento de heap, equivalente de COMPRESSION_TRANSFORM (estructura de argumentos), tres estrategias de heap, plantilla de registro de intentos fallidos, firmas de detección |
Nota: el código funcional del exploit de kernel/heap no se incluye según las pautas éticas.
Los stubs TODO de exploit.py referencian https://github.com/blasty/CVE-2021-3156
y https://github.com/worawit/CVE-2021-3156 como los PoC públicos de referencia
que tu equipo debe estudiar e integrar.
Miembro 3 — Análisis de causa raíz e investigación
| Archivo | Descripción |
|---|
docs/root_cause_analysis.md | Detallado: discrepancia entre tamaño y copia en set_cmnd(), off-by-one con ejemplos de código, diff del parche, cadena de explotación, CVSS 7.8 métrica por métrica, cronología de 10 años, tabla de impacto por distribución |
docs/references.md | Aviso de Qualys, MITRE, NVD, proyecto sudo, PoC de blasty, PoC de worawit, ExploitDB, GTFOBins, mapeo de CWE |
docs/mitigation.md | apt-get install --only-upgrade sudo, canario de verificación, endurecimiento de AppArmor, monitorización con auditd, tabla de endurecimiento |
| Archivo | Descripción |
|---|
proof/terminal_logs.txt | Plantilla de recopilación de evidencia (completar con la salida real del laboratorio) |
proof/screenshots/ | Directorio para las 7 capturas de pantalla requeridas |
report/CVE-2021-3156_Report.docx | Informe profesional de 12 secciones: portada, resumen ejecutivo, descripción de la CVE, análisis de causa raíz, desglose de CVSS, pasos de explotación, explicación del código, lista de verificación de pruebas, mitigación, cronología, referencias, descargo de responsabilidad |
Inicio rápido
1. Construir e iniciar el laboratorio
cd CVE-2021-3156-Project/lab/
# Build the vulnerable image (downloads Ubuntu 20.04, pins sudo 1.8.31)
docker compose build