
Escáner de vulnerabilidades recursivo para CVEs de Log4j en archivos e imágenes Docker. Detecta JndiLookup.class y versiones vulnerables mediante hashes SHA256, con parcheo opcional para eliminar la clase de explotación.
Este escáner recorrerá recursivamente rutas, incluyendo archivos comprimidos, en busca de versiones vulnerables de log4j y archivos org/apache/logging/log4j/core/lookup/JndiLookup.class.
Actualmente la lista de permitidos define versiones no explotables, en este caso log4j-core 2.17.0 y 2.12.3.

| CVE | Referencias |
|---|
| 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 {ruta-de-destino}
$ divd-2021-00038--log4j-scanner {ruta-de-destino}
Usando la herramienta ahora también puedes escanear contenedores:
$ ./divd-2021-00038--log4j-scanner scan-image logstash:7.16.1
o imágenes locales:
$ ./divd-2021-00038--log4j-scanner scan-image --local {sha256|patrón}
$ ./divd-2021-00038--log4j-scanner scan-image --local log4shell:latest
$ ./divd-2021-00038--log4j-scanner scan-image --local 4949add9e671
# escanear todas las imágenes locales
$ ./divd-2021-00038--log4j-scanner scan-image --local
También puedes parchear la imagen:
$ 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
Comparando ambos tars se obtendrán las siguientes diferencias:
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
Hemos añadido soporte preliminar para parchear archivos de forma recursiva. Esto es muy experimental, ten cuidado con esta funcionalidad. Actualmente el parcheo solo funciona con archivos de archivo (jar/tar). El parche creará un nuevo archivo .patch que debe reemplazar al archivo original. Esto es a propósito un proceso manual, ya que debe sincronizarse con el reinicio de servicios. Asegúrate de crear una copia de seguridad del archivo original antes de reemplazarlo. Después de parchear, puedes volver a escanear para asegurarte de que no te faltó ningún archivo. Actualmente, los archivos .class simples en carpetas no se parchearán, ya que se pueden eliminar manualmente de forma segura.
El archivo .patch será exactamente igual al archivo original, pero sin JndiLookup.class. Esto debería ser suficiente para mitigar este problema, mientras se espera por actualizaciones. Asegúrate de hacer copias de seguridad y probar a fondo.
Patch se negará a ejecutarse en carpetas, como precaución. Simplemente apunta patch al archivo vulnerable.
$ divd-2021-00038--log4j-scanner.exe patch {ruta-de-destino}
divd-2021-00038--log4j-scanner patch {ruta-de-destino}
Requisitos:
$ git clone "https://github.com/dtact/divd-2021-00038--log4j-scanner.git"
$ go build -o ./.builds/divd-2021-00038--log4j-scanner ./main.go
Código y documentación con derechos de autor 2021 Remco Verhoef (DTACT).
Código liberado bajo la licencia MIT.