
Laboratório baseado em Docker para validar a vulnerabilidade Log4Shell (CVE-2021-44228) em aplicações web Java, testar mitigações e simular exploração de RCE via LDAP e injeção JNDI.
Esta ferramenta permite verificar se uma aplicação web Java simples é vulnerável ao CVE-2021-44228 para uma versão de Java e de Log4J fornecida pelo utilizador.
Pode também [opcionalmente] aplicar uma de algumas mitigações pré-definidas.
O laboratório de simulação criado por log4shell_validator.py utiliza docker-compose para simular a exploração da vulnerabilidade log4j e obter RCE na máquina vulnerável.
Primeiro, algumas imagens docker precisam de ser construídas. O script ./build_images.sh deve tratar disso.
A simulação de ataque é feita da seguinte forma:
/2021-44228-via-message, regista sempre o campo User-Agent do cabeçalho. O código para esta aplicação está disponível em ./poc_template../exploit.sh e envia um payload para a aplicação vulnerável.cd marshalsec/ ;mvn clean package -DskipTests ;cd -./build-images.shpython log4shell_validator.py --java-version 8 --log4j-version 2.12.1~/workspace/CVE-2021-44228-playground$ python log4shell_validator.py --help
usage: log4shell_validator.py [-h] [--java-version JAVA_VERSION] --log4j-version LOG4J_VERSION [--no-cleanup] [--disable-trust-url] [--remove-jndi-lookup-class] [--disable-message-lookup] [--debug]
[--exploit-via-thread-context]
log4j-vulnerability-tester
optional arguments:
-h, --help show this help message and exit
--java-version JAVA_VERSION
version of java to be used
--log4j-version LOG4J_VERSION
version of log4j to be used
--no-cleanup Don't delete used containers.
--disable-trust-url Disable the LDAP trustURLCodebase setting on the victim app
--remove-jndi-lookup-class
Remove the JNDI Lookup class from the log4j jar file
--disable-message-lookup
Disable the JNDI message lookup in the victim app's JVM
--debug Display all container's logs
--exploit-via-thread-context
By sending the payload to an HTTP handler which makes use of Custom logging with ThreadContext, attempt to bypass the no-message-lookup mitigation
Este validador foi testado com várias combinações de Java7/8 e diferentes versões do Log4J2. Para mais exemplos, consulte o pipeline de testes estendidos no separador de ações do GitHub.
Por enquanto, as seguintes mitigações foram implementadas:
1com.sun.jndi.ldap.object.trustURLCodebase como False.-Dlog4j2.formatMsgNoLookups=TrueAlém disso, foi adicionada uma nova flag para testar um vetor de exploração que pode ignorar a desativação da pesquisa de mensagens: --exploit-via-thread-context
Este software foi criado puramente para fins de investigação e para o desenvolvimento de técnicas de mitigação eficazes, e não se destina a ser utilizado para atacar sistemas, exceto quando explicitamente autorizado. Os mantenedores do projeto não são responsáveis pelo uso indevido do software. Use com responsabilidade.