
[Moved to Codeberg] Scanner local simple pour les instances log4j vulnérables

(Écrit en Go parce que, vous savez, « écrire une fois, exécuter partout ».)
C'est un outil simple qui peut être utilisé pour trouver des instances vulnérables de log4j 1.x et 2.x dans des installations de logiciels Java tels que des applications web. Les archives JAR et WAR sont inspectées et les fichiers de classe connus pour être vulnérables sont signalés. L'analyse se fait de manière récursive : les fichiers WAR contenant des fichiers WAR contenant des fichiers JAR contenant des fichiers de classe vulnérables devraient être correctement signalés.
Les vulnérabilités actuellement reconnues sont :
L'outil d'analyse vérifie actuellement les artefacts de compilation connus qui ont été obtenus via Maven. Les reconstructions à partir des sources telles qu'elles sont effectuées pour les distributions Linux peuvent ne pas être reconnues.
Un outil de correctif simple est également inclus ; il peut être utilisé pour supprimer les classes problématiques des fichiers JAR en réécrivant la structure de l'archive ZIP.
Des binaires pour Windows x86_64, Linux, MacOSX pour les versions étiquetées sont fournis via la page Releases.
$ ./local-log4j-vuln-scanner [--verbose] [--quiet] \
[--ignore-v1] [--ignore-vulns=...] \
[--exclude /path/to/exclude …] \
[--scan-network] \
[--log /path/to/file.log] \
/path/to/app1 /path/to/app2 …
Le drapeau --verbose affiche chaque fichier .jar et .war vérifié, même si aucun problème n'est trouvé.
Le drapeau --quiet supprime la sortie sauf pour les indicateurs d'une vulnérabilité connue.
Le drapeau --ignore-v1 exclut les vérifications des vulnérabilités log4j 1.x.
Le drapeau --ignore-vulns permet d'exclure les vérifications de
vulnérabilités spécifiques. Par exemple -ignore-vulns=CVE-2021-45046,CVE-2021-44832.
Pour vérifier toutes les vulnérabilités connues, passez une liste vide comme ceci :
-ignore-vulns=
Le drapeau --log permet d'écrire tout dans un fichier journal au lieu de stdout/stderr.
Utilisez le drapeau --exclude pour exclure des sous-répertoires de l'analyse. Peut être utilisé plusieurs fois.
Le drapeau --scan-network indique au scanner de rechercher les systèmes de fichiers réseau (désactivé par défaut). Cela n'a pas été implémenté pour Windows.
Si des fichiers de classe indiquant l'une des vulnérabilités sont trouvés, des messages comme les suivants sont imprimés sur la sortie standard :
./local-log4j-vuln-scanner - a simple local log4j vulnerability scanner
Checking for vulnerabilities: CVE-2019-17571, CVE-2021-44228, CVE-2021-45105
examining /path/to/vuln/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war
indicator for vulnerable component found in /path/to/vuln/Downloads/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war::WEB-INF/lib/log4j-core-2.14.1.jar (org/apache/logging/log4j/core/net/JndiManager.class): JndiManager.class log4j 2.14.0-2.14.1 CVE-2021-44228, CVE-2021-45105
Scan finished
Attention : Utilisez-le à vos propres risques et conservez les fichiers JAR d'origine.
$ ./local-log4j-vuln-patcher log4j-core-2.14.1.jar log4j-core-2.14.1-patched.jar
Filtering out org/apache/logging/log4j/core/pattern/MessagePatternConverter.class (log4j 2.14)
Filtering out org/apache/logging/log4j/core/net/JndiManager.class (log4j 2.14.0-2.14.1)
Writing to log4j-core-2.14.1-patched.jar done
Installez un compilateur Go.
Exécutez les commandes suivantes dans le dépôt extrait :
go build -o local-log4j-vuln-scanner ./scanner
go build -o local-log4j-vuln-patcher ./patcher
(Ajoutez l'extension .exe appropriée sur les systèmes Windows, bien sûr.)
GNU General Public License, version 3
Hilko Bengen <[email protected]>