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 — Exploit generator for sudo CVE-2021-3156 | Kitploit
Outils/GitHubGitHub/lmol/cve-2021-3156
Privilege EscalationPayload GenerationVulnerability AnalysisExploitationPenetration TestingLearning & EducationRed TeamingBinary Exploitation
GitHublmol/cve-2021-3156

CVE-2021-3156

Exploit generator for sudo CVE-2021-3156

Voir le dépôt
41il y a 5 ansPas 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

Titre du Projet

Générateur d'exploit pour CVE-2021-3156 sudo

Installation

  1. Installe les dépendances ./install.sh
  2. Exécute le générateur d'exploit : ./run.sh
  3. Si la version de sudo du système est vulnérable, un exploit est généré pour la version installée
  4. L'exploit est généré dans exploit.c et le binaire ./exploit

Prérequis

  1. gdb gcc make python3 python3-distro
  2. glibc avec tcache
  3. Actuellement, systèmes d'exploitation Ubuntu, Debian.

Testé

  • Ubuntu 20.04.1
  • Ubuntu 20.04.2
  • Ubuntu 20.10
  • Ubuntu 18.04.5
  • Debian 10.7.0

Auteur

  • Luis Molina Garzón - (https://gitlab.iesvirgendelcarmen.com/luis/CVE-2021-3156/)

  • Qualys Research Team. (https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit)

Vulnérabilité

  • sudo échappe les métacaractères dans la fonction parse_args dans main
  • Ensuite, dans set_cmnd, les caractères d'échappement qui ne sont pas suivis d'un espace sont supprimés
  • sudo suppose que parse_args est une précondition de set_cmnd.
  • Le problème est que les conditions sont différentes dans chaque analyseur. Le premier s'exécute si le mode est (MODE_RUN && MODE_SHELL). Le second s'exécute si le mode est (MODE_RUN | MODE_EDIT | MODE_CHECK) ET (MODE_SHELL|MODE_LOGIN_SHELL)
  • Il existe un moyen de ne pas exécuter le premier analyseur mais d'exécuter le second : sudoedit -s
  • set_cmnd calcule la taille des arguments et crée un chunk dans le tas pour les concaténer. Ensuite, il copie chaque argument jusqu'à trouver un octet nul et continue avec le suivant. Si l'argument d'entrée se termine par un '\', set_cmnd saute le caractère d'échappement, copie l'octet nul mais continue à copier l'argument suivant comme s'il faisait partie du même. Cela provoque un débordement de tampon dans le tas.
  • Par conséquent, si le dernier argument se termine par '\', set_cmnd déborde le tampon avec le contenu de la première variable d'environnement. Si cette variable d'environnement se termine par '\', elle continuera à copier la suivante.

Générateur d'exploit

  • On utilise la méthode 2 décrite dans (https://packetstormsecurity.com/files/161160/Sudo-Heap-Based-Buffer-Overflow.html)
  • sudo utilise glibc nsswitch pour lire la base de données group après le débordement.
  • nsswitch crée une structure de données service_table dans le tas avec toutes les bases de données et services de nsswitch.conf.
  • Les services de group ont le type struct service_user.
  • La structure a un champ name avec le nom du service.
  • nsswitch charge dynamiquement une bibliothèque libnss_[nom_service]_.so.2 en fonction de la configuration de /etc/nsswitch.conf pour chaque service de la base de données group.
  • Le pointeur library doit être écrasé à NULL pour éviter un crash. De plus, cela provoque le rechargement de la bibliothèque en mémoire, cette fois une bibliothèque locale contenant la shellcode.
  • On utilise la technique heap grooming ou feng shui. On crée des variables d'environnement "locales" de taille variable pour générer un layout dans le tas qui permette de rapprocher le chunk dans lequel set_cmnd copie les arguments de la cible qui est la structure service_user de group.
  • Juste avant d'exécuter malloc de set_cmnd, on inspecte la tcache du tas pour voir les premiers chunks qui vont être recyclés et leurs tailles.
  • On ordonne les chunks qui forment les bases de données et services de nsswitch. On les parcourt de manière ordonnée. On stocke l'adresse mémoire du chunk cible et du précédent.
  • On cherche dans le tcache bin un chunk dans cette plage.
  • Une fois la position du chunk et sa taille connues, on génère l'exploit.
  • On utilise un argument terminé par '\' et un octet nul de la taille précise pour que ce chunk soit recyclé.
  • On crée les variables 'locales' d'environnement précises pour créer le layout adéquat.
  • Avant ces variables 'locales', on génère une variable d'environnement de la taille nécessaire pour atteindre la structure cible.
  • On écrase la structure cible avec des octets nuls en utilisant des tableaux de chaînes avec le caractère d'échappement '\', ce qui fait qu'un octet nul est écrit dans set_cmnd.
  • On écrase le name de service_user avec 'x/x' pour que par la suite la bibliothèque 'libnss_x/x.so.2' soit chargée.
  • Dans la bibliothèque, on crée un constructeur qui exécute une shellcode.
  • Comme sudo est exécuté avec le bit suid, le shell appartient à root.

Licence

Ce projet est sous licence GNU GPL

Télécharger l’outil