
ماسح نظام ملفات يكتشف إصدارات Log4J الضعيفة (CVE-2021-44228, CVE-2021-45046) عن طريق تحليل فئات Java المجمعة، بما في ذلك الأرشيفات المتداخلة. يعمل على لينكس، ويندوز، وماك.

ماسح ضوئي يكتشف إصدارات Log4J الضعيفة لمساعدة الفرق في تقييم تعرضهم لـ CVE-2021-44228 (حرج) و CVE-2021-45046 و CVE-2021-45105 و CVE-2021-44832. يمكنه البحث عن مثيلات Log4J عن طريق فحص نظام الملفات بالكامل بدقة، بما في ذلك جميع التطبيقات المثبتة. وهو قادر على العثور على مثيلات Log4J المخفية بعدة طبقات عميقة. يعمل على Linux و Windows و Mac وأي مكان آخر يعمل فيه Java أيضًا!
log4j-apiيبلغ حاليًا عن إصدارات log4j-core 2.3.2 و 2.12.4 و 2.17.1 كـ _SAFE_ (آمنة)، و 2.3.1 و 2.12.2 و 2.12.3 و 2.15.0 و 2.16.0 و 2.17.0 كـ _OKAY_ (مقبولة) وجميع الإصدارات الأخرى كـ _VULNERABLE_ (قابلة للاختراق) (على الرغم من أنه يبلغ عن ما قبل الإصدار 2.0-beta9 كـ _POTENTIALLY_SAFE_ (قد تكون آمنة)). ويبلغ عن الإصدارات الأقدم من log4j-1.x كـ _OLD_ (قديمة).
يمكنه اكتشاف log4j بشكل صحيح داخل ملفات jar/wars القابلة للتنفيذ من Spring Boot، والتبعيات المدمجة في uber jars، والملفات المظللة (shaded jars)، وحتى ملفات jar غير المضغوطة على نظام الملفات (المعروفة باسم *.class).
نحتفظ حاليًا بمجموعة من عينات log4j التي نستخدمها للاختبار.
java -jar log4j-detector-2021.12.29.jar ./samples
-- github.com/mergebase/log4j-detector v2021.12.29 (من mergebase.com) يقوم بتحليل المسارات (قد يستغرق بعض الوقت).
-- ملاحظة: استخدم العلامة '--verbose' لطباعة كل ملف تم فحصه إلى STDERR.
false-hits/log4j-core-2.12.2.jar يحتوي على Log4J-2.x == 2.12.2 _OKAY_
false-hits/log4j-core-2.12.3.jar يحتوي على Log4J-2.x == 2.12.3 _OKAY_
false-hits/log4j-core-2.12.4.jar يحتوي على Log4J-2.x == 2.12.4 _SAFE_
false-hits/log4j-core-2.15.0.jar يحتوي على Log4J-2.x == 2.15.0 _OKAY_
false-hits/log4j-core-2.16.0.jar يحتوي على Log4J-2.x == 2.16.0 _OKAY_
false-hits/log4j-core-2.17.0.jar يحتوي على Log4J-2.x == 2.17.0 _OKAY_
false-hits/log4j-core-2.17.1.jar يحتوي على Log4J-2.x >= 2.17.1 _SAFE_
false-hits/log4j-core-2.3.1.jar يحتوي على Log4J-2.x == 2.3.1 _OKAY_
false-hits/log4j-core-2.3.2.jar يحتوي على Log4J-2.x == 2.3.2 _SAFE_
true-hits/log4j-core-2.0-beta9.jar يحتوي على Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.10.0.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.10.0.zip يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.0.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.1.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.2.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.0.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.1.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.0.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.1.jar يحتوي على Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.2.jar يحتوي على Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.3.jar يحتوي على Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.1.jar يحتوي على Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.jar يحتوي على Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.9.1.jar يحتوي على Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
old-hits/log4j-1.1.3.jar يحتوي على Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-1.2.17.jar يحتوي على Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-core-2.0-beta2.jar يحتوي على Log4J-2.x <= 2.0-beta8 _POTENTIALLY_SAFE_ (هل قمت بإزالة JndiLookup.class؟)
_VULNERABLE_ -> تحتاج إلى ترقية هذا الملف أو إزالته.
_OKAY_ -> نبلغ عن ذلك لإصدارات Log4J 2.3.1 و 2.12.2 و 2.12.3 و 2.15.0 و 2.16.0 و 2.17.0. نوصي بالترقية إلى 2.17.1.
_SAFE_ -> نبلغ حاليًا عن ذلك فقط لإصدارات Log4J 2.3.2 و 2.12.4 و 2.17.1 (وما بعدها).
_OLD_ -> أنت آمن من CVE-2021-44228، ولكن يجب التخطيط للترقية لأن Log4J 1.2.x تجاوز عمرها الافتراضي منذ 7 سنوات ولها عدة ثغرات أمنية معروفة.
_POTENTIALLY_SAFE_ -> ملف "JndiLookup.class" غير موجود، إما لأن إصدار Log4J الخاص بك قديم جدًا (قبل 2.0-beta9)، أو لأن شخصًا ما أزال هذا الملف بالفعل. تأكد من أن شخصًا من فريقك أو شركتك هو من أزال "JndiLookup.class" إذا كان الأمر كذلك، لأنه من المعروف أن المهاجمين يزيلون هذا الملف بأنفسهم لمنع المهاجمين المنافسين الإضافيين من الوصول إلى الأنظمة المخترقة.
java -jar log4j-detector-2021.12.29.jar
الاستخدام: java -jar log4j-detector-2021.12.29.jar [--verbose] [--json] [--stdin] [--exclude=X] [مسارات للفحص...]
--json - إخراج النتائج إلى STDOUT بصيغة JSON. (لا تزال الأخطاء/التحذيرات تُصدر إلى STDERR)
--stdin - قراءة STDIN للمسارات المراد استكشافها (مسار واحد لكل سطر)
--exclude=X - حيث X هي قائمة JSON تحتوي على مسارات كاملة لاستبعادها. يجب أن تكون JSON صالحة.
مثال: --exclude='["/dev", "/media", "Z:\TEMP"]'
رموز الخروج: 0 = لم يتم العثور على إصدارات Log4J ضعيفة.
1 = تم العثور على إصدار قديم واحد على الأقل من Log4J 1.x.
2 = تم العثور على إصدار ضعيف واحد على الأقل من Log4J.
حول - كاشف MergeBase log4j (الإصدار 2021.12.29)
الوثائق - https://github.com/mergebase/log4j-detector
(C) حقوق النشر 2021 شركة Mergebase Software Inc. مرخص لك عبر GPLv3.
git clone https://github.com/mergebase/log4j-detector.git
cd log4j-detector/
mvn install
java -jar target/log4j-detector-latest.jar
نحتفظ بمجموعة من عينات log4j هنا: https://github.com/mergebase/log4j-samples
الإصدار 3.0 من رخصة GPL
يقوم مترجم Java بتخزين النصوص الحرفية (String literals) مباشرة في ملفات *.class المترجمة. إذا اكتشف log4j-detector وجود ملف باسم "JndiManager.class" على نظام الملفات الخاص بك، فإنه يفحص هذا الملف بحثًا عن النص: "Invalid JNDI URI - {}". اتضح أن هذا النص المحدد موجود فقط في الإصدار المُصحح من Log4J (الإصدار 2.15.0). أي إصدارات Log4J التي لا تحتوي على هذا النص تكون ضعيفة.
تم توسيع هذه التقنية نفسها لفحص ملفات *.class بحثًا عن النصوص الحرفية لاكتشاف الإصدارات الآمنة 2.3.2 و 2.12.4 و 2.17.1 بدقة.
تُبلغ العديد من الماسحات الضوئية (بما في ذلك Dependabot الخاص بـ GitHub) حاليًا عن كل من مكتبتي "log4j-core" و "log4j-api" على أنهما ضعيفتان. هذه الماسحات مخطئة. لا يوجد حاليًا أي إصدار موجود من مكتبة "log4j-api" يمكن استغلاله بواسطة أي من هذه الثغرات.
في MergeBase نفخر بدقة المسح لدينا. أنت مشغول بالفعل بتصحيح أنظمتك والدفاع عنها. لا نريدك أن تضيع وقتك في الإيجابيات الكاذبة. لهذا السبب لا نبلغ عن أي إصابة ضد log4j-api.
الإصدار 2.10.0 مهم لأنه أول إصدار يمكن فيه تعطيل "ميزة البحث عن الرسائل" الضعيفة في Log4J عبر إعدادات Log4J.
الإصدار 2.12.2 مهم لأنه إصدار متوافق مع Java 7 من Log4J غير معرض لـ CVE-2021-44228.
الإصداران 2.15.0 و 2.16.0 مهمان لأنهما أول إصدارات لا يكون فيها التكوين الافتراضي لـ Log4J ضعيفًا تجاه CVE-2021-44228.
والإصدارات 2.3.2 و 2.12.4 و 2.17.1 مهمة لأنها ليست عرضة للثغرات المكتشفة حديثًا مثل CVE-2021-45046 و CVE-2021-45105. على الرغم من أن هذه الثغرات أقل خطورة بكثير، إلا أننا نتوقع أن يرغب الجميع في الترقية إلى أحد الإصدارات 2.3.2 أو 2.12.4 أو 2.17.1.
تعني علامة "!" أن log4j-detector دخل إلى أرشيف مضغوط (مثل *.zip و *.ear و *.war و *.aar و *.jar). نظرًا لأن ملفات zip يمكن أن تحتوي على ملفات zip، فقد تحتوي النتيجة الواحدة على أكثر من علامة "!" واحدة في نتيجتها.
ملاحظة: يدخل log4j-detector بشكل متكرر فقط إلى أرشيفات zip. لا يدخل إلى tar أو gz أو bz2، إلخ. السبب الرئيسي هو أن أنظمة Java غالبًا ما يتم تكوينها لتنفيذ ملفات jar داخل ملفات jar، ولكنها لا يتم تكوينها أبدًا لتنفيذ تنسيقات ملفات أخرى (على حد علمي!). وبالتالي، فإن نسخة log4j داخل ملف *.tar.gz ربما لا يمكن الوصول إليها لنظام Java قيد التشغيل، وبالتالي ليست ثغرة تستحق الإبلاغ عنها.
ملاحظة ثانية: بالنسبة للملفات المضغوطة داخل ملفات مضغوطة، يقوم الماسح الخاص بنا بتحميل الملف المضغوط الداخلي بالكامل في الذاكرة (باستخدام ByteArrayInputStream) قبل محاولة مسحه ضوئيًا. قد تحتاج إلى منح Java بعض الذاكرة الإضافية إذا كان لديك ملفات مضغوطة داخلية كبيرة جدًا على نظامك (على سبيل المثال، 1 جيجابايت أو أكثر).
فقط إصدارات Log4J 2.x (من 2.0-beta9 إلى 2.14.1) هي المعرضة لـ CVE-2021-44228.
سؤال رائع! نظرًا لأننا قمنا بتضمين كود المصدر الكامل هنا في Github (جميع أسطر Java البالغ عددها 2500 سطر)، بالإضافة إلى خطوات بنائه، ونظرًا لأن هذه الأداة لا تحتوي على أي تبعيات، فلن يستغرق الأمر وقتًا طويلاً لدراسة الكود بعناية حتى ترضى. إذا كنت لا تثق في Maven، فيمكنك الانتقال مباشرة إلى دليل "src/main/java/com/mergebase/log4j" وكتابة "javac *.java". هذا يعمل أيضًا!
نقوم أيضًا بتوقيع ملف jar المترجم مسبقًا والذي نحتفظ به في جذر المستودع (./log4j-detector-2021.12.29.jar) باستخدام مفتاح توقيع الكود الخاص بـ MergeBase. يرجى تشغيل "jarsigner -verbose -verify log4j-detector-2021.12.29.jar" لتأكيد ذلك.

MergeBase هي شركة تحليل تكوين البرامج (SCA) مقرها في فانكوفر، كندا. نحن مشابهون لشركات مثل Snyk و Sonatype و Blackduck وما إلى ذلك، حيث نساعد الشركات على اكتشاف وإدارة المكتبات مفتوحة المصدر الضعيفة في برامجهم. تحقق منا! لدينا دقة عالية، ودعم ممتاز للغات، وأسعارنا ليست باهظة أيضًا: mergebase.com/pricing.
سنكون سعداء إذا قام أي شخص بتجربة نسخة تجريبية مجانية لمدة أسبوعين لمنتج SCA الخاص بنا! وإذا أرسلت بريدًا إلكترونيًا إلى الرئيس التنفيذي لدينا ([email protected]) مع موضوع "log4j-detector" فسنقوم بتمديد نسختك التجريبية المجانية إلى 4 أسابيع.