
إذا أتيت إلى هنا بخصوص Log4Shell/CVE-2021-44228، فقد ترغب في القراءة حول نواقل الاستغلال وإصدارات Java runtime المتأثرة: https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
لقد مرّ أكثر من عامين منذ أن قدم كريس فروهوف وغابرييل لورانس أبحاثهما حول ثغرات إلغاء تسلسل الكائنات في Java، والتي أسفرت في النهاية عمّا يمكن وصفه بسهولة بأنه أكبر موجة من أخطاء تنفيذ التعليمات البرمجية عن بُعد في تاريخ Java.
أشارت الأبحاث حول هذا الموضوع إلى أن هذه الثغرات ليست حصرية للآليات التعبيرية مثل Java serialization أو XStream، بل يمكن تطبيق بعضها على آليات أخرى أيضًا.
تقدّم هذه الورقة تحليلًا، بما في ذلك تفاصيل الاستغلال، لمختلف مكتبات marshalling مفتوحة المصدر في Java التي تسمح (أو سمحت) بإلغاء marshalling لأنواع عشوائية مقدمة من المهاجم، وتُظهر أنه بغض النظر عن كيفية تنفيذ هذه العملية وما هي القيود الضمنية الموجودة، فإنها عرضة لتقنيات استغلال مماثلة.
الورقة كاملة متاحة في marshalsec.pdf
تُقدَّم جميع المعلومات والكود لأغراض تعليمية فقط و/أو لاختبار أنظمتك الخاصة بحثًا عن هذه الثغرات.
يتطلب Java 8. قم بالبناء باستخدام maven mvn clean package -DskipTests. شغّله كما يلي:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
حيث
مولّدات الـ payload للمارشالرات التالية مضمنة:
لا توجد متطلبات مسبقة.
المتطلبات المسبقة:
الخدمة المراد تحميلها مثبتة حاليًا على javax.script.ScriptEngineFactory.
المتطلبات المسبقة:
المتطلبات المسبقة:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
هناك بعض خصائص النظام التي تتحكم في الوسائط عند تشغيل الاختبارات (عبر maven أو عند استخدام -a)
تُجرى الاختبارات مع تثبيت SecurityManager يتحقق من تنفيذ أوامر النظام وكذلك من تنفيذ التعليمات البرمجية من قواعد الشيفرة البعيدة. لكي يعمل ذلك، يجب أن تؤدي الفئة المحمّلة المستخدمة إلى تفعيل بعض عمليات فحص مدير الأمان.
| Marshaller | تأثير الـ Gadget |
|---|
| BlazeDSAMF(0|3|X) | تصعيد إلى Java serialization باستخدام JDK فقط ثغرات RCE في مكتبات خارجية متنوعة |
| Hessian|Burlap | ثغرات RCE في مكتبات خارجية متنوعة |
| Castor | ثغرة RCE في مكتبة تابعة (dependency) |
| Jackson | ثغرة RCE محتملة باستخدام JDK فقط، ثغرات RCE في مكتبات خارجية متنوعة |
| Java | ثغرة RCE خارجية أخرى |
| JsonIO | ثغرة RCE باستخدام JDK فقط |
| JYAML | ثغرة RCE باستخدام JDK فقط |
| Kryo | ثغرات RCE في مكتبات خارجية |
| KryoAltStrategy | ثغرة RCE باستخدام JDK فقط |
| Red5AMF(0|3) | ثغرة RCE باستخدام JDK فقط |
| SnakeYAML | ثغرات RCE باستخدام JDK فقط |
| XStream | ثغرات RCE باستخدام JDK فقط |
| YAMLBeans | ثغرة RCE في مكتبة خارجية |