
Scanner di file system che rileva versioni vulnerabili di Log4J (CVE-2021-44228, CVE-2021-45046) analizzando classi Java compilate, inclusi archivi annidati. Funziona su Linux, Windows e Mac.

Scanner che rileva versioni vulnerabili di Log4J per aiutare i team a valutare la loro esposizione a CVE-2021-44228 (CRITICA), CVE-2021-45046, CVE-2021-45105 e CVE-2021-44832. Può cercare istanze di Log4J esaminando attentamente l'intero file-system, incluse tutte le applicazioni installate. È in grado di trovare istanze di Log4J nascoste a diversi livelli di profondità. Funziona su Linux, Windows e Mac, e ovunque Java sia eseguito!
log4j-core. E log4j-api? Attualmente segnala le versioni log4j-core 2.3.2, 2.12.4 e 2.17.1 come _SAFE_, 2.3.1, 2.12.2, 2.12.3, 2.15.0, 2.16.0 e 2.17.0 come _OKAY_ e tutte le altre versioni come _VULNERABLE_ (sebbene segnali le versioni precedenti alla 2.0-beta9 come _POTENTIALLY_SAFE_). Segnala le versioni più vecchie di log4j-1.x come _OLD_.
Riesce a rilevare correttamente log4j all'interno di jar/war eseguibili spring-boot, dipendenze mescolate in uber jar, jar shadowati e persino file jar esplosi (cioè *.class) semplicemente seduti decompressi sul file-system.
Manteniamo una raccolta di log4j-samples che utilizziamo per i test.
java -jar log4j-detector-2021.12.29.jar ./samples
-- github.com/mergebase/log4j-detector v2021.12.29 (by mergebase.com) analyzing paths (could take a while).
-- Note: specify the '--verbose' flag to have every file examined printed to STDERR.
false-hits/log4j-core-2.12.2.jar contains Log4J-2.x == 2.12.2 _OKAY_
false-hits/log4j-core-2.12.3.jar contains Log4J-2.x == 2.12.3 _OKAY_
false-hits/log4j-core-2.12.4.jar contains Log4J-2.x == 2.12.4 _SAFE_
false-hits/log4j-core-2.15.0.jar contains Log4J-2.x == 2.15.0 _OKAY_
false-hits/log4j-core-2.16.0.jar contains Log4J-2.x == 2.16.0 _OKAY_
false-hits/log4j-core-2.17.0.jar contains Log4J-2.x == 2.17.0 _OKAY_
false-hits/log4j-core-2.17.1.jar contains Log4J-2.x >= 2.17.1 _SAFE_
false-hits/log4j-core-2.3.1.jar contains Log4J-2.x == 2.3.1 _OKAY_
false-hits/log4j-core-2.3.2.jar contains Log4J-2.x == 2.3.2 _SAFE_
true-hits/log4j-core-2.0-beta9.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.10.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.10.0.zip contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.2.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.2.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.3.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.1.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.9.1.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
old-hits/log4j-1.1.3.jar contains Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-1.2.17.jar contains Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-core-2.0-beta2.jar contains Log4J-2.x <= 2.0-beta8 _POTENTIALLY_SAFE_ (Did you remove JndiLookup.class?)
_VULNERABLE_ -> Devi aggiornare o rimuovere questo file.
_OKAY_ -> Segnaliamo questo per le versioni Log4J 2.3.1, 2.12.2, 2.12.3, 2.15.0, 2.16.0 e 2.17.0. Raccomandiamo di aggiornare alla 2.17.1.
_SAFE_ -> Attualmente segnaliamo questo solo per le versioni Log4J 2.3.2, 2.12.4 e 2.17.1 (e successive).
_OLD_ -> Sei al sicuro da CVE-2021-44228, ma dovresti pianificare un aggiornamento perché Log4J 1.2.x è in EOL da 7 anni e presenta diverse vulnerabilità note.
_POTENTIALLY_SAFE_ -> Il file "JndiLookup.class" non è presente, o perché la tua versione di Log4J è molto vecchia (precedente alla 2.0-beta9), o perché qualcuno ha già rimosso questo file. Assicurati che sia stato qualcuno del tuo team o della tua azienda a rimuovere "JndiLookup.class" se è questo il caso, perché gli aggressori sono noti per rimuovere questo file da soli per impedire ad altri aggressori concorrenti di ottenere l'accesso a sistemi compromessi.
java -jar log4j-detector-2021.12.29.jar
Usage: java -jar log4j-detector-2021.12.29.jar [--verbose] [--json] [--stdin] [--exclude=X] [paths to scan...]
--json - Output STDOUT results in JSON. (Errors/warning still emitted to STDERR)
--stdin - Read STDIN for paths to explore (one path per line)
--exclude=X - Where X is a JSON list containing full paths to exclude. Must be valid JSON.
Example: --exclude='["/dev", "/media", "Z:\TEMP"]'
Exit codes: 0 = No vulnerable Log4J versions found.
1 = At least one legacy Log4J 1.x version found.
2 = At least one vulnerable Log4J version found.
About - MergeBase log4j detector (version 2021.12.29)
Docs - https://github.com/mergebase/log4j-detector
(C) Copyright 2021 Mergebase Software Inc. Licensed to you via GPLv3.
git clone https://github.com/mergebase/log4j-detector.git
cd log4j-detector/
mvn install
java -jar target/log4j-detector-latest.jar
Manteniamo una raccolta di campioni log4j qui: https://github.com/mergebase/log4j-samples
GPL versione 3.0
Il compilatore Java memorizza le stringhe letterali direttamente nei file *.class compilati. Se log4j-detector rileva un file chiamato "JndiManager.class" sul tuo file-system, lo esamina per trovare questa stringa: "Invalid JNDI URI - {}". Risulta che quella specifica stringa letterale è presente solo nella versione patchata di Log4J (versione 2.15.0). Qualsiasi versione di Log4J senza quella stringa è vulnerabile.
Questa stessa tecnica di esaminare i file *.class per le stringhe letterali è ulteriormente estesa per rilevare con precisione le versioni sicure 2.3.2, 2.12.4 e 2.17.1.
log4j-core. E log4j-api? Molti scanner (incluso il Dependabot di GitHub) attualmente segnalano sia la libreria "log4j-core" che "log4j-api" come vulnerabili. Questi scanner sono errati. Attualmente non esiste alcuna versione della libreria "log4j-api" che possa essere sfruttata da nessuna di queste vulnerabilità.
In MergeBase siamo orgogliosi della precisione della nostra scansione. Sei già abbastanza impegnato a patchare e difendere i tuoi sistemi. Non vogliamo che perdi tempo con falsi positivi. Ecco perché non segnaliamo alcun risultato contro log4j-api.
La versione 2.10.0 è importante perché è la prima versione in cui la vulnerabile "funzione di ricerca dei messaggi" di Log4J può essere disabilitata tramite la configurazione di Log4J.
La versione 2.12.2 è importante perché è una versione compatibile con Java 7 di Log4J che non è vulnerabile a CVE-2021-44228.
Le versioni 2.15.0 e 2.16.0 sono importanti perché sono le prime versioni in cui la configurazione predefinita out-of-the-box di Log4J non è vulnerabile a CVE-2021-44228.
E le versioni 2.3.2, 2.12.4 e 2.17.1 sono importanti perché non sono vulnerabili a CVE più recenti come CVE-2021-45046 e CVE-2021-45105. Sebbene queste siano vulnerabilità molto meno gravi, prevediamo che tutti vorranno eseguire il patch a una delle versioni 2.3.2, 2.12.4 o 2.17.1.
Il "!" significa che log4j-detector è entrato in un archivio zip (ad es., *.zip, *.ear, *.war, *.aar, *.jar). Poiché i file zip possono contenere file zip, un singolo risultato può contenere più di un indicatore "!" nel suo risultato.
Nota: log4j-detector entra ricorsivamente solo negli archivi zip. Non entra in tar, gz o bz2, ecc. La ragione principale è che i sistemi Java sono spesso configurati per eseguire jar all'interno di jar, ma non sono mai configurati per eseguire altri formati di file (per quanto ne so!). E quindi una copia di log4j all'interno di un *.tar.gz probabilmente non è raggiungibile per un sistema Java in esecuzione, e quindi non è una vulnerabilità degna di essere segnalata.
2a nota: per zip all'interno di zip, il nostro scanner carica lo zip interno completamente in memoria (usando ByteArrayInputStream) prima di tentare di esaminarlo. Potresti aver bisogno di dare a Java un po' di memoria extra se hai zip interni estremamente grandi sul tuo sistema (ad es., 1 GB o più).
Solo le versioni di Log4J 2.x (dalla 2.0-beta9 alla 2.14.1) sono vulnerabili a CVE-2021-44228.
Ottima domanda! Poiché includiamo il codice sorgente completo qui su Github (tutte le 2500 righe di Java), così come i passaggi per compilarlo, e poiché questo strumento ha zero dipendenze, non dovrebbe volerci molto per studiare attentamente il codice a tua soddisfazione. Se non ti fidi di Maven, puoi andare direttamente nella directory "src/main/java/com/mergebase/log4j" e digitare "javac *.java". Funziona anche così!
Firmiamo anche il jar precompilato che teniamo nella radice del repository (./log4j-detector-2021.12.29.jar) con la chiave di firma del codice di MergeBase. Esegui "jarsigner -verbose -verify log4j-detector-2021.12.29.jar" per confermarlo.

MergeBase è un'azienda SCA (Software Composition Analysis) con sede a Vancouver, Canada. Siamo simili ad aziende come Snyk, Sonatype, Blackduck, ecc., in quanto aiutiamo le aziende a rilevare e gestire le librerie open-source vulnerabili nei loro software. Dai un'occhiata! Abbiamo grande precisione, grande supporto linguistico e non siamo neanche troppo costosi: mergebase.com/pricing.
Saremmo felici se qualcuno approfittasse di una prova gratuita di 2 settimane del nostro prodotto SCA! E se invii un'email al nostro CEO ([email protected]) con oggetto "log4j-detector", estenderemo la tua prova gratuita a 4 settimane.