
Scanner locale di bytecode per la vulnerabilità Log4JShell (CVE-2021-44228)
Log4jShell Bytecode Detector è uno strumento open source che aiuta a identificare se un file jar è affetto dalla vulnerabilità critica CVE-2021-44228. Lo strumento analizza il file jar e confronta le classi con un insieme di hash vulnerabili per le classi all'interno del file jar. Gli hash sono stati precalcolati per gli artefatti su Maven Central.
AGGIORNAMENTO IMPORTANTE: Abbiamo esteso l'elenco degli artefatti interessati su Maven Central. L'elenco contiene 18.816 artefatti. Gli artefatti o utilizzano log4j-core come dipendenza dichiarata, oppure abbiamo identificato file .class all'interno degli artefatti che corrispondono alle versioni interessate di log4j-core.
java -cp <PERCORSO_DEL_JAR_SCARICATO> de.codeshield.log4jshell.Log4JDetector <PERCORSO_ASSOLUTO_DEL_JAR_DA_CONTROLLARE>Se il jar è interessato, lo strumento stampa informazioni sulla riga di comando:
CVE-2021-44228 found declared as dependency in META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml
CVE-2021-44228 found in class file org/apache/logging/log4j/core/net/JndiManager$1.class
java -cp <PERCORSO_DEL_JAR_SCARICATO> de.codeshield.log4jshell.Log4JProcessDetectorÈ stata scoperta una grave vulnerabilità di Remote Code Execution all'interno di log4j e le versioni dalla 2.0-beta9 alla 2.14 sono interessate. La vulnerabilità è stata classificata come critica, poiché ha colpito log4j, una delle librerie di logging più utilizzate per Java. Esistono numerosi riferimenti e articoli.
Log4j è e rimane utilizzato nella maggior parte dei progetti Java per scopi di logging. Ora dobbiamo capire quali progetti e librerie sono effettivamente interessati. A causa del meccanismo di dipendenza di Java, un'applicazione può essere interessata anche se include transitivamente la versione vulnerabile della libreria. Un progetto A include una libreria lib transitivamente se una delle dipendenze dirette B di A ha una dipendenza da lib. Un semplice test per verificare se si è interessati può essere eseguito usando l'albero delle dipendenze di Maven:
Esempio: Esegui il comando mvn dependency:tree su un progetto Maven.
[INFO] exampleProject:mainProject:jar:0.0.1-SNAPSHOT
[INFO] +- exampleProject:lib-using-log4j:jar:0.0.1-SNAPSHOT:compile
[INFO] | \- org.apache.logging.log4j:log4j-core:jar:2.14.1:compile
Tuttavia, questo controllo è solo un primo indizio e non è sufficiente per i seguenti motivi:
I programmi Java sono spesso:
Di conseguenza, qualsiasi libreria utilizzata da un progetto Java può introdurre la vulnerabilità nel progetto. Un'analisi approfondita del bytecode è d'aiuto, ed è ciò che pubblichiamo come parte di questo repository.
Per compilare questo strumento esegui
mvn compile
Per assemblare un jar eseguibile usa
mvn clean compile assembly:single
L'insieme di hash vulnerabili per le classi è stato precalcolato sull'intero repository di Maven Central. Gli hash delle classi contengono tutti gli hash che abbiamo identificato come bytecode-simili utilizzando la tecnologia di fingerprinting.
Le informazioni precalcolate includono:
Come intervallo di versioni interessate abbiamo considerato [2.0-beta9, 2.15) Riferimento.
Questo strumento utilizza una nuova tecnologia di fingerprinting del bytecode per Java inventata da Andreas Dann. Il flusso di base è il seguente.
Nota: Per una distribuzione più semplice, questo repository fornisce gli hash SHA delle classi vulnerabili; le informazioni sono state calcolate utilizzando il fingerprinting
L'elenco di hash e artefatti Maven non è completo. Aggiorneremo regolarmente gli elenchi.
Questo strumento è stato co-creato dai co-fondatori di CodeShield
Il feedback è benvenuto!
Stiamo lavorando per estendere l'elenco degli artefatti interessati e cerchiamo sempre di migliorare la nostra offerta. contributi benvenuti
Inoltre, ⭐️ questo repository se il nostro scanner ti è stato utile!
Se hai bisogno di supporto o vuoi saperne di più sulla nostra tecnologia, contattaci a [email protected].
Il tuo Team CodeShield 💚