Log4shell: A vulnerabilidade zero day encontrada na biblioteca Log4j2 do Java
No dia 9 de dezembro, a internet veio abaixo com a descoberta de uma vulnerabilidade (CVE-2021-44228) de alta criticidade encontrada na biblioteca do Java log4j 2, vastamente utilizada por milhares de serviços e empresas, como Steam, Twitter e até mesmo o famoso jogo eletrônico Minecraft.
A vulnerabilidade em questão, permite Remote Code Execution (RCE) no servidor afetado, isto é, uma vez explorada, a vulnerabilidade permite controle total sobre a máquina atacada
O que é o log4j 2?
Para entender como esta vulnerabilidade é explorada, primeiro precisamos entender o que é o pacote log4j2.
Uma das bibliotecas de logging mais populares, o log4j2 é um framework open source de logging incorporado em muitas aplicações baseadas em Java. Ela oferece aos desenvolvedores uma maneira de criar logs para gravar sua atividade em diversos casos de uso, como monitoração, rastreamento de dados, troubleshooting, entre outras coisas. Em suma, o log4j2 é um pacote open source, gratuito, que é utilizado pelas maiores empresas do mundo.
O impacto de CVE-2021-44228
O impacto desta vulnerabilidade é enorme devido à ampla adoção desta biblioteca Log4j . Se você tiver alguns aplicativos java em seu ambiente, é provável que eles estejam usando Log4j para registrar eventos internos.
A exploração também é bastante flexível, permitindo que você recupere e execute código arbitrário de servidores LDAP locais para remotos e outros protocolos.
Todos esses fatores e o alto impacto em tantos sistemas dão a essa vulnerabilidade uma classificação de gravidade CRÍTICA de CVSS3 10.0. O fato de a vulnerabilidade estar sendo explorada ativamente aumenta ainda mais o risco para as organizações afetadas.
Por dentro da falha
A vulnerabilidade se aproveita do Java Naming and Directory Interface (JNDI), que é uma API para acesso a serviços de diretórios. Ela permite que aplicações cliente descubram e obtenham dados ou objetos através de um nome. É fornecido um nome diferente de resolução e serviço de diretórios, como DNS e LDAP.
A vulnerabilidade existe por que no pacote Log4j, o componente afetado valida de forma não ideal os dados fornecidos pelo usuário, potencialmente permitindo um atacante fornecer uma linha que é interpretada como uma variável de código, que resulta no carregamento de um arquivo de classe Java.
Segue um exemplo resumido de como essa vulnerabilidade pode ser explorada, este método se baseia em uma política de logs especialmente construída para passar dados maliciosos como uma mensagem de erro.
Para concretizar a exploração, a URL JNDI/LDAP fornece um objeto de uma classe do Java que será carregada no host vítima, onde há a presença do Log4j, e isto só é possível por que o JDNI não reforça nenhum controle de segurança nas requisições do protocolo LDAP. E além disso, o protocolo LDAP suporta o carregamento de classe por usuários remotos.
Mitigação com a GoCache
Um dos serviços GoCache é o seu WAF (Web Application Firewall), que protege aplicações contra ataques e atividades maliciosas. Foram disponibilizadas novas regras para bloquear tentativas de exploração do Log4Shell, que fazem o bloqueio de qualquer requisição que tenha em seu corpo ou parâmetro, a carga maliciosa que explora a vulnerabilidade recém-descoberta, mitigando inclusive tentativas de formatação de textos, prática comum na tentativa de contornar o sistema de segurança do WAF.
Por Marcos Medeiros, Support Analyst GoCache