Log4Shell, identificador común de vulnerabilidad y exposición (CVE) , CVE-2021-44228, es una vulnerabilidad de ejecución remota de código (RCE) presente en algunas versiones de Log4J. El fallo afecta a Apache Log4J 2, versiones 2.14.1 y anteriores. Log4J 2.15 y versiones posteriores, así como todas las versiones de Apache Log4J 1, no se ven afectadas.
Log4Shell se basa en la forma en que las versiones anteriores de Log4J 2 gestionaban las búsquedas JNDI (Java Naming and Directory Interface). JNDI es una interfaz de programación de aplicaciones (API) que utilizan las aplicaciones Java para acceder a los recursos alojados en servidores externos. Una búsqueda JNDI es un comando que indica a la aplicación que vaya a un servidor y descargue un objeto específico, como un dato o un script. Las versiones anteriores de Log4J 2 ejecutan automáticamente cualquier código descargado de esta manera.
Los usuarios pueden enviar búsquedas JNDI a versiones vulnerables de Log4J incluyéndolas en mensajes de registro. Es un proceso muy sencillo. Por ejemplo, en versiones anteriores de Minecraft Java Edition, que utilizan Log4J para registrar los mensajes de usuario, un usuario puede escribir la búsqueda JNDI en la ventana de chat pública.
Los hackers pueden utilizar esta funcionalidad JNDI para ejecutar código malicioso y arbitrario de forma remota. En primer lugar, el hacker configura un servidor que utiliza un protocolo común, como el Protocolo Ligero de Acceso a Directorios (LDAP) para evitar llamar la atención. A continuación, almacena una carga maliciosa en ese servidor, como un archivo malware. Por último, envía una búsqueda JNDI a un programa, indicándole que vaya al servidor LDAP del atacante, descargue la carga útil y ejecute el código.