
[Moved to Codeberg] Einfacher lokaler Scanner für verwundbare log4j-Instanzen

(Geschrieben in Go, weil, na ja, "write once, run anywhere.")
Dies ist ein einfaches Tool, mit dem verwundbare Instanzen von log4j 1.x und 2.x in Installationen von Java-Software wie Web- Anwendungen gefunden werden können. JAR- und WAR-Archive werden untersucht und Klassendateien, die als verwundbar bekannt sind, werden markiert. Der Scan erfolgt rekursiv: WAR-Dateien, die WAR-Dateien enthalten, die JAR-Dateien enthalten, die verwundbare Klassendateien enthalten, sollten ordnungsgemäß markiert werden.
Derzeit erkannte Schwachstellen sind:
Das Scan-Tool prüft derzeit auf bekannte Build-Artefakte, die über Maven bezogen wurden. Aus dem Quellcode neu erstellte Builds, wie sie für Linux-Distributionen üblich sind, werden möglicherweise nicht erkannt.
Ebenfalls enthalten ist ein einfaches Patch-Tool, mit dem schlechte Klassen aus JAR-Dateien entfernt werden können, indem die ZIP-Archivstruktur neu geschrieben wird.
Binärdateien für x86_64 Windows, Linux, MacOSX für getaggte Releases werden über die Releases Seite bereitgestellt.
$ ./local-log4j-vuln-scanner [--verbose] [--quiet] \
[--ignore-v1] [--ignore-vulns=...] \
[--exclude /pfad/zum/ausschließen …] \
[--scan-network] \
[--log /pfad/zur/datei.log] \
/pfad/zu/app1 /pfad/zu/app2 …
Das --verbose-Flag zeigt jede geprüfte .jar- und .war-Datei an, auch wenn kein Problem gefunden wird.
Das --quiet-Flag unterdrückt die Ausgabe, außer für Hinweise auf eine bekannte Schwachstelle.
Das --ignore-v1-Flag schließt Prüfungen auf log4j 1.x-Schwachstellen aus.
Das --ignore-vulns-Flag ermöglicht das Ausschließen von Prüfungen auf bestimmte
Schwachstellen. z. B. -ignore-vulns=CVE-2021-45046,CVE-2021-44832.
Um alle bekannten Schwachstellen zu prüfen, übergeben Sie eine leere Liste wie folgt:
-ignore-vulns=
Das --log-Flag ermöglicht, dass alles in eine Logdatei anstelle von stdout/stderr geschrieben wird.
Verwenden Sie das --exclude-Flag, um Unterverzeichnisse vom Scan auszuschließen. Kann mehrfach verwendet werden.
Das --scan-network-Flag weist den Scanner an, Netzwerkdateisysteme zu durchsuchen (standardmäßig deaktiviert). Dies wurde für Windows nicht implementiert.
Wenn Klassendateien gefunden werden, die auf eine der Schwachstellen hinweisen, werden Meldungen wie die folgenden auf der Standardausgabe ausgegeben:
./local-log4j-vuln-scanner - ein einfacher lokaler log4j-Schwachstellenscanner
Prüfe auf Schwachstellen: CVE-2019-17571, CVE-2021-44228, CVE-2021-45105
untersuche /pfad/zu/vuln/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war
Indikator für verwundbare Komponente gefunden in /pfad/zu/vuln/Downloads/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war::WEB-INF/lib/log4j-core-2.14.1.jar (org/apache/logging/log4j/core/net/JndiManager.class): JndiManager.class log4j 2.14.0-2.14.1 CVE-2021-44228, CVE-2021-45105
Scan beendet
Achtung: Verwenden Sie dies auf eigenes Risiko und bewahren Sie die ursprünglichen JAR-Dateien auf.
$ ./local-log4j-vuln-patcher log4j-core-2.14.1.jar log4j-core-2.14.1-patched.jar
Filtere org/apache/logging/log4j/core/pattern/MessagePatternConverter.class heraus (log4j 2.14)
Filtere org/apache/logging/log4j/core/net/JndiManager.class heraus (log4j 2.14.0-2.14.1)
Schreiben nach log4j-core-2.14.1-patched.jar abgeschlossen
Installieren Sie einen Go-Compiler.
Führen Sie die folgenden Befehle im ausgecheckten Repository aus:
go build -o local-log4j-vuln-scanner ./scanner
go build -o local-log4j-vuln-patcher ./patcher
(Fügen Sie auf Windows-Systemen natürlich die entsprechende .exe-Erweiterung hinzu.)
GNU General Public License, Version 3
Hilko Bengen <[email protected]>