
Schnellster Dateisystem-Scanner für log4shell (CVE-2021-44228, CVE-2021-45046) und andere verwundbare (CVE-2017-5645, CVE-2019-17571, CVE-2022-23305, CVE-2022-23307 ... ) Instanzen der log4j-Bibliothek. Hervorragende Leistung und geringer Speicherverbrauch.

Python-Port von https://github.com/mergebase/log4j-detector. log4j-detector ist urheberrechtlich geschützt (C) Copyright 2021 Mergebase Software Inc. https://mergebase.com/ Lizenziert unter GPLv3.
Motivation für den Port auf Python war die Verbesserung der Leistung, die Reduzierung des Speicherverbrauchs und die Erhöhung der Lesbarkeit des Codes. Siehe unten den Abschnitt über den Leistungsvergleich.
Und es scheint, dass dies das schnellste Scan-Tool mit dem geringsten Speicherbedarf ist
Identifiziert auf Ihrem Dateisystem log4j (1.x)-, reload4j (1.2.18+)- und log4j-core (2.x)-Versionen, die anfällig für CVE-2021-44228, CVE-2021-45046 und viele andere sind – siehe Tabelle unten. Es kann Instanzen finden, die mehrere Ebenen tief in größeren Anwendungen eingebettet sind. Funktioniert unter Linux, Windows, Mac oder überall dort, wo Python 3.8+ läuft.
Kann log4j korrekt in ausführbaren Spring-Boot-JARs/WARs erkennen, Abhängigkeiten, die in
Uber-JARs eingemischt sind, in Shaded-JARs und sogar in
entpackten JAR-Dateien, die einfach unkomprimiert auf dem Dateisystem liegen (auch bekannt als *.class).
Es kann auch ge-shadete Klassendateien verarbeiten – Dateiendungen .esclazz (elastic) und .classdata (Azure).
Durchsuchte Java-Archivdateierweiterungen: .zip, .jar, .war, .ear, .aar, .jpi,
.hpi, .rar, .nar, .wab, .eba, .ejb, .sar, .apk, .par, .kar
| Erkennt | CVE | CVSSv3 | Schweregrad | Java | Verwundbar ab | Verwundbar bis | Behoben in | Bibliothek |
|---|---|---|---|---|---|---|---|---|
| JA | CVE-2021-44228 | 10.0 | Kritisch | 8 | 2.0-beta9 | 2.14.1 | 2.15.0 | log4jv2 |
| JA | CVE-2017-5645 | 9.8 | Kritisch | 7 | 2.0-alpha1 | 2.8.1 | 2.8.2 | log4jv2 |
| JA | CVE-2019-17571 | 9.8 | Kritisch | 1.2.0 | 1.2.17 | nofix | log4jv1 | |
| JA | CVE-2021-45046 | 9.0 | Kritisch | 7/8 | 2.0-beta9 | 2.15.0 excluding 2.12.2 | 2.12.2/2.16.0 | log4jv2 |
| JA | CVE-2022-23305 | 9.8 | Kritisch | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| JA | CVE-2022-23307 | 9.8 | Kritisch | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| JA | CVE-2022-23302 | 8.8 | Hoch | 1.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| JA | CVE-2021-4104 | 7.5 | Hoch | - | 1.0 | 1.2.17 | nofix | log4jv1 |
| JA | CVE-2021-44832 | 6.6 | Mittel | 6/7/8 | 2.0-alpha7 | 2.17.0, excluding 2.3.2/2.12.4 | 2.3.2/2.12.4/2.17.1 | log4jv2 |
| - | CVE-2021-42550 | 6.6 | Mittel | - | 1.0 | 1.2.7 | 1.2.8 | logback |
| JA | CVE-2021-45105 | 5.9 | Mittel | 6/7/8 | 2.0-beta9 | 2.16.0, excluding 2.12.3 | 2.3.1/2.12.3/2.17.0 | log4jv2 |
| - | CVE-2020-9488 | 3.7 | Niedrig | 7/8 | 2.0-alpha1 | 2.13.1 | 2.12.3/2.13.2 | log4jv2 |
Jede Instanz wird mit einer passenden Liste von CVEs gemeldet. Für jede CVE wird die Log4j-Bibliotheksdatei daraufhin analysiert, ob die empfohlenen Workarounds (z. B. Entfernung von JndiLookup.class oder JMSAppender.class) angewendet wurden; in diesem Fall wird sie als nicht verwundbar betrachtet. Der Status STRANGE wird für Archive mit log4j-core-pom.properties-Datei gemeldet, die jedoch keine tatsächlichen Bytecode-Klassen enthalten – normalerweise sind dies Quellpakete und können ignoriert werden.
Warnung Die Funktion
--fixist experimentell, verwenden Sie sie auf eigene Gefahr, stellen Sie sicher, dass Sie Ihre JAR-Dateien vor der Verwendung sichern.
Das Argument --fix versucht, Instanzen von JndiLookup.class in JndiLookup.vulne umzubenennen und verhindert so das Laden der Klasse. Innerhalb von Java-Archiven geschieht dies durch Umbenennen an Ort und Stelle, erfordert kein erneutes Zippen des Archivs und ist sofort schnell.
Binärdateien sind für Linux 64bit, MS Windows 64bit und 32bit verfügbar – siehe Releases
Die minimal unterstützte Python-Version ist 3.8. Nach meinen Tests kann die Zip-Implementierung von Python 3.6 viele
.jar-Dateien aus meinen Testdaten nicht öffnen.
Der log4shell-Finder ist auf Leistung und geringen Speicherverbrauch optimiert.
Aktualisiert am 23.01.2022, Leistung gemessen in einem Verzeichnis mit 26237 Dateien in 2005 Ordnern.
Laufzeit halbiert, Speicherverbrauch um 2/3 reduziert, Dateisystemzugriffe um mindestens 90%
Command being timed: "./test_log4shell.py /home/hynek/war/ --exclude-dirs /mnt --same-fs"
User time (seconds): 17.68
System time (seconds): 1.20
Percent of CPU this job got: 127%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:14.47
Maximum resident set size (kbytes): 64144
File system inputs: 114424
Command being timed: "./log4j-finder.py /home/hynek/war/"
User time (seconds): 23.59
System time (seconds): 1.09
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:26.18
Maximum resident set size (kbytes): 38604
File system inputs: 142824
Command being timed: "java -jar log4j-detector-latest.jar /home/hynek/war"
User time (seconds): 30.56
System time (seconds): 1.39
Percent of CPU this job got: 113%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:28.26
Maximum resident set size (kbytes): 214116
File system inputs: 14416
Command being timed: "./log4j2-scan /home/hynek/war --scan-log4j1 --scan-zip"
User time (seconds): 52.05
System time (seconds): 25.32
Percent of CPU this job got: 88%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:27.86
Maximum resident set size (kbytes): 593080
File system inputs: 215416
all--no-csv-header, um die CSV-Kopfzeile wegzulassen, um das einfachere Zusammenführen von Ergebnissen mehrerer Hosts zu ermöglichen--threads zur manuellen Einstellung der Anzahl der Scan-Threads--cvs-clean, um eine "CLEAN"-Zeile in die CSV-Ausgabe zu schreiben, falls keine Log4j-Bibliothek erkannt wurde--cvs-stats, um eine "STATS"-Zeile in die CSV-Ausgabe zu schreiben, mit Laufzeit in Sekunden und Anzahl der gescannten Dateien und Ordner--fix konnte in den Versionen 1.19 und 1.20 .jar-Archive beschädigen.