
ينشر وكيلاً لإصلاح ثغرة CVE-2021-44228 (ثغرة Log4j RCE) في عملية JVM قيد التشغيل
سيستمر التطوير الإضافي لهذه الأداة في corretto/hotpatch-for-apache-log4j2.
شكرًا للمشاركة والتعليق والتجربة والمساهمة في هذا المشروع!
هذا إثبات مفهوم (POC) لأداة بسيطة تحقن وكيل Java في عملية JVM قيد التشغيل. سيقوم الوكيل بتصحيح طريقة lookup() لجميع مثيلات org.apache.logging.log4j.core.lookup.JndiLookup المحملة لإرجاع السلسلة "Patched JndiLookup::lookup()" دون قيد أو شرط. من المفترض أن يؤدي ذلك إلى إصلاح ثغرة تنفيذ التعليمات البرمجية عن بعد CVE-2021-44228 في Log4j دون إعادة تشغيل عملية Java.
تم اختبار هذا حاليًا فقط مع JDK 8 و 11!
إخلاء مسؤولية: يتم توفير هذا الكود على أمل أن يكون مفيدًا، ولكن بدون أي ضمان!
JDK 8
javac -XDignore.symbol.file=true -cp <java-home>/lib/tools.jar Log4jPatch.java
JDK 11
javac --add-exports java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED Log4jPatch.java
JDK 8
java -cp .:<java-home>/lib/tools.jar Log4jPatch <java-pid>
JDK 11
java Log4jPatch <java-pid>
إذا تلقيت خطأً مثل:
Exception in thread "main" com.sun.tools.attach.AttachNotSupportedException: The VM does not support the attach mechanism
at jdk.attach/sun.tools.attach.HotSpotAttachProvider.testAttachable(HotSpotAttachProvider.java:153)
at jdk.attach/sun.tools.attach.AttachProviderImpl.attachVirtualMachine(AttachProviderImpl.java:56)
at jdk.attach/com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:207)
at Log4jPatch.loadInstrumentationAgent(Log4jPatch.java:115)
at Log4jPatch.main(Log4jPatch.java:139)
هذا يعني أن جهاز JVM الخاص بك يرفض أي نوع من المساعدة لأنه يعمل مع -XX:+DisableAttachMechanism.