
Escáner local de bytecode para la vulnerabilidad Log4JShell (CVE-2021-44228)
Log4jShell Bytecode Detector es una herramienta de código abierto que ayuda a identificar si un archivo jar está afectado por la vulnerabilidad crítica CVE-2021-44228. La herramienta escanea el archivo jar y compara las clases con un conjunto de hashes vulnerables de clases dentro del archivo jar. Los hashes se han precalculado para artefactos en Maven Central.
ACTUALIZACIÓN IMPORTANTE: Ampliamos la lista de artefactos afectados en Maven Central. La lista contiene 18.816 artefactos. Los artefactos usan log4j-core como dependencia declarada, o identificamos archivos .class dentro de los artefactos que coinciden con las versiones afectadas de log4j-core.
java -cp <RUTA_AL_JAR_DESCARGADO> de.codeshield.log4jshell.Log4JDetector <RUTA_ABSOLUTA_AL_JAR_A_VERIFICAR>Si el archivo jar está afectado, la herramienta muestra información en la línea de comandos:
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 <RUTA_AL_JAR_DESCARGADO> de.codeshield.log4jshell.Log4JProcessDetectorSe ha descubierto una grave vulnerabilidad de ejecución remota de código en log4j, y las versiones 2.0-beta9 a 2.14 están afectadas. La vulnerabilidad ha sido clasificada como crítica, ya que afecta a log4j, una de las bibliotecas de registro más utilizadas para Java. Hay muchas referencias y artículos disponibles.
Log4j se usa y se ha usado en prácticamente cualquier proyecto Java con fines de registro. Ahora necesitamos entender qué proyectos y bibliotecas están realmente afectados. Debido al mecanismo de dependencias de Java, una aplicación también puede verse afectada si incluye la versión vulnerable de la biblioteca de forma transitiva. Un proyecto A incluye una biblioteca lib de forma transitiva si una de las dependencias directas B de A tiene una dependencia de lib. Una prueba sencilla para ver si uno está afectado se puede hacer usando el árbol de dependencias de Maven:
Ejemplo: Ejecute el comando mvn dependency:tree en un proyecto 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
Sin embargo, esta comprobación es solo una primera indicación y no es suficiente por las siguientes razones:
Los programas Java frecuentemente:
En consecuencia, cualquier biblioteca que use un proyecto Java puede incluir la vulnerabilidad en su proyecto. Un análisis profundo de bytecode ayuda, que es lo que publicamos como parte de este repositorio.
Para compilar esta herramienta ejecute
mvn compile
Para ensamblar un jar ejecutable use
mvn clean compile assembly:single
El conjunto de hashes vulnerables de clases se ha precalculado en todo el repositorio Maven Central. Los hashes de las clases contienen todos los hashes que identificamos como similares en bytecode utilizando la tecnología de Fingerprinting.
La información precalculada contiene:
Como rango de versiones afectadas consideramos [2.0-beta9, 2.15) Referencia.
Esta herramienta utiliza una nueva tecnología de fingerprinting de bytecode para Java inventada por Andreas Dann. El flujo básico es el siguiente.
Nota: Para una implementación más sencilla, este repositorio incluye hashes SHA de las clases vulnerables; la información se ha calculado usando Fingerprinting
La lista de hashes y artefactos Maven no está completa. Actualizaremos las listas regularmente.
Esta herramienta fue co-creada por los cofundadores de CodeShield
¡Los comentarios son bienvenidos!
Estamos trabajando en ampliar la lista de artefactos afectados y siempre buscamos mejorar nuestra oferta. contribution welcome
Además, ⭐️ este repositorio si nuestro escáner le ayudó.
Si necesita soporte o quiere conocer nuestra tecnología, contáctenos en [email protected].
Su equipo de CodeShield 💚