
CVE 2021-44228 Prova de Conceito. Log4Shell é um ataque contra servidores que usa versões vulneráveis do Log4J.
Apache Log4j2 2.0-beta9 até 2.15.0 (exceto as versões 2.12.2, 2.12.3 e 2.3.1)
Os recursos JNDI usados em configurações, mensagens de log e parâmetros não protegem contra endpoints LDAP controlados pelo atacante e outros endpoints relacionados a JNDI. Um atacante que consegue 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 lookup de mensagens está habilitada. A partir do log4j 2.15.0, esse comportamento foi desabilitado por padrão. A partir da versão 2.16.0 (juntamente com 2.12.2, 2.12.3 e 2.3.1), essa funcionalidade foi completamente removida. Observe que essa vulnerabilidade é específica do log4j-core e não afeta log4net, log4cxx ou outros projetos Apache Logging Services.
Como resultado, é classificada com uma pontuação CVSS v3 de 10.0.(PONTUAÇÃO MÁXIMA)
Felizmente, este é um ataque 0-day. Então os desenvolvedores corrigiram isso em 0-day.
O Projeto Apache Log4j está entre as peças de software de código aberto mais implantadas, fornecendo recursos de log para aplicações Java.
Primeiramente, esta PoC usa:
Em http_server você encontrará 2 arquivos: MyExploit.java e seu arquivo compilado .class MyExploit.class
💡LEMBRETE: javac namefile.java para compilar uma classe Java :)
Você pode executar um servidor HTTP rapidamente usando o comando: python -m http.server [PORT] Nesses casos
Repositório do marshalsec Detalhes aqui
Repositório do christophetd Detalhes aqui
Normalmente, o campo alvo no cabeçalho da requisição é o User-agent; nesta PoC, será usado X-Api-Version
Esta PoC executa uma execução de comandos no servidor vulnerável para criar um arquivo chamado "pwned_by_pierpaolosestito_dev" na pasta tmp. MyExploit.java também contém um payload malicioso que permite ao atacante realizar uma execução reversa de código e obter um Reverse-Shell.
💡ALGUMA DICA: Se você executar docker exec [container_id] ifconfig , pode notar que é um runner que não está no seu subdomínio local. Para realizar um RCE, você pode alterar o IP dentro do MyExploit.java, que contém uma string de comando de RCE. A partir do momento em que o runner do Docker não consegue contatar você em um IP privado, você precisa de um IP público e pode obtê-lo com encaminhamento de porta.