
Scanner récursif de vulnérabilités pour les CVE Log4j dans les archives et les images Docker. Détecte JndiLookup.class et les versions vulnérables via les hachages SHA256, avec un correctif optionnel pour supprimer la classe d'exploitation.
Ce scanner parcourt récursivement les chemins, y compris les archives, à la recherche de versions vulnérables de log4j et de fichiers org/apache/logging/log4j/core/lookup/JndiLookup.class.
Actuellement, la liste d'autorisation définit les versions non exploitables, dans ce cas log4j-core 2.17.0 et 2.12.3.

| CVE | Références |
|---|
| CVE-2021-44228 | https://www.cve.org/CVERecord?id=CVE-2021-44228 |
| CVE-2021-45046 | https://www.cve.org/CVERecord?id=CVE-2021-45046 |
| CVE-2021-45105 | https://www.cve.org/CVERecord?id=CVE-2021-45105 |
| CVE-2021-44832 | https://www.cve.org/CVERecord?id=CVE-2021-44832 |
$ divd-2021-00038--log4j-scanner.exe {target-path}
$ divd-2021-00038--log4j-scanner {target-path}
Avec cet outil, vous pouvez désormais aussi analyser des conteneurs :
$ ./divd-2021-00038--log4j-scanner scan-image logstash:7.16.1
ou des images locales :
$ ./divd-2021-00038--log4j-scanner scan-image --local {sha256|pattern}
$ ./divd-2021-00038--log4j-scanner scan-image --local log4shell:latest
$ ./divd-2021-00038--log4j-scanner scan-image --local 4949add9e671
# analyser toutes les images locales
$ ./divd-2021-00038--log4j-scanner scan-image --local
Vous pouvez aussi corriger l'image :
$ docker save log4shell > ./log4shell-image.tar
$ ./divd-2021-00038--log4j-scanner ./log4shell-image.tar
$ ./divd-2021-00038--log4j-scanner patch ./log4shell-image.tar
$ cat ./log4shell-image.tar.patch | docker load
La comparaison des deux fichiers tar donnera les différences suivantes :
Binary files ../2/BOOT-INF/lib/log4j-core-2.14.1.jar and ./BOOT-INF/lib/log4j-core-2.14.1.jar differ
Binary files ../2/app/spring-boot-application.jar and ./app/spring-boot-application.jar differ
Binary files ../2/b0d66ac73d47865118cfb9a1244f1508d94ea938da1eb78c2db20bd2e1a6629a/layer.tar and ./b0d66ac73d47865118cfb9a1244f1508d94ea938da1eb78c2db20bd2e1a6629a/layer.tar differ
Only in ./org/apache/logging/log4j/core/lookup: JndiLookup.class
Nous avons ajouté un support préliminaire pour la correction récursive de fichiers. Ceci est très expérimental, soyez prudent avec cette fonctionnalité. Actuellement, la correction ne fonctionne qu'avec les fichiers d'archive (jar / tar). Le correctif créera un nouveau fichier `.patch`` qui devra remplacer le fichier d'origine. Ceci est intentionnellement un processus manuel, car il doit être synchronisé avec le redémarrage des services. Assurez-vous de créer une sauvegarde du fichier d'origine avant de le remplacer. Après la correction, vous pouvez analyser à nouveau pour vous assurer de n'avoir manqué aucun fichier. Actuellement, les fichiers .class simples dans les dossiers ne seront pas corrigés, car ils peuvent être supprimés manuellement en toute sécurité.
Le fichier .patch sera exactement le même que le fichier d'origine, sans JndiLookup.class. Cela devrait être suffisant pour atténuer ce problème en attendant les mises à niveau. Assurez-vous de faire des sauvegardes et de tester minutieusement.
Le correctif refusera de s'exécuter sur les dossiers, par précaution. Pointez simplement le correctif vers l'archive vulnérable.
$ divd-2021-00038--log4j-scanner.exe patch {target-path}
divd-2021-00038--log4j-scanner patch {target-path}
Prérequis :
$ git clone "https://github.com/dtact/divd-2021-00038--log4j-scanner.git"
$ go build -o ./.builds/divd-2021-00038--log4j-scanner ./main.go
Code et documentation copyright 2021 Remco Verhoef (DTACT).
Code publié sous licence MIT.