
يفحص ملفات jar و war و ear بحثًا عن وجود JndiLookup.class لاكتشاف التطبيقات المعرضة لـ CVE-2021-44228 (Log4Shell).
النص البرمجي الأصلي والمستودع: https://github.com/CERTCC/CVE-2021-44228_scanner
تم التعديل بواسطة: Alex Pena
التطبيقات المعرضة للخطر بسبب ثغرة log4j CVE-2021-44228 قد تكون قابلة للاكتشاف عن طريق فحص ملفات jar وwar وear للبحث عن وجود JndiLookup.class.
أي ملف يتم اكتشافه يستحق التحقق لمعرفة ما إذا كان التطبيق الذي يستخدمه معرضًا للخطر. بالنسبة لأي JndiLookup.class موجود، غالبًا ما يتضمن log4j الإصدار في اسم ملف jar. على سبيل المثال، وجود تطابق في log4j-core-2.14.1.jar يشير إلى تطبيق معرض للخطر. بدلاً من ذلك، قد ينتج log4j-core-2.16.jar أيضًا تطابقًا لأن كود JndiLookup لا يزال موجودًا في الإصدار 2.16 من log4j، ولكنه معطل افتراضيًا. راجع VU#930724 لمزيد من التفاصيل.
المعلمات
-Force السماح بفحص ملفات النظام والملفات المخفية (لا تتجاوز معلمة Force قيود الأمان)
-Verbose مخرجات ورسائل فحص إضافية
فحص الدليل الحالي
.\checkjndi.ps1
فحص دليل test_folder، مع مخرجات إضافية وفحص ملفات النظام/الملفات المخفية
.\checkjndi.ps1 -Force -Verbose c:\Users\alex\Desktop\test_folder
على سبيل المثال، إليك استدعاء لإصدار PowerShell من الماسح الضوئي:

يمكن توجيه المسارات المراد فحصها إلى النص البرمجي للتحكم فيما يتم فحصه. على سبيل المثال، لفحص قائمة من المسارات موجودة في ملف paths.txt:
get-content .\paths.txt | .\checkjndi.ps1
لنلقِ نظرة على أول تطابق في تنفيذ الفحص على نظام Windows:
C:\Users\unst0\Desktop\test_folder\apache-log4j-2.17.1-bin.zip يحتوي على apache-log4j-2.17.1-bin/log4j-core-2.17.1.jar يحتوي على org/apache/logging/log4j/core/lookup/JndiLookup.class ** ولكن يبدو أنه تم تصحيحه **
يحتوي ملف jar هذا على إصدار 2.17 من log4j، وهو ليس معرضًا لثغرة CVE-2021-44228. يتم الإبلاغ عن هذه النتيجة لأغراض معلوماتية، مما يظهر أن البائع قام بتصحيح منتجه.
لنلقِ نظرة على التطابق الثاني:
تحذير: C:\Users\unst0\Desktop\test_folder\ghidra_10.0.4_PUBLIC_20210928.zip يحتوي على ghidra_10.0.4_PUBLIC/Ghidra/Framework/Generic/lib/log4j-core-2.12.1.jar يحتوي على org/apache/logging/log4j/core/lookup/JndiLookup.class
هنا نرى أن Ghidra يستخدم log4j الإصدار 2.12.1، وبالتالي يجب أن نفترض أنه معرض للخطر. وبالفعل، إصدارات Ghidra قبل 10.1 معرضة لثغرة CVE-2021-44228.
لنلقِ نظرة على التطابق الثالث:
تحذير: C:\Users\unst0\Desktop\test_folder\server.jar يحتوي على META-INF/libraries/org/apache/logging/log4j/log4j-core/2.14.1/log4j-core-2.14.1.jar يحتوي على org/apache/logging/log4j/core/lookup/JndiLookup.class
هنا نرى أن ملف server.jar الخاص بماينكرافت يستخدم log4j الإصدار 2.14.1، وبالتالي يجب أن نفترض أنه معرض للخطر. وبالفعل، إصدارات خادم Minecraft: Java Edition قبل 1.18.1 معرضة لثغرة CVE-2021-44228.
يجب عليك التحقق من أي تطابقات تم الإبلاغ عنها بواسطة أي من هذين النصين البرمجيين، والتأكد من أن إصدار log4j هو بالفعل الإصدار 2.16 المُصحح، أو التواصل مع بائع البرنامج الخاص بك للحصول على إصدار مُصحح من البرنامج. بدلاً من ذلك، يحتوي VU#930724 على معلومات حول كيفية إزالة JndiLookup.class من ملفات jar المعرضة للخطر.
يحتوي إصدار PowerShell من الماسح الضوئي على تقارير أخطاء إضافية عندما لا يمكن فحص الملفات أو الدلائل. على وجه الخصوص، أي أخطاء تعذر الفحص تُبلغ عن UnauthorizedAccessException تشير إلى مشكلة في الأذونات عند الوصول إلى دليل و/أو ملف. أي أخطاء تعذر الفحص تُبلغ عن InvalidDataException عادةً ما تكون بسبب أرشيف تالف.