
Scannt Systeme und Docker-Images auf potenzielle log4j-Schwachstellen. Kann Patches anwenden (JndiLookup.class entfernen) aus geschichteten Archiven. Erkennt eingehend (geschichtete Archive jar/zip/tar/war und scannt nach verwundbaren Log4J-Versionen (CVE-2021-44228, CVE-2021-45046 und CVE-2021-45105). Binaries für Windows, Linux und OsX, können aber auf jeder Plattform erstellt werden, die von Golang unterstützt wird.
Dieser Scanner durchsucht rekursiv Pfade, einschließlich Archive, nach verwundbaren log4j-Versionen und org/apache/logging/log4j/core/lookup/JndiLookup.class-Dateien.
Derzeit definiert die Positivliste nicht ausnutzbare Versionen, in diesem Fall log4j-core 2.17.0 und 2.12.3.

| CVE | Referenzen |
|---|---|
| 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 {ziel-pfad}
$ divd-2021-00038--log4j-scanner {ziel-pfad}
Mit dem Tool können nun auch Container gescannt werden:
$ ./divd-2021-00038--log4j-scanner scan-image logstash:7.16.1
oder lokale Images:
$ ./divd-2021-00038--log4j-scanner scan-image --local {sha256|muster}
$ ./divd-2021-00038--log4j-scanner scan-image --local log4shell:latest
$ ./divd-2021-00038--log4j-scanner scan-image --local 4949add9e671
# alle lokalen Images scannen
$ ./divd-2021-00038--log4j-scanner scan-image --local
Sie können das Image auch patchen:
$ 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
Der Vergleich beider TARs ergibt folgende Unterschiede:
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
Wir haben eine vorläufige Unterstützung für das rekursive Patchen von Dateien hinzugefügt. Dies ist sehr experimentell, seien Sie vorsichtig mit dieser Funktion. Derzeit funktioniert das Patchen nur mit der Archivdatei (jar / tar). Der Patch erstellt eine neue .patch-Datei, die die Originaldatei ersetzen muss. Dies ist bewusst ein manueller Prozess, da er mit dem Neustart von Diensten abgestimmt werden muss. Stellen Sie sicher, dass Sie ein Backup der Originaldatei erstellen, bevor Sie sie ersetzen. Nach dem Patchen können Sie erneut scannen, um sicherzustellen, dass keine Dateien übersehen wurden. Derzeit werden einfache .class-Dateien in Ordnern nicht gepatcht, da sie manuell sicher entfernt werden können.
Die .patch-Datei ist genau gleich wie die Originaldatei, jedoch ohne JndiLookup.class. Dies sollte ausreichen, um das Problem zu entschärfen, während Sie auf Upgrades warten. Stellen Sie sicher, dass Sie Backups erstellen und gründlich testen.
Patch verweigert die Ausführung auf Ordnern, als Vorsichtsmaßnahme. Verweisen Sie das Patch einfach auf das verwundbare Archiv.
$ divd-2021-00038--log4j-scanner.exe patch {ziel-pfad}
divd-2021-00038--log4j-scanner patch {ziel-pfad}
Voraussetzungen:
$ git clone "https://github.com/dtact/divd-2021-00038--log4j-scanner.git"
$ go build -o ./.builds/divd-2021-00038--log4j-scanner ./main.go
Code und Dokumentation Copyright 2021 Remco Verhoef (DTACT).
Code veröffentlicht unter der MIT-Lizenz.