
Trouvez les versions vulnérables de Log4j2 sur le disque et également dans les fichiers d'archive Java (Log4Shell CVE-2021-44228, CVE-2021-45046, CVE-2021-45105)
Un script Python3 pour scanner le système de fichiers afin de trouver Log4j2 vulnérable à Log4Shell (CVE-2021-44228 & CVE-2021-45046 & CVE-2021-45105).
Il scanne récursivement à la fois sur le disque et à l'intérieur des fichiers Java Archive (JARs), y compris imbriqués.

log4j-finder identifie les bibliothèques log4j2 sur votre système de fichiers à l'aide d'une liste de hachages MD5 connus comme malveillants et connus comme sûrs de fichiers spécifiques (actuellement uniquement JndiManager.class) présents dans les paquets log4j2-core-* ; le paquet principal touché par log4shell. Il recherche ces fichiers dans les fichiers Java Archive et sur le système de fichiers. La version de log4j2 est ensuite identifiée sur la base du hachage MD5 de ce fichier.
Pour optimiser la vitesse de scan, il scanne le système de fichiers et ne traite QUE les noms de fichiers suivants :
Java ARchive dans le nom de fichier (également imbriqués dans ces archives) :
*.jar, *.war, *.earJndiManager.classSi le fichier correspond à l'une des extensions mentionnées ci-dessus, il vérifiera à l'intérieur de ces archives (tout en mémoire, rien n'est décompressé) pour rechercher les noms de fichiers pour lesquels le script possède des hachages connus. Il cherche également dans les archives imbriquées, par exemple, un fichier JAR dans un fichier WAR.
Le script ne scanne PAS d'autres extensions de fichiers d'archives telles que 7z, RAR, TAR, BZ2, etc. Ainsi, par exemple, si un fichier JAR se trouve à l'intérieur d'un fichier 7z, le script ne le trouvera pas. La raison est que Java ne peut charger que les formats Java ARchive, donc nous ne scannons que ceux-ci.
Les hachages MD5 inconnus sont affichés comme UNKNOWN ; cela peut se produire si un paquet Java qui n'est pas log4j2 utilise le même nom de fichier que celui recherché par ce script.
Il ne s'agit très probablement pas de log4j2 si le chemin du fichier identifié ne contient pas de références à org/apache/logging/log4j. Cependant, une vérification manuelle est toujours recommandée.
Vous pouvez installer log4j-finder en utilisant l'une des méthodes suivantes :
Vous pouvez télécharger le binaire correspondant à votre système d'exploitation :
Si vous êtes sous Linux, vous pouvez également télécharger la dernière release et l'exécuter de l'une des manières suivantes :
curl -L https://github.com/fox-it/log4j-finder/releases/latest/download/log4j-finder -o log4j-finder
chmod +x log4j-finder
sudo ./log4j-finder
wget https://github.com/fox-it/log4j-finder/releases/latest/download/log4j-finder -O log4j-finder
chmod +x log4j-finder
sudo ./log4j-finder
Pour une distribution avec Python 3.6+ installé, l'une des méthodes suivantes fonctionne également :
curl -L https://github.com/fox-it/log4j-finder/raw/main/log4j-finder.py -o log4j-finder.py
sudo python3 log4j-finder.py
wget https://github.com/fox-it/log4j-finder/raw/main/log4j-finder.py
sudo python3 log4j-finder.py
git clone https://github.com/fox-it/log4j-finder
cd log4j-finder
sudo python3 log4j-finder.py
Il y a une GitHub Action dans le dépôt qui génère automatiquement un binaire Windows et Linux du script log4j-finder.py en utilisant PyInstaller à chaque commit. Les artefacts de build de ces exécutions de workflow sont utilisés pour les attacher à la page des Releases.
Nous sommes conscients que certains éditeurs d'antivirus n'apprécient pas les binaires Windows ; dans ce cas, nous vous recommandons de générer vous-même l'exécutable en suivant les étapes ci-dessous (notez que nous fournissons désormais également des binaires signés).
Si vous n'avez pas Python 3.6 ou une version supérieure installé, téléchargez-le d'abord depuis https://www.python.org/downloads/
Python 3.8.10 si vous voulez que votre binaire fonctionne sous Windows 7 :
Add Python 3.x to PATH, cela rend les étapes suivantes beaucoup plus faciles.Ouvrez une invite de commandes et utilisez pip pour installer le paquet pyinstaller :
pip install pyinstaller
# In the output you will see where pyinstaller is installed, for example:
# C:\Users\User\AppData\Roaming\Python\Python310\Scripts
#
# Verify using --version
C:\Users\User\AppData\Roaming\Python\Python310\Scripts\pyinstaller.exe --version
4.7
Vous pouvez également installer le paquet colorama pour ajouter la prise en charge des couleurs :
pip install colorama
pyinstaller --onefile --hidden-import colorama log4j-finder.py
L'exécutable Windows se trouve alors dans le répertoire dist : dist\log4j-finder.exe
Exemple donné pour Debian 11 :
# Install PyInstaller using pip3
sudo apt update
sudo apt install python3-pip git
pip3 install --user pyinstaller
# Git clone and build using PyInstaller
git clone https://github.com/fox-it/log4j-finder
cd log4j-finder
~/.local/bin/pyinstaller --onefile log4j-finder.spec
# Verify that the binary works
./dist/log4j-finder --help
Exemple d'utilisation pour scanner un chemin (par défaut /) :
$ python3 log4j-finder.py /path/to/scan
Ou directement un fichier JAR :
$ python3 log4j-finder.py /path/to/jarfile.jar
Ou plusieurs répertoires et/ou fichiers :
$ python3 log4j-finder.py /path/to/dir1 /path/to/dir2 /path/to/jarfile.jar
Exclure des fichiers ou des répertoires :
$ python3 log4j-finder.py / --exclude "/*/.dontgohere" --exclude "/home/user/*.war"
Notez que sous Windows, il ne scanne que le lecteur racine c:\ si vous ne fournissez aucun argument supplémentaire.
Nous vous recommandons de spécifier les lecteurs à scanner en ligne de commande, par exemple (les lecteurs qui n'existent pas sont ignorés) :
log4j-finder.exe c:\ d:\ e:\ f:\
Les fichiers ou répertoires inaccessibles (erreurs Permission denied) ne sont pas affichés.
Si vous souhaitez voir plus de sortie, vous pouvez utiliser l'option -v pour le mode verbeux, ou -vv pour le mode débogage (recommandé uniquement à des fins de débogage).
Arguments de l'application :
positional arguments:
PATH Directory or file(s) to scan (recursively) (default:
['/'])
optional arguments:
-h, --help show this help message and exit
-v, --verbose verbose output (-v is info, -vv is debug) (default: 0)
-n, --no-color disable color output (default: False)
-q, --quiet be more quiet, disables banner and summary (default:
False)
-b, --no-banner disable banner (default: False)
-V, --version show program's version number and exit
-e PATTERN, --exclude PATTERN
exclude files/directories by pattern (can be used
multiple times) (default: None)
Les fichiers sont scannés récursivement, à la fois sur le disque et dans les fichiers Java Archive (imbriqués).
Téléchargez la dernière version du script log4j-finder.py puis exécutez PyInstaller :