
El escáner de sistema de archivos más rápido para log4shell (CVE-2021-44228, CVE-2021-45046) y otras instancias vulnerables (CVE-2017-5645, CVE-2019-17571, CVE-2022-23305, CVE-2022-23307 ... ) de la biblioteca log4j. Excelente rendimiento y bajo consumo de memoria.

Puerto Python de https://github.com/mergebase/log4j-detector log4j-detector es copyright (C) Copyright 2021 Mergebase Software Inc. https://mergebase.com/ Licenciado bajo GPLv3.
La motivación para portarlo a Python fue mejorar el rendimiento, reducir el consumo de memoria y aumentar la legibilidad del código. Véase la sección sobre rendimiento más abajo para la comparativa.
Y parece que esta es la herramienta de escaneo más rápida con el menor requisito de memoria
Identifica versiones de log4j (1.x), reload4j (1.2.18+) y log4j-core (2.x) en su sistema de archivos vulnerables a CVE-2021-44228, CVE-2021-45046 y muchas otras - véase la tabla siguiente. Es capaz de encontrar instancias incrustadas en aplicaciones más grandes varios niveles de profundidad. Funciona en Linux, Windows, Mac o en cualquier otro lugar donde se ejecute Python 3.8+.
Puede detectar correctamente log4j dentro de jars/wars ejecutables de Spring Boot, dependencias mezcladas
en uber jars, jars sombreados (shaded), e incluso
archivos jar descomprimidos simplemente sentados en el sistema de archivos (aka *.class).
También puede manejar archivos de clase sombreados - extensiones .esclazz (elastic) y .classdata (Azure).
Extensiones de archivos Java buscadas: .zip, .jar, .war, .ear, .aar, .jpi,
.hpi, .rar, .nar, .wab, .eba, .ejb, .sar, .apk, .par, .kar
| Detecta | CVE | CVSSv3 | Gravedad | Java | Desde | Hasta | Corregido en | Librería |
|---|---|---|---|---|---|---|---|---|
| SÍ | CVE-2021-44228 | 10.0 | Crítica | 8 | 2.0-beta9 | 2.14.1 | 2.15.0 | log4jv2 |
| SÍ | CVE-2017-5645 | 9.8 | Crítica | 7 | 2.0-alpha1 | 2.8.1 | 2.8.2 | log4jv2 |
| SÍ | CVE-2019-17571 | 9.8 | Crítica | 1.2.0 | 1.2.17 | nofix | log4jv1 | |
| SÍ | CVE-2021-45046 | 9.0 | Crítica | 7/8 | 2.0-beta9 | 2.15.0 excluyendo 2.12.2 | 2.12.2/2.16.0 | log4jv2 |
| SÍ | CVE-2022-23305 | 9.8 | Crítica | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| SÍ | CVE-2022-23307 | 9.8 | Crítica | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| SÍ | CVE-2022-23302 | 8.8 | Alta | 1.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| SÍ | CVE-2021-4104 | 7.5 | Alta | - | 1.0 | 1.2.17 | nofix | log4jv1 |
| SÍ | CVE-2021-44832 | 6.6 | Media | 6/7/8 | 2.0-alpha7 | 2.17.0, excluyendo 2.3.2/2.12.4 | 2.3.2/2.12.4/2.17.1 | log4jv2 |
| - | CVE-2021-42550 | 6.6 | Media | - | 1.0 | 1.2.7 | 1.2.8 | logback |
| SÍ | CVE-2021-45105 | 5.9 | Media | 6/7/8 | 2.0-beta9 | 2.16.0, excluyendo 2.12.3 | 2.3.1/2.12.3/2.17.0 | log4jv2 |
| - | CVE-2020-9488 | 3.7 | Baja | 7/8 | 2.0-alpha1 | 2.13.1 | 2.12.3/2.13.2 | log4jv2 |
Cada instancia se reporta con la lista apropiada de CVEs. Para cada CVE, el archivo de librería log4j se analiza para determinar si se han aplicado las soluciones recomendadas (p. ej., JndiLookup.class o JMSAppender.class eliminados) y en ese caso se considera no vulnerable. El estado STRANGE se reporta para archivos con archivo pom.properties de log4j-core, pero sin clases de bytecode reales, generalmente son paquetes fuente y pueden ignorarse.
Advertencia La función
--fixes experimental, úsela bajo su propio riesgo, asegúrese de hacer una copia de seguridad de sus archivos jar antes de usarla.
El argumento --fix intenta renombrar las instancias de JndiLookup.class a JndiLookup.vulne, evitando así que la clase
se cargue. Dentro de archivos Java se realiza mediante un renombrado in situ, no requiere volver a comprimir el archivo y es
instantáneamente rápido.
Los binarios están disponibles para Linux 64bit, MS Windows 64bit y 32bit - consulte las versiones (Releases)
La versión mínima de Python soportada es 3.8. Según mis pruebas, la implementación de zip de Python 3.6 no puede abrir muchos archivos
.jarde mis datos de prueba.
log4shell finder está optimizado para rendimiento y bajo consumo de memoria.
Actualizado el 23.1.2022, rendimiento medido en un directorio con 26237 archivos en 2005 carpetas.
Tiempo de ejecución reducido a la mitad, consumo de memoria en 2/3, lecturas del sistema de archivos al menos en un 90%
Command being timed: "./test_log4shell.py /home/hynek/war/ --exclude-dirs /mnt --same-fs"
User time (seconds): 17.68
System time (seconds): 1.20
Percent of CPU this job got: 127%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:14.47
Maximum resident set size (kbytes): 64144
File system inputs: 114424
Command being timed: "./log4j-finder.py /home/hynek/war/"
User time (seconds): 23.59
System time (seconds): 1.09
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:26.18
Maximum resident set size (kbytes): 38604
File system inputs: 142824
Command being timed: "java -jar log4j-detector-latest.jar /home/hynek/war"
User time (seconds): 30.56
System time (seconds): 1.39
Percent of CPU this job got: 113%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:28.26
Maximum resident set size (kbytes): 214116
File system inputs: 14416
Command being timed: "./log4j2-scan /home/hynek/war --scan-log4j1 --scan-zip"
User time (seconds): 52.05
System time (seconds): 25.32
Percent of CPU this job got: 88%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:27.86
Maximum resident set size (kbytes): 593080
File system inputs: 215416
all--no-csv-header para omitir la cabecera del CSV y permitir una fusión más sencilla de resultados de múltiples hosts--threads para ajustar manualmente el número de hilos de escaneo--cvs-clean para escribir la línea "CLEAN" en la salida CSV en caso de no detectar librería log4j--cvs-stats para escribir la línea "STATS" en la salida CSV con el tiempo de ejecución en segundos y el número de archivos y carpetas escaneados--fix en las versiones 1.19 y 1.20 podía dañar los archivos .jar.