
Escáner del sistema de archivos que detecta versiones vulnerables de Log4J (CVE-2021-44228, CVE-2021-45046) mediante el análisis de clases Java compiladas, incluyendo archivos anidados. Funciona en Linux, Windows y Mac.

Escáner que detecta versiones vulnerables de Log4J para ayudar a los equipos a evaluar su exposición a CVE-2021-44228 (CRÍTICA), CVE-2021-45046, CVE-2021-45105 y CVE-2021-44832. Puede buscar instancias de Log4J examinando cuidadosamente el sistema de archivos completo, incluyendo todas las aplicaciones instaladas. Es capaz de encontrar instancias de Log4J ocultas varias capas de profundidad. Funciona en Linux, Windows y Mac, ¡y en cualquier otro lugar donde se ejecute Java!
log4j-core. ¿Qué Pasa Con log4j-api?Actualmente reporta las versiones log4j-core 2.3.2, 2.12.4 y 2.17.1 como _SAFE_, 2.3.1, 2.12.2, 2.12.3, 2.15.0, 2.16.0 y 2.17.0 como _OKAY_ y todas las demás versiones como _VULNERABLE_ (aunque reporta las versiones anteriores a 2.0-beta9 como _POTENTIALLY_SAFE_). Reporta versiones antiguas de log4j-1.x como _OLD_.
Puede detectar correctamente log4j dentro de jars/wars ejecutables de Spring Boot, dependencias mezcladas en uber jars, jars sombreados (shaded), e incluso archivos jar expandidos simplemente sentados sin comprimir en el sistema de archivos (también conocido como *.class).
Actualmente mantenemos una colección de muestras de log4j que usamos para pruebas.
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_ -> Necesitas actualizar o eliminar este archivo.
_OKAY_ -> Reportamos esto para las versiones de Log4J 2.3.1, 2.12.2, 2.12.3, 2.15.0, 2.16.0 y 2.17.0. Recomendamos actualizar a 2.17.1.
_SAFE_ -> Actualmente solo reportamos esto para las versiones de Log4J 2.3.2, 2.12.4 y 2.17.1 (y superiores).
_OLD_ -> Estás a salvo de CVE-2021-44228, pero deberías planificar una actualización porque Log4J 1.2.x ha llegado al final de su vida útil (EOL) desde hace 7 años y tiene varias vulnerabilidades conocidas.
_POTENTIALLY_SAFE_ -> El archivo "JndiLookup.class" no está presente, ya sea porque tu versión de Log4J es muy antigua (anterior a 2.0-beta9), o porque alguien ya eliminó este archivo. Asegúrate de que fue alguien de tu equipo o empresa quien eliminó "JndiLookup.class" si ese es el caso, porque se sabe que los atacantes eliminan este archivo ellos mismos para evitar que otros atacantes competidores obtengan acceso a sistemas comprometidos.
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
Mantenemos una colección de muestras de log4j aquí: https://github.com/mergebase/log4j-samples
GPL version 3.0
El compilador de Java almacena literales de cadena directamente en los archivos *.class compilados. Si log4j-detector detecta un archivo llamado "JndiManager.class" en tu sistema de archivos, examina ese archivo en busca de esta cadena: "Invalid JNDI URI - {}". Resulta que ese literal de cadena específico solo está presente en la versión parcheada de Log4J (versión 2.15.0). Cualquier versión de Log4J que no tenga esa cadena es vulnerable.
Esta misma técnica de examinar archivos *.class en busca de literales de cadena se extiende aún más para detectar con precisión las versiones seguras 2.3.2, 2.12.4 y 2.17.1.
log4j-core. ¿Qué Pasa Con log4j-api? Muchos escáneres (incluyendo el propio Dependabot de GitHub) actualmente reportan tanto las librerías "log4j-core" como "log4j-api" como vulnerables. Estos escáneres son incorrectos. Actualmente no existe ninguna versión de la librería "log4j-api" que pueda ser explotada por ninguna de estas vulnerabilidades.
En MergeBase nos enorgullecemos de la precisión de nuestro escaneo. Ya estás lo suficientemente ocupado parcheando y defendiendo tus sistemas. No queremos que pierdas tiempo con falsos positivos. Por eso no reportamos ningún acierto contra log4j-api.
La versión 2.10.0 es importante porque es la primera versión donde la vulnerable "característica de búsqueda de mensajes" de Log4J se puede deshabilitar mediante la configuración de Log4J.
La versión 2.12.2 es importante porque es una versión de Log4J compatible con Java 7 que no es vulnerable a CVE-2021-44228.
Las versiones 2.15.0 y 2.16.0 son importantes porque son las primeras versiones donde la configuración predeterminada de Log4J lista para usar no es vulnerable a CVE-2021-44228.
Y las versiones 2.3.2, 2.12.4 y 2.17.1 son importantes porque no son vulnerables a CVEs descubiertos más recientemente, como CVE-2021-45046 y CVE-2021-45105. A pesar de que estas son vulnerabilidades mucho menos graves, anticipamos que todos querrán parchear a una de las versiones 2.3.2, 2.12.4 o 2.17.1.
El "!" significa que log4j-detector ingresó a un archivo zip (por ejemplo, *.zip, *.ear, *.war, *.aar, *.jar). Dado que los archivos zip pueden contener archivos zip, un solo resultado puede contener más de un indicador "!" en su resultado.
Nota: log4j-detector solo ingresa recursivamente a archivos zip. No ingresa a tar, gz, bz2, etc. La razón principal es que los sistemas Java a menudo están configurados para ejecutar jars dentro de jars, pero nunca están configurados para ejecutar otros formatos de archivo (¡que yo sepa!). Por lo tanto, una copia de log4j dentro de un *.tar.gz probablemente no sea accesible para un sistema Java en ejecución y, por lo tanto, no es una vulnerabilidad que valga la pena reportar.
2da nota: para zips dentro de zips, nuestro escáner carga completamente el zip interno en la memoria (usando ByteArrayInputStream) antes de intentar escanearlo. Es posible que necesites darle a Java algo de memoria extra si tienes zips internos extremadamente grandes en tu sistema (por ejemplo, 1 GB o más).
Solo las versiones de Log4J 2.x (desde 2.0-beta9 hasta 2.14.1) son vulnerables a CVE-2021-44228.
¡Buena pregunta! Dado que incluimos el código fuente completo aquí en Github (las 2500 líneas de Java), así como los pasos para compilarlo, y dado que esta herramienta tiene cero dependencias, no debería llevar demasiado tiempo estudiar cuidadosamente el código para tu satisfacción. Si no confías en Maven, puedes ir directamente al directorio "src/main/java/com/mergebase/log4j" y escribir "javac *.java". ¡Eso también funciona!
También firmamos el jar precompilado que mantenemos en la raíz del repositorio (./log4j-detector-2021.12.29.jar) con la clave de firma de código de MergeBase. Ejecuta "jarsigner -verbose -verify log4j-detector-2021.12.29.jar" para confirmar esto.

MergeBase es una empresa de SCA (Software Composition Analysis) con sede en Vancouver, Canadá. Somos similares a empresas como Snyk, Sonatype, Blackduck, etc., en el sentido de que ayudamos a las empresas a detectar y gestionar librerías de código abierto vulnerables en su software. ¡Échale un vistazo! Tenemos gran precisión, un gran soporte de lenguajes y tampoco somos demasiado caros: mergebase.com/pricing.
¡Estaríamos encantados si alguien toma una prueba gratuita de 2 semanas de nuestro producto SCA! Y si envías un correo electrónico a nuestro CEO ([email protected]) con el asunto "log4j-detector", extenderemos tu prueba gratuita a 4 semanas.