
ماسح ضوئي متكرر لثغرات Log4j CVE في الأرشيفات وصور Docker. يكتشف JndiLookup.class والإصدارات المعرضة للخطر عبر تجزئات SHA256، مع ترقيع اختياري لإزالة فئة الاستغلال.
سيقوم هذا الماسح بفحص المسارات بشكل متكرر بما في ذلك الأرشيفات بحثًا عن إصدارات log4j الضعيفة وملفات org/apache/logging/log4j/core/lookup/JndiLookup.class.
حاليًا تحدد قائمة السماح الإصدارات غير القابلة للاستغلال، وهي في هذه الحالة log4j-core 2.17.0 و 2.12.3.

| CVE | المراجع |
|---|
| CVE-2021-44228 | https://www.cve.org/CVERecord?id=CVE-2021-44228 |
| CVE-2021-45046 | https://www.cve.org/CVERecord?id=CVE-2021-45046 |
| CVE-2021-45105 | https://www.cve.org/CVERecord?id=CVE-2021-45105 |
| CVE-2021-44832 | https://www.cve.org/CVERecord?id=CVE-2021-44832 |
$ divd-2021-00038--log4j-scanner.exe {target-path}
$ divd-2021-00038--log4j-scanner {target-path}
باستخدام الأداة يمكنك الآن أيضًا فحص الحاويات:
$ ./divd-2021-00038--log4j-scanner scan-image logstash:7.16.1
أو الصور المحلية:
$ ./divd-2021-00038--log4j-scanner scan-image --local {sha256|pattern}
$ ./divd-2021-00038--log4j-scanner scan-image --local log4shell:latest
$ ./divd-2021-00038--log4j-scanner scan-image --local 4949add9e671
# scan all local images
$ ./divd-2021-00038--log4j-scanner scan-image --local
يمكنك أيضًا تصحيح الصورة:
$ docker save log4shell > ./log4shell-image.tar
$ ./divd-2021-00038--log4j-scanner ./log4shell-image.tar
$ ./divd-2021-00038--log4j-scanner patch ./log4shell-image.tar
$ cat ./log4shell-image.tar.patch | docker load
ستُظهر مقارنة ملفَي tar الاختلافات التالية:
Binary files ../2/BOOT-INF/lib/log4j-core-2.14.1.jar and ./BOOT-INF/lib/log4j-core-2.14.1.jar differ
Binary files ../2/app/spring-boot-application.jar and ./app/spring-boot-application.jar differ
Binary files ../2/b0d66ac73d47865118cfb9a1244f1508d94ea938da1eb78c2db20bd2e1a6629a/layer.tar and ./b0d66ac73d47865118cfb9a1244f1508d94ea938da1eb78c2db20bd2e1a6629a/layer.tar differ
Only in ./org/apache/logging/log4j/core/lookup: JndiLookup.class
لقد أضفنا دعمًا تمهيديًا لتصحيح الملفات بشكل متكرر. هذه الميزة تجريبية جدًا، فكن حذرًا عند استخدامها. حاليًا يعمل التصحيح فقط مع ملفات الأرشيف (jar / tar). سينشئ التصحيح ملف `.patch`` جديدًا يجب أن يحل محل الملف الأصلي. هذه عملية يدوية عن قصد، لأنها تحتاج إلى التوقيت مع إعادة تشغيل الخدمات. تأكد من إنشاء نسخة احتياطية من الملف الأصلي قبل استبداله. بعد التصحيح يمكنك المسح مرة أخرى للتأكد من عدم تفويت أي ملفات. حاليًا لن يتم تصحيح ملفات .class العادية في المجلدات، حيث يمكن إزالتها يدويًا بأمان.
سيكون ملف .patch مطابقًا تمامًا للملف الأصلي، دون JndiLookup.class. يجب أن يكون هذا كافيًا للتخفيف من هذه المشكلة، أثناء انتظار الترقيات. تأكد من إنشاء نسخ احتياطية واختبار كل شيء بدقة.
سيرفض التصحيح العمل على المجلدات كإجراء احترازي. فقط وجّه أداة التصحيح إلى الأرشيف الضعيف.
$ divd-2021-00038--log4j-scanner.exe patch {target-path}
divd-2021-00038--log4j-scanner patch {target-path}
المتطلبات:
$ git clone "https://github.com/dtact/divd-2021-00038--log4j-scanner.git"
$ go build -o ./.builds/divd-2021-00038--log4j-scanner ./main.go
حقوق النشر للكود والوثائق تعود إلى Remco Verhoef (DTACT) لعام 2021.
تم إصدار الكود بموجب رخصة MIT.