Dada la vulnerabilidad reciente de Log4J, ¿cuál es la forma más segura de actualizar las dependencias transitivas en un proyecto gradle? Mi proyecto no usa explícitamente log4j (usa logback) pero tiene una serie de dependencias que trae las versiones vulnerables (< 2.15.0). Primero, ¿es necesario actualizar algo si mi SLF4J usa el inicio de sesión? Y si tuviera que actualizar, ¿cómo obligo a que 2.15 esté presente en classpath en lugar de la versión anterior?
Agregue lo siguiente a su archivo gradle.build
:
configurations.all { resolutionStrategy.eachDependency { details -> if (details.requested.group == 'org.apache.logging.log4j') { details.useVersion '2.17.1' details.because 'zero-day exploits suck' } } } dependencies { … }
Tenga en cuenta que, como señala la documentación :
los siguientes mecanismos le permiten escribir reglas que se inyectan directamente en el motor de resolución. Debido a esto, pueden verse como soluciones de fuerza bruta , que pueden ocultar problemas futuros (por ejemplo, si se agregan nuevas dependencias). Por lo tanto, el consejo general es usar los siguientes mecanismos solo si otros medios no son suficientes.
Me doy cuenta de que el OP solicita la forma "más segura" de actualizar las dependencias; elijo interpretar eso como lo más probable para eliminar las vulnerabilidades de día cero. Sin embargo, reconozco que este enfoque de fuerza bruta no garantiza la compatibilidad entre las bibliotecas, pero esto debería garantizar que ninguna versión vulnerable de log4j termine en su árbol de dependencia/compilaciones.
Por supuesto, debe ejecutar gradle dependencies
después de realizar el cambio para asegurarse de que los cambios se realizaron y no tiene versiones persistentes con problemas.
Actualización: eliminó la comparación de versiones, como se recomienda aquí .
Actualización: versión aumentada a 2.17.1
Puede agregar el complemento de gestión de dependencias a su gradle.build:
plugins { id 'io.spring.dependency-management' version '1.0.11.RELEASE' } dependencyManagement { imports { mavenBom 'org.apache.logging.log4j:log4j-bom:2.17.0' } }
Para confirmar el cambio, ejecute ./gradlew dependencies
debería ver algo como
+--- org.apache.logging.log4j:log4j-to-slf4j:2.14.1 -> 2.17.0 | | | | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.32 | | | | \--- org.apache.logging.log4j:log4j-api:2.17.0