
Trova le versioni vulnerabili di Log4j2 su disco e anche all'interno di file di archivio Java (Log4Shell CVE-2021-44228, CVE-2021-45046, CVE-2021-45105)
Uno script Python3 per scansionare il filesystem alla ricerca di Log4j2 vulnerabile a Log4Shell (CVE-2021-44228 & CVE-2021-45046 & CVE-2021-45105).
Scansiona ricorsivamente sia su disco che all'interno di file Java Archive (JAR) annidati.

log4j-finder identifica le librerie log4j2 sul tuo filesystem utilizzando un elenco di hash MD5 noti come dannosi e noti come sicuri di file specifici (attualmente solo JndiManager.class) presenti nei pacchetti log4j2-core-*; il pacchetto principale colpito da log4shell. Cerca questi file all'interno di file Java Archive e sul filesystem. La versione log4j2 viene quindi identificata in base all'hash MD5 di questo file.
Per ottimizzare la velocità di scansione, cerca nel filesystem ed elabora SOLO i seguenti nomi di file:
Java ARchive nel nome (anche annidati in questi archivi):
*.jar, *.war, *.earJndiManager.classSe il file corrisponde a una delle estensioni menzionate sopra, controllerà all'interno di questi archivi (tutto in memoria, nulla viene decompresso) per cercare i nomi di file per cui lo script ha hash noti. Esamina anche gli archivi annidati, ad esempio un file JAR all'interno di un file WAR.
Lo script NON scansiona altre estensioni di file di archivio come 7z, RAR, TAR, BZ2, ecc. Quindi, ad esempio, se un file JAR si trova all'interno di un file 7z, lo script non lo troverà. La logica è che Java può caricare solo formati Java ARchive, quindi scansioniamo solo quelli.
Gli hash MD5 sconosciuti vengono mostrati come UNKNOWN; ciò potrebbe accadere se un pacchetto Java non log4j2 utilizza lo stesso nome di file che questo script cerca.
Molto probabilmente non è log4j2 se il percorso del file identificato non contiene riferimenti a org/apache/logging/log4j. Tuttavia, si consiglia comunque una verifica manuale.
Puoi installare log4j-finder utilizzando uno dei seguenti metodi:
Puoi scaricare il binario corretto per il tuo sistema operativo:
Se sei su Linux, puoi anche scaricare l'ultima release ed eseguirla in uno dei seguenti modi:
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
Per distribuzioni con Python 3.6+ installato, funzionano anche uno dei seguenti metodi:
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
C'è una GitHub Action nel repository che genera automaticamente un binario per Windows e Linux dello script log4j-finder.py utilizzando PyInstaller ad ogni commit. Gli artefatti di build di questi workflow vengono utilizzati per essere allegati alla pagina Releases.
Siamo consapevoli che alcuni vendor di antivirus non apprezzano i binari Windows; in tal caso, consigliamo di generare tu stesso l'eseguibile seguendo i passaggi seguenti (nota che ora forniamo anche binari firmati).
Se non hai Python 3.6 o superiore installato, scaricalo prima da https://www.python.org/downloads/
Python 3.8.10 se vuoi che il binario funzioni su Windows 7:
Add Python 3.x to PATH, questo renderà i passaggi seguenti molto più semplici.Apri un prompt dei comandi e usa pip per installare il pacchetto pyinstaller:
pip install pyinstaller
# Nell'output vedrai dove è installato pyinstaller, ad esempio:
# C:\Users\User\AppData\Roaming\Python\Python310\Scripts
#
# Verifica usando --version
C:\Users\User\AppData\Roaming\Python\Python310\Scripts\pyinstaller.exe --version
4.7
Installa opzionalmente il pacchetto colorama per aggiungere supporto ai colori:
pip install colorama
Scarica l'ultima versione dello script e poi esegui PyInstaller:
pyinstaller --onefile --hidden-import colorama log4j-finder.py
L'eseguibile Windows si troverà quindi nella directory dist: dist\log4j-finder.exe
Esempio fornito per Debian 11:
# Installa PyInstaller usando pip3
sudo apt update
sudo apt install python3-pip git
pip3 install --user pyinstaller
# Git clone e build usando PyInstaller
git clone https://github.com/fox-it/log4j-finder
cd log4j-finder
~/.local/bin/pyinstaller --onefile log4j-finder.spec
# Verifica che il binario funzioni
./dist/log4j-finder --help
Esempio di utilizzo per scansionare un percorso (default: /):
$ python3 log4j-finder.py /path/to/scan
O direttamente un file JAR:
$ python3 log4j-finder.py /path/to/jarfile.jar
O più directory e/o file:
$ python3 log4j-finder.py /path/to/dir1 /path/to/dir2 /path/to/jarfile.jar
Escludi file o directory:
$ python3 log4j-finder.py / --exclude "/*/.dontgohere" --exclude "/home/user/*.war"
Nota che su Windows scansiona solo l'unità root c:\ se non fornisci argomenti aggiuntivi.
Consigliamo di specificare le unità che devi scansionare dalla riga di comando, ad esempio (le unità che non esistono vengono saltate):
log4j-finder.exe c:\ d:\ e:\ f:\
I file o le directory a cui non è possibile accedere (errori di "Permesso negato") non vengono stampati.
Se vuoi vedere più output, puoi usare il flag -v per verbose, o -vv per debug (consigliato solo per scopi di debugging).
Argomenti dell'applicazione:
positional arguments:
PATH Directory o file da scansionare (ricorsivamente) (default:
['/'])
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esci
-v, --verbose output verbose (-v è info, -vv è debug) (default: 0)
-n, --no-color disabilita l'output a colori (default: False)
-q, --quiet silenzioso, disabilita banner e riepilogo (default:
False)
-b, --no-banner disabilita il banner (default: False)
-V, --version mostra il numero di versione del programma ed esci
-e PATTERN, --exclude PATTERN
esclude file/directory per pattern (può essere usato
più volte) (default: None)
I file vengono scansionati ricorsivamente, sia su disco che all'interno di file Java Archive (annidati).
log4j-finder.py