Estamos creando una aplicación basada en Red Hat JBoss AMQ 6. Envolvemos un código Java alrededor de la imagen base para proporcionar funcionalidades adicionales que faltan en AMQ 6.
Ahora, cuando el CVE de Log4j golpeó, encontramos que este componente es vulnerable porque usa log4j 1.x. Ahora no solo me refiero a que nuestro código Java lo usa, sino que también lo usa la imagen base de Red Hat AMQ 6. Como AMQ 6 es EOL ahora, Red Hat ya no brinda soporte, por lo que no habrá lanzamientos oficiales con corrección.
Entonces, ¿cómo elimino las clases vulnerables log4j 1.x de:
?
Estoy construyendo con el complemento jib maven.
Parece mvn dependency:tree solo brinda información sobre nuestro código contenedor de Java, no sobre la imagen base. Y no entiendo qué significan "+" y "-" mientras da un resultado como este:
[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:3.7.0.Final:compile [INFO] | +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:jar:1.0.2.Final:compile [INFO] | +- org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec:jar:1.0.1.Final:compile [INFO] | +- org.reactivestreams:reactive-streams:jar:1.0.2:compile [INFO] | +- javax.validation:validation-api:jar:2.0.1.Final:compile [INFO] | +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec:jar:1.0.1.Final:compile [INFO] | +- javax.activation:activation:jar:1.1.1:compile [INFO] | +- org.apache.httpcomponents:httpclient:jar:4.5.4:compile [INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.4.7:compile [INFO] | | +- commons-logging:commons-logging:jar:1.2:compile [INFO] | | \- commons-codec:commons-codec:jar:1.10:compile [INFO] | +- commons-io:commons-io:jar:2.5:compile [INFO] | +- net.jcip:jcip-annotations:jar:1.0:compile [INFO] | \- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile ¿Significa + que se puede expandir aún más pero no se muestra aquí?
Algunos antecedentes aquí: https://nvd.nist.gov/vuln/detail/CVE-2021-44228
Puedes usar:
mvn dependency:tree -Dincludes=*log4j*
Encontrará todas las dependencias y dependencias transitivas que tengan "log4j" en cualquier lugar de su ID de grupo.
Ejemplo de salida:
\- org.springframework.boot:spring-boot-starter-web:jar:2.6.0:compile [INFO] \- org.springframework.boot:spring-boot-starter:jar:2.6.0:compile [INFO] \- org.springframework.boot:spring-boot-starter-logging:jar:2.6.0:compile [INFO] \- org.apache.logging.log4j:log4j-to-slf4j:jar:2.14.1:compile [INFO] \- org.apache.logging.log4j:log4j-api:jar:2.14.1:compileCada segmento de patrón es opcional y admite comodines * completos y parciales. Un segmento de patrón vacío se trata como un comodín implícito.
Por ejemplo, org.apache.* coincidiría con todos los artefactos cuyo ID de grupo comenzara con org.apache., y :::*-SNAPSHOT coincidiría con todos los artefactos de instantáneas.
Véase también el documento de maven
EDITAR
Entonces lo más probable es que quieras excluir estas dependencias con:
<dependency> <groupId>your dep groupId</groupId> <artifactId>your dep artifactId</artifactId> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> </exclusion> </exclusions> </dependencies>notas
Al momento de escribir, es cualquier versión < 2.17.1
Las versiones de Log4j con vulnerabilidades están disponibles en el repositorio de Maven