
Scanner de fichiers le plus rapide pour log4shell (CVE-2021-44228, CVE-2021-45046) et autres instances vulnérables (CVE-2017-5645, CVE-2019-17571, CVE-2022-23305, CVE-2022-23307 ... ) de la bibliothèque log4j. Excellentes performances et faible empreinte mémoire.

Portage Python de https://github.com/mergebase/log4j-detector log4j-detector est protégé par le droit d'auteur (C) Copyright 2021 Mergebase Software Inc. https://mergebase.com/ Sous licence GPLv3.
La motivation du portage en Python était d'améliorer les performances, de réduire la consommation mémoire et d'accroître la lisibilité du code. Voir la section performance ci-dessous pour la comparaison.
Et il semblerait que ce soit l'outil de scan le plus rapide avec les besoins en mémoire les plus faibles
Identifie les versions de log4j (1.x), reload4j (1.2.18+) et log4j-core (2.x) sur votre système de fichiers vulnérables à CVE-2021-44228, CVE-2021-45046 et bien d'autres – voir le tableau ci-dessous. Il est capable de trouver des instances intégrées dans des applications plus volumineuses, à plusieurs niveaux de profondeur. Fonctionne sous Linux, Windows, Mac ou partout ailleurs où Python 3.8+ s'exécute.
Peut détecter correctement log4j dans les jars/wars exécutables spring-boot, les dépendances fusionnées dans des uber jars, les shaded jars, et même les fichiers jar extraits, simplement non compressés sur le système de fichiers (c.-à-d. *.class).
Il peut également traiter les fichiers de classes shaded - extensions .esclazz (elastic) et .classdata (Azure).
Extensions d'archives Java recherchées : .zip, .jar, .war, .ear, .aar, .jpi,
.hpi, .rar, .nar, .wab, .eba, .ejb, .sar, .apk, .par, .kar
| Détecte | CVE | CVSSv3 | Sévérité | Java | Vulnérable depuis | Vulnérable jusqu'à | Corrigé dans | Bibliothèque |
|---|---|---|---|---|---|---|---|---|
| OUI | CVE-2021-44228 | 10.0 | Critique | 8 | 2.0-beta9 | 2.14.1 | 2.15.0 | log4jv2 |
| OUI | CVE-2017-5645 | 9.8 | Critique | 7 | 2.0-alpha1 | 2.8.1 | 2.8.2 | log4jv2 |
| OUI | CVE-2019-17571 | 9.8 | Critique | 1.2.0 | 1.2.17 | nofix | log4jv1 | |
| OUI | CVE-2021-45046 | 9.0 | Critique | 7/8 | 2.0-beta9 | 2.15.0 excluant 2.12.2 | 2.12.2/2.16.0 | log4jv2 |
| OUI | CVE-2022-23305 | 9.8 | Critique | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| OUI | CVE-2022-23307 | 9.8 | Critique | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| OUI | CVE-2022-23302 | 8.8 | Élevée | 1.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| OUI | CVE-2021-4104 | 7.5 | Élevée | - | 1.0 | 1.2.17 | nofix | log4jv1 |
| OUI | CVE-2021-44832 | 6.6 | Moyenne | 6/7/8 | 2.0-alpha7 | 2.17.0, excluant 2.3.2/2.12.4 | 2.3.2/2.12.4/2.17.1 | log4jv2 |
| - | CVE-2021-42550 | 6.6 | Moyenne | - | 1.0 | 1.2.7 | 1.2.8 | logback |
| OUI | CVE-2021-45105 | 5.9 | Moyenne | 6/7/8 | 2.0-beta9 | 2.16.0, excluant 2.12.3 | 2.3.1/2.12.3/2.17.0 | log4jv2 |
| - | CVE-2020-9488 | 3.7 | Faible | 7/8 | 2.0-alpha1 | 2.13.1 | 2.12.3/2.13.2 | log4jv2 |
Chaque instance est signalée avec la liste des CVE qui lui correspond. Pour chaque CVE, le fichier de bibliothèque log4j est analysé pour déterminer si les contournements recommandés (par ex. JndiLookup.class ou JMSAppender.class supprimés) ont été appliqués ; dans ce cas, il est considéré comme non vulnérable. Le statut STRANGE est signalé pour les archives contenant un fichier pom.properties de log4j-core, mais sans classes bytecode réelles ; il s'agit généralement de paquets source et ils peuvent être ignorés.
Avertissement La fonctionnalité
--fixest expérimentale, utilisez-la à vos risques et périls ; assurez-vous de sauvegarder vos fichiers jar avant de l'utiliser.
L'argument --fix tente de renommer les instances de JndiLookup.class en JndiLookup.vulne, empêchant ainsi le chargement de la classe. Dans les archives Java, cela se fait via un renommage sur place, ne nécessite pas de re-compresser l'archive et est instantané.
Des binaires sont disponibles pour Linux 64 bits, MS Windows 64 bits et 32 bits – voir Releases
La version minimale de Python prise en charge est 3.8. D'après mes tests, l'implémentation zip de Python 3.6 ne peut pas ouvrir beaucoup de fichiers
.jarde mes données de test.
log4shell finder est optimisé pour les performances et une faible empreinte mémoire.
Mis à jour le 23.1.2022, performances mesurées sur un répertoire de 26237 fichiers dans 2005 dossiers.
Temps d'exécution réduit de moitié, consommation mémoire réduite des deux tiers, lectures du système de fichiers réduites d'au moins 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 pour omettre l'en-tête CSV afin de faciliter la fusion des résultats de plusieurs hôtes--threads pour régler manuellement le nombre de threads de scan--cvs-clean afin d'écrire une ligne "CLEAN" dans la sortie CSV si aucune bibliothèque log4j n'est détectée--cvs-stats afin d'écrire une ligne "STATS" dans la sortie CSV avec le temps d'exécution en secondes et le nombre de fichiers et dossiers scannés