2014/05/02

Visa USA - Open Redirect Vulnerability

=== BACKGROUND ===
Visa es una de las marcas de pago líderes del mundo. Las tarjetas Visa generan un volumen de ventas de casi 3 billones de dólares anuales. Es operada por Visa International Service Association, con sede en San Francisco, California, USA.

=== DESCRIPCION ===
Open Redirect es una vulnerabilidad que toma un parámetro y redirige al usuario hacia el valor del parámetro sin ninguna validación. Esta vulnerabilidad se utiliza en los ataques de phishing para conseguir que los usuarios visiten sitios maliciosos a través de un enlace que aparentemente es de confianza.

=== PRUEBA DE CONCEPTO ===
La vulnerabilidad afecta al parámetro ‘url’ del fichero ‘vro_redeem.jsp’ que está presente en varias rutas:

    http://usa.visa.com/
    personal/discounts/detail/<PATH>/vro_redeem.jsp
Prueba de concepto:
    http://usa.visa.com/
    personal/discounts/detail/MaisonBirks_2_S14/
    vro_redeem.jsp?
    offerId=40251&
    url=%68%74%74%70%3a%2f%2f%6c%6f%63%61%6c%68%6f%73%74%2f
=== IMPACTO ===
El impacto de esta vulnerabilidad suele ser bajo, pero en el contexto en el que se produce facilita enormemente ataques tipo phishing, por ejemplo simulando una oferta y solicitando los datos de la tarjeta. Al ser en principio un dominio válido de VISA la mayoria de las victimas no desconfiarán del enlace, unido a una redirección transparente es muy fácil no darse cuenta de una posible redireccion hacia un dominio externo.

=== CREDITOS ===
Vulnerabilidad descubierta por Jose Carlos Expósito Bueno
jceb{at}0xlabs{dotz}com – www.0xlabs.com


=== DISCLOSURE TIMELINE ===
06/07/2014 – Vulnerabilidad encontrada y notificada a ‘askvisausa@visa.com’.
16/07/2014 – Respuesta de ‘askvisausa@visa.com’ solicitando más detalles.
16/07/2014 – Notifican que están trabajando para solucionar el problema.
31/07/2014 – Notifican que la vulnerabilidad ya ha sido parcheada.

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


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\"\'