Qué es Log4j, la peligrosa vulnerabilidad que afecta a millones de dispositivos
Si trabajas como desarrollador o en informática, es posible que hayas notado que muchas personas están hablando sobre una vulnerabilidad de día cero en una gran cantidad de softwares debido a una dependencia de la biblioteca de registro Log4j.
Esta peligrosa vulnerabilidad fue revelada el fin de semana pasado. A continuación te explico en términos prácticos todo lo relacionado a Log4j.
¿Qué es Log4j?
Log4j es una biblioteca de registro de código abierto escrita en Java que fue desarrollada por Apache Software Foundation. Millones de aplicaciones la usan, y algunas de ellas son enormemente populares, como iCloud, Steam y Minecraft, por lo que el alcance potencial de esta vulnerabilidad es enorme.
¿Qué es una vulnerabilidad de día cero?
Un día cero (también conocido como 0-day ) es una vulnerabilidad desconocida para aquellos que deberían estar interesados en su mitigación (incluido el proveedor del software de destino) o conocida y no se ha liberado un parche.
¿Cuál es la vulnerabilidad descubierta en Log4j?
Un atacante que puede controlar mensajes de registro o parámetros de mensajes de registro puede ejecutar código arbitrario cargado desde servidores LDAP. Esto puede realizarse cuando la sustitución de lookup de mensajes está habilitada.
El exploit permite el uso o ejecución remota de código (RCE) en un sistema vulnerable. Es decir, un atacante puede obtener el control total de ellos. Esto se hace enviando una cadena específica al registrador que luego activa una búsqueda (lookup) en el servidor remoto propiedad del atacante, cuya respuesta contiene un script Java que se inyecta en el proceso del servidor vulnerable. El atacante puede ejecutar comandos con el mismo nivel de privilegio que la aplicación que usa la biblioteca de registro.
El investigador Marcus Hutchins señaló en Twitter que el exploit también podría usarse para leer variables de entorno del servidor. Por lo tanto, cualquier credencial puede ser robada sin necesidad de ejecución remota de código (RCE).
Mitigación (qué hacer si tu software se ha visto afectado)
En este punto, muchos desarrolladores ya saben si deben tomar medidas o no. Sin embargo, en caso de que no estés seguro, hay formas de verificar tu software utilizando software de terceros como Sysdig Secure . Si sabes que tu código se basa en código Java, entonces vale la pena comprobar si estás utilizando esta biblioteca.
Para todas las organizaciones que usan Log4j, deben actualizar a la versión 2.15.0 lo antes posible. La última versión la puedes encontrar en la página de descarga de Log4j. Hay razones por las que esto puede no ser posible de inmediato y hay algunos otros pasos que se pueden tomar para mitigar la vulnerabilidad.
La principal medida es establecer la variable de entorno OG4J_FORMAT_MSG_NO_LOOKUPS
en verdadero.
Otro paso más general es almacenar las credenciales en una tienda secreta y no como variables de entorno.
Algunos proveedores de soluciones también han brindado soporte y formas de garantizar que no se explote, como Cloudflare y Microsoft.
¿Cómo puede pasar esto?
Probablemente mi mayor pregunta es ¿cómo ocurrió esto sin que lo descubrieran? ¿Por qué se permitieron las búsquedas de forma predeterminada?
Me imagino que hay razones muy humanas por las que esto sucedió. Supongo aquí, que el software se actualiza constantemente y, al mismo tiempo, a menudo depende de piezas de código/software más antiguo que pueden no haber sido conscientes de las consecuencias en el momento de su escritura.
He visto la siguiente imagen publicada varias veces en Twitter y definitivamente parece resumir el estado de alguna infraestructura digital moderna. ¿En cuántas bibliotecas se basa su código? ¿Cuándo se actualizaron por última vez?
Conclusión
¿Comodidad por parte de las empresas? Si puedes mejorar el código abierto, ¡házlo! Si puedes apoyar económicamente, házlo, si puedes apoyar el tiempo de trabajo de tu equipo, házlo. Este soporte por sí solo probablemente no resultará en no tener vulnerabilidades futuras, pero mi perspectiva es que es una responsabilidad compartida cuidar el código que usamos.