Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2021-3156-Project — Entorno de laboratorio educativo para CVE-2021-3156 (Baron Samedit) con un objetivo sudo vulnerable dockerizado, andamiaje de exploit, prueba canary, análisis de causa raíz y comparación con la versión parcheada. | Kitploit
Herramientas/GitHubGitHub/shams-ul-mehmood/cve-2021-3156-project
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHubshams-ul-mehmood/cve-2021-3156-project

CVE-2021-3156-Project

Entorno de laboratorio educativo para CVE-2021-3156 (Baron Samedit) con un objetivo sudo vulnerable dockerizado, andamiaje de exploit, prueba canary, análisis de causa raíz y comparación con la versión parcheada.

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
hace 12 díasAún no revisado

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


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

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

  1. Resumen de la CVE
  2. Qué hace especial a esta CVE
  3. Estructura del proyecto
  4. Entregables del equipo
  5. Inicio rápido
  6. Cómo funciona el exploit
  7. Prueba canario de vulnerabilidad
  8. Uso de exploit.py
  9. Restablecimiento e instantánea del laboratorio
  10. Comparación: parcheado vs vulnerable
  11. Referencias

Resumen de la CVE


Qué hace especial a esta CVE

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

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

Entregables del equipo

Miembro 1 — Entorno de laboratorio y verificación de la CVE

Miembro 2 — Desarrollo del exploit (script PoC)

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

ArchivoDescripción

Miembro 4 — Recopilación de pruebas, elaboración de informes e integración

ArchivoDescripción
proof/terminal_logs.txtPlantilla 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

Inicio rápido

1. Construir e iniciar el laboratorio

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 en el contenedor vulnerable

root@kitploit:~
docker exec -it baron_samedit_target bash

3. Confirmar las condiciones de vulnerabilidad

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 y ejecutar el 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 evidencia

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

Cómo funciona el 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

La causa raíz en una línea

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

Prueba canario de vulnerabilidad

La forma más segura de confirmar que CVE-2021-3156 está presente — sin necesidad de explotación:

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

Uso de 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

Comprobaciones previas


Restablecimiento e instantánea del laboratorio

Restablecimiento rápido (conserva el contenedor, limpia los archivos temporales)

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

Guardar una instantánea

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

Restaurar la instantánea

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

Restablecimiento completo (reconstruir desde cero)

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

Comparación: parcheado vs vulnerable

Para probar en el contenedor parcheado:

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

Referencias


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 Ciberseguridad ITSOLERA — Prácticas de Red Team, Verano 2026

Descargar herramienta
PropiedadValor
ID de CVECVE-2021-3156
AliasBaron Samedit
TipoDesbordamiento de búfer basado en heap → Escalada local de privilegios
Componentesudo — utilidad de privilegios de Linux (set_cmnd() en src/sudo.c)
Puntuación CVSS v37.8 Alta
VectorCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Versiones vulnerablessudo 1.8.2 – 1.8.31p2 y 1.9.0 – 1.9.5p1
Versiones parcheadassudo 1.9.5p2 (rama 1.9) / sudo 1.8.32 (rama 1.8)
Versión objetivo del laboratoriosudo 1.8.31 en Ubuntu 20.04
Aviso / KB del parcheSA: https://www.sudo.ws/security/advisories/unescape_overflow/
Descubierta porEquipo de Investigación de Qualys
Divulgada2021-01-26
Activa en entornos reales desde (código)~2011-07-09 (sudo 1.8.2) — ~10 años sin detectar
Autenticación requeridaSolo usuario local — NO se necesitan permisos de sudo
PropiedadCVE-2021-3156LPE 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 ataqueAnalizador de argumentos (pre-autenticación)Comprobación de permisos
ArchivoDescripción
lab/DockerfileUbuntu 20.04 con sudo 1.8.31 fijado (vulnerable); Python 3 instalado; cuenta labuser SIN acceso a sudo
lab/docker-compose.ymlOrquesta el objetivo vulnerable + el contenedor de referencia parcheado de Ubuntu 22.04
lab/evidence_helper.shScript Bash para capturar el estado del sistema (usuario, versión de sudo, canario) antes/después del exploit
lab/SETUP.mdPaso a paso: construir → iniciar → entrar → verificar la versión de sudo → ejecutar el canario → instantánea
lab/config_notes.mdExplica por qué no se necesita una configuración incorrecta, los ajustes de seguridad de Docker y la referencia de credenciales
ArchivoDescripción
exploit/exploit.pyFramework 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.txtConceptos 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
docs/root_cause_analysis.mdDetallado: 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.mdAviso de Qualys, MITRE, NVD, proyecto sudo, PoC de blasty, PoC de worawit, ExploitDB, GTFOBins, mapeo de CWE
docs/mitigation.mdapt-get install --only-upgrade sudo, canario de verificación, endurecimiento de AppArmor, monitorización con auditd, tabla de endurecimiento
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
SalidaSignificado
sudoedit: /\: not a regular file✅ VULNERABLE
Fallo de segmentación / Exit: 139✅ VULNERABLE (caída)
sudoedit: invalid argument❌ PARCHEADO (1.9.5p2+)
usage: sudoedit ...❌ PARCHEADO
ComprobaciónQué hace
Plataforma (Linux)Garantiza que estamos en Linux
sudoedit presenteLocaliza sudoedit en el PATH
Versión de sudoCompara con el rango vulnerable (1.8.2–1.8.31p2, 1.9.0–1.9.5p1)
No ser ya rootConfirma que UID ≠ 0 (la LPE tiene sentido)
Información del sistemaRecopila la versión de glibc + arquitectura para la estrategia de heap
Canario de vulnerabilidadEjecuta sudoedit -s '\' y clasifica la respuesta
PruebaVulnerable (sudo 1.8.31)Parcheado (sudo 1.9.5p2+)
sudo --versionSudo version 1.8.31Sudo version 1.9.x
sudoedit -s '\'not a regular file o fallo de segmentacióninvalid argument
exploit.py --safe-modeCanario: PASS → VULNERABLECanario: FAIL → PARCHEADO
exploit.py --cmd iduid=0(root)Falla en la etapa de comprobación
¿Parche presente?KB ausenteParche aplicado
FuenteURL
Aviso de 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
Aviso de sudohttps://www.sudo.ws/security/advisories/unescape_overflow/
PoC de blastyhttps://github.com/blasty/CVE-2021-3156
PoC de 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/