
Scanneur local de bytecode pour la vulnérabilité Log4JShell (CVE-2021-44228)
Log4jShell Bytecode Detector est un outil open source qui permet d'identifier si un fichier jar est affecté par la faille critique CVE-2021-44228. L'outil analyse le fichier jar et compare les classes à un ensemble de hashs vulnérables pour les classes du fichier jar. Les hashs ont été précalculés pour les artefacts de Maven Central.
MISE À JOUR IMPORTANTE : nous avons étendu la liste des artefacts affectés sur Maven Central. La liste contient 18.816 artefacts. Les artefacts utilisent log4j-core comme dépendance déclarée, ou nous avons identifié des fichiers .class dans les artefacts qui correspondent aux versions affectées de log4j-core.
java -cp <PATH_TO_DOWNLOADED_JAR> de.codeshield.log4jshell.Log4JDetector <ABSOLUTE_PATH_TO_JAR_TO_CHECK>Si le fichier jar est affecté, l'outil affiche des informations sur la ligne de commande :
CVE-2021-44228 found declared as dependency in META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml
CVE-2021-44228 found in class file org/apache/logging/log4j/core/net/JndiManager$1.class
java -cp <PATH_TO_DOWNLOADED_JAR> de.codeshield.log4jshell.Log4JProcessDetectorUne grave vulnérabilité d'exécution de code à distance (Remote Code Execution) a été découverte dans log4j ; les versions 2.0-beta9 à 2.14 sont concernées. La vulnérabilité a été classée comme critique, car elle affecte log4j, l'une des bibliothèques de journalisation les plus utilisées pour Java. Il existe de nombreuses références et articles sur le sujet.
Log4j est et a été utilisé dans pratiquement tous les projets Java à des fins de journalisation. Nous devons maintenant comprendre quels projets et bibliothèques sont réellement affectés. Grâce au mécanisme de dépendances de Java, une application peut également être affectée si elle inclut transitivement la version vulnérable de la bibliothèque. Un projet A inclut une bibliothèque lib transitivement si l'une des dépendances directes B de A a une dépendance vers lib. Un test simple pour savoir si l'on est affecté peut être réalisé à l'aide de l'arbre des dépendances Maven :
Exemple : exécutez la commande mvn dependency:tree sur un projet Maven.
[INFO] exampleProject:mainProject:jar:0.0.1-SNAPSHOT
[INFO] +- exampleProject:lib-using-log4j:jar:0.0.1-SNAPSHOT:compile
[INFO] | \- org.apache.logging.log4j:log4j-core:jar:2.14.1:compile
Cette vérification n'est toutefois qu'une première indication et ne suffit pas pour les raisons suivantes :
Les programmes Java sont fréquemment :
Par conséquent, toute bibliothèque utilisée par un projet Java peut introduire la vulnérabilité dans votre projet. Une analyse approfondie du bytecode est utile, c'est ce que nous publions dans ce dépôt.
Pour compiler cet outil, exécutez
mvn compile
Pour assembler un jar exécutable, utilisez
mvn clean compile assembly:single
L'ensemble des hashs vulnérables des classes a été précalculé sur l'intégralité du dépôt Maven Central. Les hashs des classes contiennent tous les hashs que nous avons identifiés comme similaires au niveau du bytecode grâce à la technologie d'empreinte (Fingerprinting).
Les informations précalculées contiennent :
Comme plage de versions affectée, nous avons considéré [2.0-beta9, 2.15) Référence.
Cet outil utilise une nouvelle technologie d'empreinte de bytecode pour Java inventée par Andreas Dann. Le flux de base est le suivant :
Remarque : pour un déploiement plus simple, ce dépôt fournit les hashs SHA des classes vulnérables ; ces informations ont été calculées à l'aide de la technologie Fingerprinting.
La liste des hashs et des artefacts Maven n'est pas exhaustive. Nous mettrons régulièrement à jour ces listes.
Cet outil a été co-créé par les cofondateurs de CodeShield
Les retours sont les bienvenus !
Nous travaillons à étendre la liste des artefacts affectés et cherchons toujours à améliorer notre offre. contribution welcome
Aussi, mettez une ⭐️ à ce dépôt si notre scanner vous a aidé !