
[Moved to Codeberg] Scanner locale semplice per istanze log4j vulnerabili

(Scritto in Go perché, si sa, "scrivi una volta, esegui ovunque.")
Questo è un semplice strumento che può essere utilizzato per trovare istanze vulnerabili di log4j 1.x e 2.x in installazioni di software Java come applicazioni web. Gli archivi JAR e WAR vengono ispezionati e i file di classe noti per essere vulnerabili vengono segnalati. La scansione avviene in modo ricorsivo: i file WAR contenenti file WAR contenenti file JAR contenenti file di classe vulnerabili dovrebbero essere segnalati correttamente.
Le vulnerabilità attualmente riconosciute sono:
Lo strumento di scansione attualmente verifica gli artefatti di build noti ottenuti tramite Maven. Le ricompilazioni dal sorgente come quelle effettuate per le distribuzioni Linux potrebbero non essere riconosciute.
È incluso anche un semplice strumento di patch che può essere utilizzato per rimuovere le classi dannose dai file JAR riscrivendo la struttura dell'archivio ZIP.
I binari per x86_64 Windows, Linux, MacOSX per le release taggate sono forniti tramite la pagina 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 …
Il flag --verbose mostra ogni file .jar e .war controllato, anche se non viene trovato alcun problema.
Il flag --quiet sopprime l'output tranne gli indicatori di una vulnerabilità nota.
Il flag --ignore-v1 esclude i controlli per le vulnerabilità log4j 1.x.
Il flag --ignore-vulns consente di escludere i controlli per
vulnerabilità specifiche. es. -ignore-vulns=CVE-2021-45046,CVE-2021-44832.
Per controllare tutte le vulnerabilità note, passare una lista vuota in questo modo:
-ignore-vulns=
Il flag --log consente di scrivere tutto in un file di log invece che su stdout/stderr.
Usare il flag --exclude per escludere le sottodirectory dalla scansione. Può essere usato più volte.
Il flag --scan-network indica allo scanner di cercare nei filesystem di rete (disabilitato per impostazione predefinita). Non è stato implementato per Windows.
Se vengono trovati file di classe che indicano una delle vulnerabilità, messaggi come i seguenti vengono stampati sull'output 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
Attenzione: Usalo a tuo rischio e conserva i file JAR originali.
$ ./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
Installa un compilatore Go.
Esegui i seguenti comandi nel repository estratto:
go build -o local-log4j-vuln-scanner ./scanner
go build -o local-log4j-vuln-patcher ./patcher
(Aggiungi l'estensione .exe appropriata sui sistemi Windows, ovviamente.)
GNU General Public License, versione 3
Hilko Bengen <[email protected]>