Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2023-4911 — CVE-2023-4911 (Looney Tunables) rapport d'analyse et laboratoire de reproduction Docker | Kitploit
Outils/GitHubGitHub/baeseungwon1010/cve-2023-4911
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationApprentissage et ÉducationExploitation de BinairesLabs et Pratique
GitHubbaeseungwon1010/cve-2023-4911

CVE-2023-4911

CVE-2023-4911 (Looney Tunables) rapport d'analyse et laboratoire de reproduction Docker

Voir le dépôt
45il y a 2 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

Vulnérabilité de dépassement de tampon tas glibc (CVE-2023-4911)

ChampValeur
CVE IDCVE-2023-4911
Type d'attaqueDépassement de tampon tas → Élévation de privilèges locale (Local Privilege Escalation)
CVSS 3.17.8 (High)
Date de divulgation2023-10-03
Point vulnérableAnalyseur GLIBC_TUNABLES du chargeur dynamique glibc (ld.so)
Version vulnérableglibc 2.34~2.38

1. Aperçu

CVE-2023-4911 est une vulnérabilité de dépassement de tampon tas dans le chargeur dynamique de la bibliothèque C GNU (glibc) lors de l'analyse de la variable d'environnement GLIBC_TUNABLES. Un attaquant peut exploiter ce dépassement pour manipuler le chemin de recherche de bibliothèques (RPATH) du chargeur dynamique, ce qui permet, lorsqu'un binaire SUID root (su, sudo, etc.) est exécuté, de charger à la place une bibliothèque partagée malveillante préparée par l'attaquant et d'exécuter du code arbitraire avec les privilèges root. Comme glibc est un composant essentiel de pratiquement toutes les distributions Linux majeures, cette vulnérabilité a affecté la plupart des distributions basées sur glibc publiées après avril 2021.

2. Extrait de code vulnérable

while (true)
{
    char *name = p;
    size_t len = 0;

    /* 이름(name) 길이 찾기 */
    while (p[len] != '=' && p[len] != ':' && p[len] != '\0')
        len++;

    /* '=' 없이 끝나면 종료 */
    if (p[len] == '\0')
    {
        if (__libc_enable_secure)
            tunestr[off] = '\0';
        return;
    }

    /* ':'를 먼저 만나면 잘못된 항목 */
    if (p[len] == ':')
    {
        p += len + 1;
        continue;
    }

    /* '='를 만났으므로 value 시작으로 이동 */
    p += len + 1;

    /* 원본 문자열에서 value 계산 */
    char *value = &valstring[p - tunestr];

    len = 0;

    /* value 길이 찾기 */
    while (p[len] != ':' && p[len] != '\0')
        len++;

    ...
    /* tunestr에 복사 */
    ...

    if (p[len] != '\0')
        p += len + 1;
}

3. Analyse de la cause

3.1 Flux de traitement normal

  1. __tunables_init() cherche GLIBC_TUNABLES dans la liste des variables d'environnement.
  2. tunables_strdup() alloue un tampon avec __minimal_malloc() et copie la chaîne originale (à ce stade, malloc est une implémentation très précoce, pas encore complètement initialisée).
  3. parse_tunables() parcourt ce tampon en utilisant le délimiteur : (deux-points) et, pour chaque paire key=value, attribue la valeur au tunable correspondant.

3.2 Point de défaillance

parse_tunables() traite un tunable dans l'ordre suivant : analyse du nom → déplacement de p → analyse de la valeur → déplacement de p. Avec une entrée normale, après avoir traité la valeur, p est déplacé au début du tunable suivant pour l'analyser.

Cependant, si une entrée de la forme name=name=value est fournie, par exemple :

GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA...(longue chaîne)

lors de la première analyse, la totalité de glibc.malloc.mxfast=AAAA... est reconnue comme une seule valeur et copiée dans le tampon tunestr. Ensuite, comme il n'y a pas de deux-points (:) séparateur après la valeur pour indiquer le tunable suivant, le pointeur d'analyse (p) ne se déplace pas vers l'élément suivant et pointe à nouveau vers le début de la valeur déjà copiée.

Le problème est que cette valeur elle-même a la forme name=value. Lors de l'itération suivante, l'analyseur la reconnaît à tort comme un nouveau tunable et écrit des données redondantes dans le tampon. Comme tunestr est alloué uniquement pour la taille de la chaîne originale, ces écritures redondantes provoquent un dépassement de tampon tas.

3.3 Effets du dépassement

Le dépassement de tampon tas écrase les zones tas adjacentes allouées de manière contiguë par __minimal_malloc(). L'attaquant peut ainsi modifier le pointeur l_info[DT_RPATH] de la structure interne link_map du chargeur dynamique (ld.so) pour le rediriger vers une adresse de pile contrôlée par l'attaquant.

Dans cette zone de pile, une structure Elf64_Dyn préfabriquée est placée, indiquant un répertoire choisi par l'attaquant comme nouveau chemin de recherche de bibliothèques (RPATH). En conséquence, ld.so charge en priorité la bibliothèque partagée malveillante préparée par l'attaquant au lieu des bibliothèques système normales.

4. Chaîne d'attaque

  1. L'attaquant construit une variable d'environnement GLIBC_TUNABLES de la forme name=name=value.
  2. Avec les privilèges d'un utilisateur normal, il exécute un programme SUID (comme su).
  3. Le noyau, en raison du bit SUID, change le UID effectif du processus en root, puis exécute le chargeur dynamique (ld.so).
  4. Un dépassement de tampon tas se produit dans parse_tunables() de ld.so.
  5. En exploitant le dépassement, le pointeur l_info[DT_RPATH] de link_map est modifié pour pointer vers une adresse de pile où se trouve une fausse structure Elf64_Dyn préparée par l'attaquant.
  6. ld.so utilise ces informations RPATH manipulées pour charger un libc.so.6 malveillant préparé par l'attaquant.
  7. Le code d'initialisation (ou la routine de démarrage modifiée) du libc.so.6 malveillant s'exécute avec les privilèges root, effectuant setuid(0), setgid(0) et l'exécution de /bin/sh.
  8. Ce processus a lieu avant que la logique d'authentification de su ne soit exécutée, permettant ainsi d'obtenir un shell root sans vérification du mot de passe.

Le PoC utilise une méthode de force brute, répétant execve() jusqu'à ce que la disposition mémoire souhaitée (influencée par l'ASLR) soit obtenue. Par conséquent, le succès et le temps nécessaire de l'attaque dépendent de l'environnement, nécessitant généralement plusieurs centaines à plusieurs milliers de tentatives.

5. Conditions de reproduction

  • Un binaire capable d'élever les privilèges (SUID, SGID, etc.) doit exister.
  • L'attaquant doit pouvoir exécuter ce binaire avec des variables d'environnement arbitraires.
  • La version de glibc doit être antérieure au correctif.

6. Reproduction de l'environnement pratique (PoC)

Clonez d'abord le dépôt git dans votre répertoire :

git clone https://github.com/baeseungwon1010/CVE-2023-4911

Construisez l'image Docker avec la commande suivante :

cd C* && docker compose run --rm cve-2023-4911-lab

Une fois à l'intérieur du conteneur, exécutez le code d'exploitation :

cd /home/student/exploit && ./exp

Après exécution, attendez ; vous verrez que l'utilisateur normal est passé à sudo(0).

7. Mesures d'atténuation

Mettez à jour glibc vers une version postérieure à la version vulnérable. Après la mise à jour, redémarrez/relancez si possible pour garantir qu'aucune version précédente de glibc ne reste en mémoire. Si la mise à jour immédiate n'est pas possible, une mesure temporaire consiste à supprimer les processus SUID, SGID superflus.

8. Références

  • NVD: CVE-2023-4911
  • Avis de sécurité Ubuntu: CVE-2023-4911
  • leesh3288/CVE-2023-4911 PoC
  • Sources Debian - glibc 2.28-10 dl-tunables.c
Télécharger l’outil