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
CVE-2021-3156 — CVE-2021-3156 (Baron Samedit) Report and Research | Kitploit
Outils/GitHubGitHub/ijbaig/cve-2021-3156
Privilege EscalationVulnerability AnalysisExploitationLearning & EducationBinary ExploitationLabs & Practice
GitHubijbaig/cve-2021-3156

CVE-2021-3156

CVE-2021-3156 (Baron Samedit) Report and Research

Voir le dépôt
il y a 1 moisPas encore vérifié

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

Analyse approfondie de la chaîne d'exploitation : CVE-2021-3156 (Baron Samedit)

Auteur : IJ Baig
Date : 7 juillet 2026


1. ID CVE, versions concernées et confirmation de compilation

  • ID CVE : CVE-2021-3156
  • Type de vulnérabilité : Débordement de tampon basé sur le tas (Heap-Based Buffer Overflow)
  • Plage de versions concernées : Versions héritées de Sudo 1.8.2 à 1.8.31p2, et versions stables 1.9.0 à 1.9.5p1.
  • Version cible compilée : Sudo 1.9.5p1

1.1 Configuration de l'environnement

Pour analyser cette vulnérabilité en toute sécurité, la version vulnérable de Sudo a été compilée dans un environnement isolé et non productif.

OS Info

1.2 Compilation à partir des sources

Le code source de Sudo 1.9.5p1 a été téléchargé et compilé localement en utilisant les utilitaires make standards. On a pris soin de l'exécuter depuis un répertoire local afin qu'il n'écrase pas le binaire sudo natif et patché du système hôte.

Compilation Step 1

Confirmation de compilation : Après la compilation, le binaire personnalisé a été exécuté pour vérifier que la version vulnérable correcte avait été construite.

Make Install

Sudo Version

2. Analyse de la cause racine

2.1 Emplacement du code vulnérable

  • Fichier : plugins/sudoers/sudoers.c
  • Fonction : set_cmnd() (environ à la ligne 864 dans la version 1.9.5p1)

Vulnerable Code

2.2 Explication de la vulnérabilité

Imaginez que vous ayez un assistant dont le travail consiste à supprimer les caractères d'échappement (antislashs) d'une liste de mots avant de les placer dans une boîte de stockage nouvellement allouée (un tampon de tas). L'assistant suppose aveuglément que chaque antislash est toujours suivi d'un caractère valide, donc chaque fois qu'il voit un antislash, il le saute et copie le caractère suivant.

Cependant, une faille existe dans la façon dont le programme gère les arguments lors de l'exécution de sudoedit -s. Elle permet à un utilisateur d'introduire un mot qui se termine exactement par un antislash (\), immédiatement suivi par le marqueur invisible de fin de mot (un terminateur nul, \0).

Lorsque le code de l'assistant atteint cet antislash final, il le saute et regarde le caractère suivant—le terminateur nul. Au lieu de s'arrêter, la logique de l'instruction if force l'assistant à sauter également le terminateur nul. La boucle continue, copiant toute mémoire arbitraire hors limites qui suit dans la boîte de stockage. Cette copie continue au-delà de la longueur prévue du mot provoque un débordement du tampon désigné, conduisant à un grave débordement de tampon basé sur le tas.

Extrait de code vulnérable :

root@kitploit:~
/* Unescape characters, skipping over backslashes */
for (to = user_args, av = NewArgv + 1; (from = *av); av++) {
    while (*from) {
        // VULNERABILITY: If from[0] is '\' and from[1] is '\0', 
        // the loop evaluates to true, increments 'from', skipping the null terminator.
        if (from[0] == '\\' && !isspace((unsigned char)from[1]))
            from++;
        *to++ = *from++; 
    }
    *to++ = ' ';
}
*--to = '\0';

2.3 Correctif officiel et explication du correctif

Les développeurs de Sudo ont corrigé cette erreur de logique dans la version 1.9.5p2 en ajoutant un contrôle strict des limites. Le code vérifie désormais explicitement que le caractère suivant l'antislash n'est pas le terminateur nul avant de tenter de le déséchapper.

Différence du correctif :

root@kitploit:~
- if (from[0] == '\\' && !isspace((unsigned char)from[1]))
+ if (from[0] == '\\' && from[1] != '\0' && !isspace((unsigned char)from[1]))

Pourquoi cela corrige la cause racine : L'ajout de from[1] != '\0' arrête immédiatement la lecture hors limites. Désormais, si le code rencontre un antislash final à la toute fin de la chaîne (ce qui signifie que from[1] est le terminateur nul), l'instruction if est évaluée à faux. Le pointeur n'est pas incrémenté prématurément, le terminateur nul est traité correctement comme la fin de la chaîne, et la boucle se termine en toute sécurité sans déborder le tas.

3. Reproduction de l'exploit

3.1 Preuve de concept publique (PoC)

Pour cette reproduction, l'exploit Python largement reconnu développé par le chercheur en sécurité Worawit (plus précisément la variante exploit_nss.py) a été utilisé.

3.2 Analyse détaillée de l'exécution du PoC

Avant d'exécuter le PoC, il est essentiel de comprendre son fonctionnement. Le script ne se contente pas de faire planter le programme ; il orchestre une manipulation très précise de la mémoire pour obtenir l'exécution de code.

Voici le détail étape par étape des opérations du PoC :

  1. Génération de la charge utile : Le script compile dynamiquement une charge utile C malveillante en un fichier objet partagé (.so). Cette charge utile est conçue pour exécuter /bin/sh en tant que root.
  2. Feng Shui du tas : Le script configure des variables d'environnement spécifiques (comme LC_ALL, LANG et TZ). Étant donné que Sudo charge les variables d'environnement sur le tas au démarrage, le script calcule les tailles exactes nécessaires pour disposer le tas dans une disposition prévisible.
  3. Le débordement : Le script exécute sudoedit -s et passe un argument de ligne de commande se terminant par un antislash. Cela déclenche la vulnérabilité de décalage d'un (off-by-one) discutée dans la section 2, provoquant une écriture hors limites.
  4. Ciblage de la structure NSS : L'écriture hors limites écrase précisément une structure glibc spécifique dans la mémoire de tas adjacente : la structure service_user. Cette structure est utilisée par le Name Service Switch (NSS) pour rechercher des informations système.
  5. Exécution de code : La structure service_user est corrompue pour pointer vers la bibliothèque .so malveillante compilée à l'étape 1. Lorsque Sudo tente de rechercher les privilèges de l'utilisateur, il charge et exécute aveuglément la bibliothèque de l'attaquant, accordant un shell root.

3.3 Déclenchement de la vulnérabilité (Sudo 1.9.5p1)

Tout d'abord, un test de crash de base a été effectué pour prouver l'existence de la vulnérabilité sans l'exploiter.

Vuln Check

Ensuite, le script complet exploit_nss.py de Worawit a été exécuté contre le binaire vulnérable.

Terminal Access as Root

3.4 Vérification du correctif (Sudo 1.9.5p2)

Pour vérifier le correctif officiel, le même déclencheur PoC a été exécuté contre le binaire Sudo patché.

root@kitploit:~
sudoedit -s '\' 2>&1 | grep -q "sudoedit:" && echo "Vulnerable" || echo "Not vulnerable"

Patch Verify

4. Résumé non technique

Sudo, un programme d'administration standard utilisé sur nos serveurs, contient une faille critique dans la façon dont il traite les entrées de texte contenant des antislashs. En envoyant soigneusement une commande malformée, un attaquant disposant d'un accès utilisateur de base peut tromper le système pour qu'il écrive des données en dehors de sa zone mémoire désignée. Cette erreur lui permet de contourner complètement les contrôles de sécurité et d'obtenir un contrôle administratif total et non autorisé sur la machine sans jamais avoir besoin de mot de passe.

5. Défis rencontrés et leçons apprises

Défis : L'un des principaux défis était la fragilité de la manipulation du tas. Les charges utiles d'exploit ciblant des versions spécifiques de système d'exploitation échouent souvent sur d'autres car la bibliothèque C standard sous-jacente (glibc) gère les blocs mémoire différemment. L'exploitation réussie de cette vulnérabilité nécessitait une compréhension exacte de l'alignement mémoire et des dispositions des variables d'environnement (Feng Shui du tas) spécifiques à l'environnement cible.

Leçons apprises : D'un point de vue défensif et des opérations de sécurité, cette analyse approfondie a renforcé plusieurs concepts critiques :

  • La valeur des environnements de laboratoire contrôlés : Passer de plates-formes guidées basées sur le web (comme TryHackMe) à la construction et à l'exploitation d'un binaire vulnérable à partir des sources localement offre une compréhension beaucoup plus profonde de la façon dont les mécanismes sous-jacents du système d'exploitation dictent la viabilité de l'exploit.
  • L'ingénierie de détection est primordiale : Se fier uniquement au patchage des binaires SUID est insuffisant car le cycle de patch prend du temps. L'exploration de cet exploit a mis en évidence la nécessité de règles de détection SIEM robustes. La surveillance de la télémétrie d'exécution des processus pour les commandes sudoedit -s suspectes se terminant par des caractères d'échappement pourrait permettre à une équipe SOC de détecter les tentatives d'exploitation avant qu'un patch ne soit entièrement déployé sur l'infrastructure.
  • Limites de privilèges : L'exercice a souligné le risque immense associé aux binaires SUID. Parce que Sudo s'exécute avec les privilèges root dès sa toute première instruction, toute erreur de logique d'analyse au démarrage garantit une compromission totale du système.

6. Bonus : Vulnérabilités parallèles dans Sudo

CVE parallèle : CVE-2019-14287 (Contournement de sécurité Sudo) Une autre vulnérabilité importante dans la même base de code Sudo partage un modèle de cause racine similaire : une analyse et une validation incorrectes de l'entrée utilisateur. Dans CVE-2019-14287, un défaut logique dans la façon dont Sudo analysait l'ID utilisateur (UID) permettait à un attaquant d'exécuter des commandes en tant que root en spécifiant l'ID utilisateur -1 ou 4294967295.

Le parallèle : Alors que Baron Samedit (CVE-2021-3156) est un défaut de corruption mémoire et CVE-2019-14287 un contournement d'autorisation, la cause racine dans les deux cas est une défaillance dans la logique d'analyse initiale des arguments. Les deux vulnérabilités proviennent du fait que Sudo fait confiance et gère incorrectement des arguments de ligne de commande marginaux (antislashs finaux vs. enveloppements d'entiers inattendus) avant d'exécuter ses fonctions privilégiées principales.


Déclaration de sécurité et d'éthique : Toute exploitation et tout test démontrés dans ce rapport ont été entièrement menés dans une machine virtuelle locale isolée et autorisée. Aucun système de production ni réseau non autorisé n'a été ciblé ou sollicité au cours de cet exercice.

Télécharger l’outil