O Log4Shell, identificador Common Vulnerability and Exposure (CVE), CVE-2021-44228, é uma vulnerabilidade de execução remota de código (RCE) presente em algumas versões do Log4J. A falha afeta o Apache Log4J 2, versões 2.14.1 e anteriores. O Log4J 2.15 e posteriores, e todas as versões do Apache Log4J 1, não são afetados.
O Log4Shell surge de como versões mais antigas do Log4J 2 lidam com pesquisas de Java Naming and Directory Interface (JNDI). O JNDI é uma interface de programação de aplicativos (API) que as aplicações Java usam para acessar recursos hospedados em servidores externos. Uma pesquisa JNDI é um comando que diz ao aplicativo para ir a um servidor e baixar um objeto específico, como um dado ou um script. Versões mais antigas do Log4j 2 executam automaticamente qualquer código baixado dessa maneira.
Os utilizadores podem enviar procuras JNDI para versões vulneráveis do Log4J ao incluí-las em mensagens de registo.Fazer isso é simples. Por exemplo, em versões mais antigas do Minecraft Java Edition, que utilizam o Log4J para registrar mensagens de usuário, um usuário pode digitar a pesquisa JNDI na janela de chat público.
Hackers podem usar essa funcionalidade JNDI para executar código malicioso arbitrário remotamente. Primeiro, o hacker configura um servidor que usa um protocolo comum, como Lightweight Directory Access Protocol (LDAP), para evitar chamar a atenção. Em seguida, ele armazena uma carga maliciosa nesse servidor, como um arquivo de malware. Finalmente, envia uma pesquisa JNDI para um programa, dizendo-lhe para acessar o servidor LDAP do atacante, baixar a carga e executar o código.