Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/shams-ul-mehmood/cve-2021-3156-project
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationApprentissage et ÉducationExploitation de BinairesLabs et Pratique
GitHubshams-ul-mehmood/cve-2021-3156-project

CVE-2021-3156-Project

Environnement de laboratoire pédagogique pour CVE-2021-3156 (Baron Samedit) avec une cible sudo vulnérable dockerisée, un squelette d'exploit, un test canary, une analyse de la cause racine et une comparaison avec la version corrigée.

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
5il y a 22 joursPas encore vérifié

CVE-2021-3156 — Baron Samedit

Débordement de tampon dans le tas dans sudo → Élévation locale de privilèges

Département Cybersécurité ITSOLERA | Stage Red Team 2026


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

⚠️ RÉSERVÉ À UN USAGE ÉDUCATIF / EN LABORATOIRE ISOLÉ Tous les tests doivent être effectués exclusivement dans le conteneur Docker du laboratoire. Ne jamais exécuter contre des systèmes réels, de production ou partagés.


Table des matières

  1. Aperçu du CVE
  2. Qu'est-ce qui rend ce CVE spécial
  3. Structure du projet
  4. Livrables de l'équipe
  5. Démarrage rapide
  6. Comment fonctionne l'exploit
  7. Test canari de vulnérabilité
  8. Utilisation d'exploit.py
  9. Réinitialisation et instantané du laboratoire
  10. Comparaison version corrigée vs vulnérable
  11. Références

Aperçu du CVE


Qu'est-ce qui rend ce CVE spécial

Point clé: Le débordement se produit dans set_cmnd() — la fonction qui analyse les arguments — qui s'exécute avant que sudo ne consulte /etc/sudoers. Un compte créé il y a 10 secondes avec zéro permission peut exploiter cette faille.


Structure du projet

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

Livrables de l'équipe

Membre 1 — Environnement de laboratoire et vérification du CVE

Membre 2 — Développement de l'exploit (script PoC)

Remarque: Le code fonctionnel d'exploit noyau/tas n'est pas inclus conformément aux directives éthiques. Les stubs TODO de exploit.py référencent https://github.com/blasty/CVE-2021-3156 et https://github.com/worawit/CVE-2021-3156 comme PoCs publics de référence que votre équipe doit étudier et intégrer.

Membre 3 — Analyse de la cause racine et recherche

FichierDescription

Membre 4 — Collecte de preuves, rapport et intégration

FichierDescription
proof/terminal_logs.txtModèle de collecte de preuves (à remplir avec la sortie réelle du laboratoire)
proof/screenshots/Répertoire pour les 7 captures d'écran requises
report/CVE-2021-3156_Report.docx

Démarrage rapide

1. Construire et démarrer le laboratoire

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

Résultat attendu :

root@kitploit:~
NAME                      STATUS
baron_samedit_target      running
baron_samedit_patched     running

2. Entrer dans le conteneur vulnérable

root@kitploit:~
docker exec -it baron_samedit_target bash

3. Confirmer les conditions de vulnérabilité

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. Copier et exécuter l'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. Capturer les preuves

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

Comment fonctionne 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

La cause racine en une ligne

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

Test canari de vulnérabilité

Le moyen le plus sûr de confirmer la présence de CVE-2021-3156 — aucune exploitation requise :

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

Utilisation d'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é-vérifications effectuées


Réinitialisation et instantané du laboratoire

Réinitialisation rapide (conserver le conteneur, supprimer les fichiers temporaires)

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

Enregistrer un instantané

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

Restaurer l'instantané

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

Réinitialisation complète (reconstruction depuis zéro)

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

Comparaison version corrigée vs vulnérable

Pour tester sur le conteneur corrigé :

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

Références


Avis éthique

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                      │
└─────────────────────────────────────────────────────────────────┘

Département Cybersécurité ITSOLERA — Stage Red Team, été 2026

Télécharger l’outil
PropriétéValeur
ID CVECVE-2021-3156
SurnomBaron Samedit
TypeDébordement de tampon dans le tas → Élévation locale de privilèges
Composantsudo — utilitaire de privilèges Linux (set_cmnd() dans src/sudo.c)
Score CVSS v37.8 Élevé
VecteurCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Versions vulnérablessudo 1.8.2 – 1.8.31p2 et 1.9.0 – 1.9.5p1
Versions corrigéessudo 1.9.5p2 (branche 1.9) / sudo 1.8.32 (branche 1.8)
Version cible du laboratoiresudo 1.8.31 sur Ubuntu 20.04
Correctif / Avis de sécuritéAvis de sécurité : https://www.sudo.ws/security/advisories/unescape_overflow/
Découvert parQualys Research Team
Divulgué2021-01-26
Exploité dans la nature (code)~2011-07-09 (sudo 1.8.2) — ~10 ans sans détection
Authentification requiseUtilisateur local uniquement — aucun privilège sudo requis
PropriétéCVE-2021-3156LPE sudo classique
Nécessite une entrée sudoers❌ Non✅ Oui
Nécessite l'appartenance au groupe sudo❌ Non✅ Oui
Nécessite un accès sudo préalable❌ Non✅ Oui
Fonctionne depuis un tout nouveau compte utilisateur✅ Oui❌ Non
Exploite le système de permissions❌ Le contourne entièrement✅ En abuse
Surface d'attaqueAnalyseur d'arguments (pré-authentification)Vérification des permissions
FichierDescription
lab/DockerfileUbuntu 20.04 avec sudo 1.8.31 épinglé (vulnérable) ; Python 3 installé ; compte labuser sans aucun accès sudo
lab/docker-compose.ymlOrchestre la cible vulnérable + le conteneur de référence corrigé Ubuntu 22.04
lab/evidence_helper.shScript Bash pour capturer l'état du système (utilisateur, version de sudo, canari) avant/après l'exploit
lab/SETUP.mdÉtape par étape : construction → démarrage → entrée → vérification de la version de sudo → exécution du canari → instantané
lab/config_notes.mdExplique pourquoi aucune mauvaise configuration n'est nécessaire, paramètres de sécurité Docker, référence des identifiants
FichierDescription
exploit/exploit.pyFramework Python complet : check_platform(), check_sudo_version(), run_canary_test(), get_system_info() + trois stubs d'exploit TODO (select_heap_strategy, build_overflow_argument, trigger_overflow_and_escalate) avec des références détaillées aux PoCs de blasty/worawit
exploit/payloads.txtConcepts de débordement de tas, équivalent COMPRESSION_TRANSFORM (structure d'arguments), trois stratégies de tas, modèle de journal des tentatives échouées, signatures de détection
docs/root_cause_analysis.md
Détaillé : inadéquation taille vs copie dans set_cmnd(), off-by-one avec exemples de code, diff du patch, chaîne d'exploitation, CVSS 7.8 métrique par métrique, chronologie de 10 ans, tableau d'impact des distributions
docs/references.mdAvis Qualys, MITRE, NVD, projet sudo, PoC blasty, PoC worawit, ExploitDB, GTFOBins, mappage CWE
docs/mitigation.mdapt-get install --only-upgrade sudo, canari de vérification, durcissement AppArmor, surveillance auditd, tableau de durcissement
Rapport professionnel en 12 sections : page de garde, résumé exécutif, description du CVE, analyse de la cause racine, détail CVSS, étapes d'exploitation, explication du code, liste de contrôle des preuves, mesures d'atténuation, chronologie, références, avertissement
SortieSignification
sudoedit: /\: not a regular file✅ VULNÉRABLE
Segmentation fault / Exit: 139✅ VULNÉRABLE (crash)
sudoedit: invalid argument❌ CORRIGÉ (1.9.5p2+)
usage: sudoedit ...❌ CORRIGÉ
VérificationRôle
Plateforme (Linux)Vérifie que nous sommes sous Linux
Présence de sudoeditRecherche sudoedit dans le PATH
Version de sudoCompare avec la plage vulnérable (1.8.2–1.8.31p2, 1.9.0–1.9.5p1)
Pas déjà rootConfirme que l'UID ≠ 0 (l'élévation de privilèges a du sens)
Informations systèmeCollecte la version de glibc + l'architecture pour la stratégie de tas
Canari de vulnérabilitéExécute sudoedit -s '\' et classe la réponse
TestVulnérable (sudo 1.8.31)Corrigé (sudo 1.9.5p2+)
sudo --versionSudo version 1.8.31Sudo version 1.9.x
sudoedit -s '\'not a regular file ou segfaultinvalid argument
exploit.py --safe-modeCanari : RÉUSSI → VULNÉRABLECanari : ÉCHEC → CORRIGÉ
exploit.py --cmd iduid=0(root)Échoue à l'étape de vérification
Correctif présent ?Correctif absentCorrectif appliqué
SourceURL
Avis 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
Avis sudohttps://www.sudo.ws/security/advisories/unescape_overflow/
PoC blastyhttps://github.com/blasty/CVE-2021-3156
PoC 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/