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. La falla afecta a Apache Log4J 2, versiones 2.14.1 y anteriores. Log4J 2.15 y posteriores, y todas las versiones de Apache Log4J 1, no se ven afectadas.
Log4Shell surge de la forma en que las versiones anteriores de Log4J 2 manejan búsquedas de denominación Java e interfaz de directorio (JNDI). JNDI es una interfaz de programación de aplicaciones (API) que las aplicaciones Java utilizan 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 una pieza de datos 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 los mensajes de registro. Hacerlo es sencillo. Por ejemplo, en versiones anteriores de Minecraft Java Edition, que utilizan Log4J para grabar mensajes de usuario, un usuario puede escribir la búsqueda JNDI en la ventana de chat público.
Los hackers pueden usar esta funcionalidad JNDI para ejecutar código malicioso y arbitrario de forma remota. Primero, 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, almacenan una carga útil maliciosa en ese servidor, como un archivo malware. Finalmente, envían una búsqueda JNDI a un programa, diciéndole que vaya al servidor LDAP del atacante, descargue la carga útil y ejecute el código.