
CVE 2021-44228 Prueba de concepto. Log4Shell es un ataque contra servidores que utiliza versiones vulnerables de Log4J.
Apache Log4j2 2.0-beta9 hasta 2.15.0 (excepto las versiones 2.12.2, 2.12.3 y 2.3.1)
Las funciones JNDI utilizadas en la configuración, los mensajes de registro y los parámetros no protegen contra endpoints LDAP controlados por el atacante y otros endpoints relacionados con JNDI. Un atacante que pueda controlar mensajes de registro o parámetros de mensajes de registro puede ejecutar código arbitrario cargado desde servidores LDAP cuando la sustitución de búsqueda de mensajes está habilitada. A partir de log4j 2.15.0, este comportamiento está deshabilitado por defecto. Desde la versión 2.16.0 (junto con 2.12.2, 2.12.3 y 2.3.1), esta funcionalidad se ha eliminado por completo. Ten en cuenta que esta vulnerabilidad es específica de log4j-core y no afecta a log4net, log4cxx ni a otros proyectos de Apache Logging Services.
Como resultado, se califica con una puntuación CVSS v3 de 10.0 (PUNTUACIÓN MÁXIMA).
Afortunadamente, esto es un ataque de día cero (0-day). Así que los desarrolladores lo corrigieron en un día cero.
El proyecto Apache Log4j es uno de los componentes de software de código abierto más implementados, ya que proporciona capacidades de registro (logging) para aplicaciones Java.
En primer lugar, esta PoC utiliza:
En http_server encontrarás 2 archivos: MyExploit.java y su archivo .class compilado MyExploit.class
💡RECORDATORIO: javac namefile.java para compilar una clase Java :)
Puedes ejecutar un servidor HTTP sobre la marcha usando el comando: python -m http.server [PORT] En este caso
Repositorio de marshalsec Detalles aquí
Repositorio de christophetd Detalles aquí
Normalmente, el campo objetivo en la cabecera de la petición es el User-agent; en esta PoC se usará X-Api-Version
Esta PoC lanza una ejecución de comandos en el servidor vulnerable con el fin de crear un archivo llamado "pwned_by_pierpaolosestito_dev" en la carpeta tmp. MyExploit.java contiene también una carga útil maliciosa que permite al atacante realizar una ejecución inversa de código y obtener una reverse shell.
💡ALGÚN CONSEJO: Si ejecutas docker exec [container_id] ifconfig puedes notar que es un runner que no está en tu subdominio local. Para realizar una RCE puedes cambiar la IP dentro de MyExploit.java, que contiene una cadena de comando RCE. Dado que el runner de Docker no puede contactarte en una IP privada, necesitas una IP pública y puedes obtenerla con redirección de puertos (port forwarding).