Log4shell
¿Qué es Log4Shell?
Log4Shell es una vulnerabilidad crítica de día cero que permite ejecutar cualquier tipo de código a aquellos sistemas que utilicen Log4j. Este código puede ser malicioso, como descargar algún malware, ejecutar un ransomware, realizar un ataque de denegación de servicio (DoS) etc.
Log4j es una biblioteca de código abierto en Java que permite llevar un registro de la información dentro de una aplicación. Esta biblioteca es utilizada en una amplia gama de aplicaciones y servicios, incluidos servidores web, sistemas de administración de bases de datos, juegos en línea, sistemas de correo electrónico, software empresarial, etc.
La vulnerabilidad Log4Shell fue descubierta por Chen Zhaojun, del equipo de seguridad de la nube de la empresa Alibaba el 24 de noviembre de 2021. Ha sido considerada una de las vulnerabilidades más críticas en la historia de la ciberseguridad, por la cantidad de sistemas comprometidos y por el potencial daño que puede generar esta vulnerabilidad.
Algunas de las empresas afectadas fueron:
- Apple
- Amazon
- IBM
- Tesla
- Cloudfare
- Steam
Sin embargo, esta vulnerabilidad fue atendida rápidamente y ya para diciembre del 2021 había salido un parche de seguridad que resolvía esta vulnerabilidad.
Al menos 1 millón de ataques a distintas empresas, servicios y aplicaciones fueron registrados en las primeras 72 horas luego de haber sido revelada la vulnerabilidad. Cerca de 2800 aplicaciones web tenían esta vulnerabilidad y la mayoría de los sistemas afectados fue en el sistema operativo Linux.
¿Cómo funciona el Log4shell?
El Log4shell se basa en la forma en que las versiones vulnerables de Log4j manejan dos características relacionadas: las consultas de la Interfaz de Nombres y Directorios de Java (en inglés Java Naming and Directory Interface o JNDI) y las sustituciones de búsqueda de mensajes a través de la función «lookup».
JNDI es una interfaz de programación de aplicaciones (en inglés, application programming interface o API) que permite a las aplicaciones Java conectarse con servidores remotos y obtener recursos de ellos. Un recurso puede ser un dato o un código que se ejecuta en la aplicación.
Una consulta JNDI es una instrucción que le ordena a la aplicación que se comunique con un servidor y descargue un recurso específico. Log4j no verifica la fuente ni el contenido de los recursos que descarga, y los ejecuta sin más.
Por otro lado, la sustitución de búsqueda de mensajes permite a los usuarios y a las aplicaciones enviar texto a Log4j dentro de los mensajes de registro y este texto es leído y guardado en el registro. Este texto es interpretado como código.
Luego un actor malintencionado puede utilizar estas dos herramientas y enviar un código malicioso a través de la sustitución de búsqueda en una consulta JNDI y el sistema ejecutaría el código de manera automática.
¿Cómo mitigar el Log4shell?
La mitigación del Log4shell implica reducir el impacto o la probabilidad de un ataque exitoso. Algunas de las medidas de mitigación que se pueden tomar son:
- Actualizar Log4j a la versión más reciente que soluciona el Log4shell y sus vulnerabilidades asociadas. Este es el paso más importante.
- Bloquear o filtrar el tráfico de red saliente hacia los servidores LDAP o RMI externos, lo que impide que Log4j 2 descargue el código malicioso de los servidores maliciosos.
- Aplicar el principio de mínimo privilegio a las aplicaciones que utilizan Log4j, lo que limita el acceso y el control que el atacante puede obtener sobre el sistema afectado.
- Realizar copias de seguridad regulares de los datos críticos, lo que facilita la recuperación de los archivos en caso de que sean cifrados o borrados por un malware.