
Scanner di vulnerabilità ricorsivo per le CVE di Log4j in archivi e immagini Docker. Rileva JndiLookup.class e le versioni vulnerabili tramite hash SHA256, con applicazione di patch opzionale per rimuovere la classe exploit.
Questo scanner scansiona ricorsivamente i percorsi, inclusi gli archivi, alla ricerca di versioni vulnerabili di log4j e file org/apache/logging/log4j/core/lookup/JndiLookup.class.
Attualmente la lista consentita definisce versioni non sfruttabili, in questo caso log4j-core 2.17.0 e 2.12.3.

| CVE | Riferimenti |
|---|
| CVE-2021-44228 | https://www.cve.org/CVERecord?id=CVE-2021-44228 |
| CVE-2021-45046 | https://www.cve.org/CVERecord?id=CVE-2021-45046 |
| CVE-2021-45105 | https://www.cve.org/CVERecord?id=CVE-2021-45105 |
| CVE-2021-44832 | https://www.cve.org/CVERecord?id=CVE-2021-44832 |
$ divd-2021-00038--log4j-scanner.exe {target-path}
$ divd-2021-00038--log4j-scanner {target-path}
Usando lo strumento puoi ora scansionare anche i contenitori:
$ ./divd-2021-00038--log4j-scanner scan-image logstash:7.16.1
o immagini locali:
$ ./divd-2021-00038--log4j-scanner scan-image --local {sha256|pattern}
$ ./divd-2021-00038--log4j-scanner scan-image --local log4shell:latest
$ ./divd-2021-00038--log4j-scanner scan-image --local 4949add9e671
# scansiona tutte le immagini locali
$ ./divd-2021-00038--log4j-scanner scan-image --local
Puoi anche applicare la patch all'immagine:
$ docker save log4shell > ./log4shell-image.tar
$ ./divd-2021-00038--log4j-scanner ./log4shell-image.tar
$ ./divd-2021-00038--log4j-scanner patch ./log4shell-image.tar
$ cat ./log4shell-image.tar.patch | docker load
Confrontando i due tar si ottengono le seguenti differenze:
Binary files ../2/BOOT-INF/lib/log4j-core-2.14.1.jar and ./BOOT-INF/lib/log4j-core-2.14.1.jar differ
Binary files ../2/app/spring-boot-application.jar and ./app/spring-boot-application.jar differ
Binary files ../2/b0d66ac73d47865118cfb9a1244f1508d94ea938da1eb78c2db20bd2e1a6629a/layer.tar and ./b0d66ac73d47865118cfb9a1244f1508d94ea938da1eb78c2db20bd2e1a6629a/layer.tar differ
Only in ./org/apache/logging/log4j/core/lookup: JndiLookup.class
Abbiamo aggiunto il supporto preliminare per l'applicazione ricorsiva di patch ai file. Questa è una funzionalità molto sperimentale, fai attenzione. Attualmente la patch funziona solo con file di archivio (jar/tar). La patch creerà un nuovo file .patch che deve sostituire il file originale. Questo è volutamente un processo manuale, poiché deve essere sincronizzato con il riavvio dei servizi. Assicurati di creare un backup del file originale prima di sostituirlo. Dopo aver applicato la patch, puoi eseguire di nuovo la scansione per assicurarti di non aver dimenticato file. Attualmente i file .class semplici nelle cartelle non verranno patchati, poiché possono essere rimossi manualmente in sicurezza.
Il file .patch sarà esattamente uguale al file originale, senza JndiLookup.class. Questo dovrebbe essere sufficiente per mitigare il problema, in attesa degli aggiornamenti. Assicurati di fare backup e testare accuratamente.
La patch si rifiuterà di essere eseguita sulle cartelle, come precauzione. Basta puntare la patch all'archivio vulnerabile.
$ divd-2021-00038--log4j-scanner.exe patch {target-path}
divd-2021-00038--log4j-scanner patch {target-path}
Requisiti:
$ git clone "https://github.com/dtact/divd-2021-00038--log4j-scanner.git"
$ go build -o ./.builds/divd-2021-00038--log4j-scanner ./main.go
Codice e documentazione copyright 2021 Remco Verhoef (DTACT).
Codice rilasciato sotto licenza MIT.