
# تفاصيل ثغرة CVE-2021-41773: تجاوز المسار وتنفيذ الأوامر في Apache تحليل شامل لثغرة CVE-2021-41773 في Apache المتعلقة بتجاوز المسار (Path Traversal) وتنفيذ الأوامر عن بُعد (RCE)، مع أوامر خطوة بخطوة وتحليل السبب الجذري من بيئة مختبر TryHackMe.
| العنصر | التفاصيل |
|---|
| الثغرة | CVE-2021-41773 — اجتياز المسار / تنفيذ الأوامر عن بُعد في Apache 2.4.49 |
| الخدمة المستهدفة | خادم Apache HTTP على المنفذ 8080 |
| الإصدار المتأثر | Apache/2.4.49 (Unix) |
| السبب الجذري | خلل في ترتيب التطبيع في ap_normalize_path() |
| الأثر | قراءة ملفات عشوائية → تنفيذ الأوامر عن بُعد عبر mod_cgi |
| الأدوات المستخدمة | curl |
غيّر Apache 2.4.49 طريقة معالجة ap_normalize_path() لعناوين URL. من المفترض أن يحظر Apache أي مسار طلب يحتوي على ../ قبل وصوله إلى نظام الملفات — لكن مرشح الاجتياز يعمل قبل اكتمال فك ترميز عنوان URL.
هذا يعني أن الطلب الذي يستخدم التسلسل ذا الترميز المزدوج .%2e/ لا يتعرف عليه المرشح على أنه ../. ومع ذلك، بمجرد أن يمرر Apache المسار إلى نظام التشغيل، يتم تحويل .%2e/ إلى ../، فيكون مرشح الاجتياز قد تم تجاوزه بالفعل.
هذا وحده يسمح بقراءة ملفات عشوائية خارج جذر الويب. ويصبح الأثر حرجًا عند دمجه مع mod_cgi: إذا حلّ مسار الاجتياز إلى ملف قابل للتنفيذ مثل /bin/sh داخل دليل مفعّل لـ CGI (مثل /cgi-bin/)، ينفذه Apache كسكربت CGI ويمرر جسم طلب POST إلى مدخلاته القياسية (stdin) — مما يتيح تنفيذ الأوامر عن بُعد.
تم تحديد ترويسة الاستجابة Server للهدف على النحو التالي:
Apache/2.4.49 (Unix)
هذا الإصدار متأثر مباشرةً بـ CVE-2021-41773.
/cgi-bin/تم طلب /cgi-bin/ واستُلمت استجابة 403 Forbidden (وليست 404)، مما يشير إلى أن الدليل موجود وأن mod_cgi مُفعّل على الأرجح — وهو شرط مسبق لتنفيذ الأوامر عن بُعد عبر هذه الثغرة.
تم استخدام curl مع الخيار --path-as-is لإرسال تسلسل الاجتياز المشفّر تمامًا كما كُتب، دون أن يقوم curl بتطبيعه من جانب العميل أولًا:
curl -s --path-as-is "http://<TARGET_IP>:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh" \
--data 'echo Content-Type: text/plain; echo; cat /flag.txt'
لماذا يُعد --path-as-is ضروريًا: افتراضيًا، يقوم curl بتطبيع عناوين URL ويزيل تسلسلات .%2e/ قبل إرسال الطلب أصلًا. يخبر --path-as-is curl بإرسال عنوان URL تمامًا كما هو مكتوب، مع الحفاظ على الاجتياز المشفّر بحيث يصل إلى الخادم سليمًا.
اجتاز البايلود خارج /cgi-bin/ إلى نظام الملفات الجذري، ونفّذ /bin/sh كسكربت CGI عبر جسم طلب POST المحقون، وأعاد محتويات /flag.txt.
Flag format confirmed: THM{...}
(تم حجب الفلاغ وفقًا لإرشادات TryHackMe بشأن التقارير العامة.)
ترتيب التصحيح مهم. يمكن تجاوز مرشح أمني يعمل قبل اكتمال فك الترميز بسهولة تامة عبر حيل الترميز — هذا النمط بالذات (تصفية ثم فك ترميز مقابل فك ترميز ثم تصفية) يظهر في العديد من ثغرات CVE الخاصة بالاجتياز، وليس فقط في هذه الثغرة.
mod_cgi + اجتياز المسار = تنفيذ الأوامر عن بُعد. قراءة الملفات وحدها سيئة؛ عند دمجها مع دليل ينفّذ CGI، تتحول إلى تنفيذ أوامر.
سلوك الأدوات مهم أثناء الاختبار. يمكن لتطبيع عناوين URL الافتراضي في curl أن "يصلح" بصمت البايلود الذي تحاول إرساله بالضبط — يعد --path-as-is (أو أداة مكافئة للطلبات الخام) ضروريًا عند اختبار التجاوزات القائمة على الترميز.
قم بترقية Apache إلى 2.4.51 أو أحدث (يصلح كلًا من CVE-2021-41773 وCVE-2021-42013 المرتبطة بها).
عطّل mod_cgi ما لم يكن مطلوبًا صراحةً.
طبّق مبدأ الامتيازات الأقل على عملية خادم الويب للحد من نطاق الانفجار لأي أولية لقراءة الملفات.
يوثق هذا التقرير بيئة مختبر (TryHackMe). لم يتم الوصول إلى أي أنظمة غير مصرح بها.