
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
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.Für frühere Änderungen siehe Versionshinweise
Entweder von einem Python-Interpreter aus ausführen oder die Windows-/Linux-Binärdateien aus dem Ordner dist verwenden.
Achten Sie darauf, es als Benutzer mit Zugriff (zumindest lesend) auf das gesamte Dateisystem auszuführen. log4shell-finder durchläuft nur Ordner, auf die es zugreifen kann, und meldet keine Permission-Denied-Fehler.
PS C:\D\log4shell_finder> python3 .\test_log4shell.py --help
usage: Type "test_log4shell.py --help" for more information
On Windows "test_log4shell.py c:\ d:\"
On Linux "test_log4shell.py /"
Searches file system for vulnerable log4j version.
positional arguments:
folders List of folders or files to scan. Use "-" to read list of files from stdin. On MS Windows use "all" to scan all local drives.
optional arguments:
-h, --help show this help message and exit
--exclude-dirs DIR [DIR ...]
Exclude given directories from search.
-s, --same-fs Don't scan mounted volumens.
-j [FILE], --json-out [FILE]
Save results to json file.
-c [FILE], --csv-out [FILE]
Save results to csv file.
--csv-clean Add CLEAN status line in case no entries found
--csv-stats Add STATS line into csv output.
--no-csv-header Don't write CSV header to the output file.
-f, --fix Fix vulnerable by renaming JndiLookup.class into JndiLookup.vulne.
--threads [THREADS] Specify number of threads to use for parallel processing, default is 6.
--file-log [LOGFILE] Enable logging to log file, default is log4shell-finder.log.
--progress [SEC] Report progress every SEC seconds, default is 10 seconds.
--no-errors Suppress printing of file system errors.
--strange Report also strange occurences with pom.properties without binary classes (e.g. source or test packages)
-d, --debug Increase verbosity, mainly for debugging purposes.
-v, --version show program's version number and exit
Benötigt keine zusätzlichen Python-Bibliotheken.
Die Binärdateien wurden erstellt mit:
pip install pyinstaller
pyinstaller -F ./test_log4shell.py
Wenn Sie eine 32-Bit-Version erstellen möchten, installieren Sie einen 32-Bit-Python-Interpreter und installieren Sie pyinstaller wie folgt:
C:\Users\User\AppData\Local\Programs\Python\Python38-32\python.exe -m pip install pyinstaller
und dann:
C:\Users\User\AppData\Local\Programs\Python\Python38-32\Scripts\pyinstaller.exe -n test_log4shell-mswin32 -F test_log4shell.py
Unter Linux können Sie es wie folgt ausführen:
python3 ./test_log4shell.py / /opt --same-fs --no-errors
für MS Windows:
python3 .\test_log4shell.py c:\ d:\ --same-fs --no-errors
Unter MS Windows:
Stellen Sie sicher, dass Sie pywin32 installiert haben, z. B. über pip install pywin32
PS C:\D\log4shell_finder> python3 .\test_log4shell.py c:\ --same-fs --no-errors
8 .8 8 8 8 d'b o 8
8 d'8 8 8 8 8 8
8 .oPYo. .oPYo. d' 8 .oPYo. 8oPYo. .oPYo. 8 8 o8P o8 odYo. .oPYo8 .oPYo. oPYo.
8 8 8 8 8 Pooooo Yb.. 8 8 8oooo8 8 8 8 8 8' `8 8 8 8oooo8 8 `'
8 8 8 8 8 8 'Yb. 8 8 8. 8 8 8 8 8 8 8 8 8. 8
8 `YooP' `YooP8 8 `YooP' 8 8 `Yooo' 8 8 8 8 8 8 `YooP' `Yooo' 8
..:.....::....8 ::::..::.....:..:::..:.....:....:::::::..:::....::..:.....::.....:..::::
:::::::::::ooP'.::::::::::::::::::::::::::::::::: Version 1.17-20220105 ::::::::::::
:::::::::::...::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Parameters: .\test_log4shell.py c:\ --same-fs --no-errors
Host info: 'hostname': 'TESTHOST', 'fqdn': 'TESTHOST.example.com', 'ip': '10.0.0.1', 'system': 'Windows', 'release': '10', 'version': '10.0.19043', 'machine': 'AMD64', 'cpu': 'Intel64 Family 6 Model 142 Stepping 12, GenuineIntel'
[+] [CVE-2021-4104 (8.1)] Package c:\Program Files\Microsoft SQL Server\150\DTS\Extensions\Common\Jars\log4j-1.2.17.jar contains Log4J-1.2.17 <= 1.2.17, JMSAppender.class found
[+] [CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package c:\Program Files\OWASP\Zed Attack Proxy\lib\log4j-core-2.15.0.jar contains Log4J-2.15.0 == 2.15.0
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package c:\Users\testuser\Downloads\sqldeveloper-20.4.1.407.0006-x64.zip -> sqldeveloper/sqldeveloper/lib/log4j-core.jar contains Log4J-2.13.3 >= 2.10.0
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package c:\Users\testuser\Downloads\sqldeveloper-20.4.1.407.0006-x64\sqldeveloper\sqldeveloper\lib\log4j-core.jar contains Log4J-2.13.3 >= 2.10.0
Scanned 1162924 files in 286638 folders.
Found 1 instances vulnerable to CVE-2021-4104 (8.1)
Found 2 instances vulnerable to CVE-2021-44228 (10.0)
Found 3 instances vulnerable to CVE-2021-44832 (6.6)
Found 3 instances vulnerable to CVE-2021-45046 (9.0)
Found 3 instances vulnerable to CVE-2021-45105 (5.9)
Beim Scannen von Kali, mit Fortschrittsbericht jede Sekunde und ausgeschlossenem Zip-Bomb-Ordner:
root@kali:/home/hynek/log4shell-finder# python3 test_log4shell.py / --same-fs --no-errors --progress 1 --exclude-dirs /usr/share/seclists/Payloads/Zip-Bombs/
8 .8 8 8 8 d'b o 8
8 d'8 8 8 8 8 8
8 .oPYo. .oPYo. d' 8 .oPYo. 8oPYo. .oPYo. 8 8 o8P o8 odYo. .oPYo8 .oPYo. oPYo.
8 8 8 8 8 Pooooo Yb.. 8 8 8oooo8 8 8 8 8 8' `8 8 8 8oooo8 8 `'
8 8 8 8 8 8 'Yb. 8 8 8. 8 8 8 8 8 8 8 8 8. 8
8 `YooP' `YooP8 8 `YooP' 8 8 `Yooo' 8 8 8 8 8 8 `YooP' `Yooo' 8
..:.....::....8 ::::..::.....:..:::..:.....:....:::::::..:::....::..:.....::.....:..::::
:::::::::::ooP'.::::::::::::::::::::::::::::::::: Version 1.18-20220106 ::::::::::::
:::::::::::...::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Parameters: test_log4shell.py / --same-fs --no-errors --progress 1 --exclude-dirs /usr/share/seclists/Payloads/Zip-Bombs/
Host info: 'hostname': 'kali', 'fqdn': 'kali', 'ip': '10.0.0.2', 'system': 'Linux', 'release': '5.14.0-kali4-amd64', 'version': '#1 SMP Debian 5.14.16-1kali1 (2021-11-05)', 'machine': 'x86_64', 'cpu': ''
Skipping mount point: /data
Skipping mount point: /home
Skipping mount point: /dev
Skipping mount point: /sys
[+] [CVE-2021-4104 (8.1)] Package /usr/share/paros/paros.jar contains Log4J-1.x <= 1.2.17, JMSAppender.class found
After 1 secs, scanned 119762 files in 4853 folders.
Currently at: /usr/share/icons/hicolor/48x48/apps/kali-jd-gui.png
Skipping blaclisted folder: /usr/share/seclists/Payloads/Zip-Bombs
After 2 secs, scanned 190067 files in 12980 folders.
Currently at: /usr/share/plasma/desktoptheme/kali/metadata.desktop
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package /usr/share/jsql-injection/jsql-injection.jar contains Log4J-2.14.0 >= 2.10.0
After 3 secs, scanned 221233 files in 17725 folders.
Currently at: /usr/share/maltego/maltego-ui/modules/com-paterva-maltego-transform-finder.jar
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package /usr/share/zaproxy/lib/log4j-core-2.14.1.jar contains Log4J-2.14.1 >= 2.10.0
[+] [CVE-2021-4104 (8.1)] Package /usr/share/javasnoop/lib/log4j-1.2.16.jar contains Log4J-1.2.16 <= 1.2.17, JMSAppender.class found
After 7 secs, scanned 233394 files in 18705 folders.
Currently at: /usr/share/images/desktop-base/login-background.svg
After 8 secs, scanned 301417 files in 27952 folders.
Currently at: /usr/lib/python3/dist-packages/faraday_plugins/plugins/repo/dirb/plugin.py
After 9 secs, scanned 342342 files in 34421 folders.
Currently at: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jexec
Skipping mount point: /run
Skipping mount point: /proc
Scanned 379253 files in 37742 folders in 9.9 seconds.
Found 2 instances vulnerable to CVE-2021-4104 (8.1)
Found 2 instances vulnerable to CVE-2021-44228 (10.0)
Found 2 instances vulnerable to CVE-2021-44832 (6.6)
Found 2 instances vulnerable to CVE-2021-45046 (9.0)
Found 2 instances vulnerable to CVE-2021-45105 (5.9)
Die JSON-Ausgabe enthält alle gefundenen Elemente sowie Host-Informationen:
{
"hostname": "myserver",
"fqdn": "myserver",
"ip": "10.0.0.1",
"system": "Linux",
"release": "5.4.0-58-generic",
"version": "#64-Ubuntu SMP Wed Dec 9 08:16:25 UTC 2020",
"machine": "x86_64",
"cpu": "x86_64",
"cmdline": "./test_log4shell.py / --exclude-dirs /mnt --same-fs --csv-out --json-out",
"starttime": "2021-12-22 07:07:54",
"items": [
{
"container": "Package",
"path": "/home/hynek/.m2/repository/org/apache/logging/log4j/log4j-core/2.14.1/log4j-core-2.14.1.jar",
"status": "CVE_2021_44228",
"message": "contains Log4J-2.14.1 >= 2.10.0",
"pom_version": "2.14.1"
},
{
"container": "Package",
"path": "/home/hynek/.m2/repository/org/apache/logging/log4j/log4j-core/2.16.0/log4j-core-2.16.0.jar",
"status": "NOTOKAY",
"message": "contains Log4J-2.16.0 == 2.16.0",
"pom_version": "2.16.0"
},
{
"container": "Package",
"path": "/home/hynek/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar",
"status": "CVE_2021_4104",
"message": "contains Log4J-1.2.17 <= 1.2.17, JMSAppender.class found",
"pom_version": "1.2.17"
},
{
"container": "Package",
"path": "/home/hynek/.m2/repository/log4j/log4j/1.2.12/log4j-1.2.12.jar",
"status": "CVE_2021_4104",
"message": "contains Log4J-1.x <= 1.2.17, JMSAppender.class found",
"pom_version": "1.x"
},
{
"container": "Package",
"path": "/home/hynek/war/elastic-apm-java-aws-lambda-layer-1.28.1.zip:elastic-apm-agent-1.28.1.jar",
"status": "MAYBESAFE",
"message": "contains Log4J-2.12.1 <= 2.0-beta8 (JndiLookup.class not present)",
"pom_version": "2.12.1"
}
]
}
hat die folgenden Spalten:
"datetime","ver","ip","fqdn","OS","Release","arch","container","status","path","message","pom_version","product"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Folder","CVE-2022-23302 (6.6), CVE-2022-23305 (8.1), CVE-2022-23307 (8.1)","/home/hynek/war.bak/reload4j/reload4j-1.2.18.0/org/apache/log4j","contains log4j-1.2.18.0","1.2.18.0","log4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","OLDSAFE","/home/hynek/war.bak/reload4j/reload4j-1.2.18.2.jar","contains reload4j-1.2.18.2","1.2.18.2","reload4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","OLDSAFE","/home/hynek/war.bak/reload4j/reload4j-1.2.18.1.jar","contains reload4j-1.2.18.1","1.2.18.1","reload4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","CVE-2019-17571 (9.8), CVE-2021-4104 (7.5), CVE-2022-23302 (6.6), CVE-2022-23305 (8.1), CVE-2022-23307 (8.1)","/home/hynek/war.bak/reload4j/log4j-1.2.17.jar","contains log4j-1.2.17","1.2.17","log4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","CVE-2022-23302 (6.6), CVE-2022-23305 (8.1), CVE-2022-23307 (8.1)","/home/hynek/war.bak/reload4j/reload4j-1.2.18.0.jar","contains log4j-1.2.18.0","1.2.18.0","log4j"
| 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 |