Image
From Open Redirect to RCE in adAS - Múltiples CVEs

From Open Redirect to RCE in adAS - Múltiples CVEs

¡Buenas! Tras haberos contado en mi último post cómo resolví el primer reto del CTF JNIC VIEWNEXT, y a la espera de publicar los otros cuatro que quedan, hoy vuelvo para hablaros de adAS, un Single Sign On (SSO) usado por una gran cantidad de universidades.

Como alumno universitario, visito con frecuencia las páginas de mi universidad. Fue en una de estas visitas cuando me lo encontré. Al ser una pieza de software de código abierto y clave en la seguridad de estas instituciones, decidí montar un laboratorio donde poder auditar la plataforma en mi tiempo libre.

Para empezar, adAS está formada por dos partes. La primera de ellas consiste en un panel de administración que permite gestionar los protocolos usados, ver estadísticas, configurar las bases de datos, etc. Como se trataba de una auditoría realizada por pura curiosidad, esta se centró en encontrar vectores que permitieran a un atacante sin credenciales ejecución remota de código. Esto quiere decir que no se ha llevado a cabo una investigación exhaustiva de la implementación de los múltiples protocolos disponibles en la plataforma.





La segunda parte es el SSO en sí, encargado de autenticar a los usuarios y, normalmente, la única parte visible desde el exterior.



La primera vulnerabilidad encontrada, y la única que afecta a uno de los protocolos de autenticación, tiene asignada el CVE 2019-14912 y se produce por una incorrecta comprobación del dominio a redirigir tras la autenticación a través del protocolo OPENSSO. La comprobación es realizada mediante IP y no dominio. Esta se encuentra bajo el control del atacante, que es el dueño del servidor DNS que resolverá la petición. Por tanto, es posible para el atacante devolver una IP que se encuentre en la lista blanca cuando la petición provenga de adAS, y la IP del servidor malicioso cuando provenga de un usuario.



Esto permite obtener la cookie de inicio de sesión de los usuarios al ser enviada como parámetro GET. La obtención de esta cookie permite a un atacante iniciar sesión en el resto de los servicios protegidos por adAS.

Dado que este ataque se realiza bajo el dominio del SSO, es muy probable que tuviera éxito en una campaña de phishing. Es por ello que, a pesar de no permitir obtener ejecución de código de forma directa, me ha parecido interesante mencionar esta vulnerabilidad. Si queréis, podéis probar este ataque con esta PoC. Cabe destacar que la plataforma autentica automáticamente a los usuarios en nuevos servicios y permite ser insertada en iframes.

Por otro lado, aunque un ataque mediante phishing puede ser efectivo, nuestro objetivo es ejecutar código en el servidor. Para ello, explotaremos vulnerabilidades en el panel de administración que nos permitirán conseguir nuestro objetivo.

La primera vulnerabilidad que usaremos es un XSS almacenado que tiene asignado el CVE 2019-14913. La plataforma no codifica correctamente las entidades HTML a la hora de mostrar los registros, por lo que un atacante puede realizar acciones que provoquen errores sobre los que controla parte del mensaje de error, inyectando así código JavaScript en los registros, que será ejecutado cuando un administrador trate de leerlos. Esta vulnerabilidad será la base para explotar cualquiera de las vulnerabilidades en el panel de administración.


Una vez tenemos ejecución de código en el panel de administración tenemos distintos caminos que poder tomar. Si tenemos visibilidad del panel de administración podríamos explotar el CVE 2019-14916, que permite la subida de archivos sin restricciones para así subir una webshell y continuar desde ahí. Sin embargo, vamos a explotar la vulnerabilidad con CVE 2019-15087, que permite a un usuario con privilegios de administración cambiar la función usada como función de resumen por cualquier otra. Se explotará esta vulnerabilidad ya que no depende de tener visibilidad del panel de administración.

Lo que haremos será crear un nuevo método de autenticación que utilice la función system como función de resumen y la pondremos en último lugar, de tal forma que la plataforma se comporte de forma normal ante el resto de los usuarios y que sólo se ejecuten aquellas contraseñas inválidas.


De esta forma, tan solo tenemos que pasar como contraseña los comandos que queramos ejecutar en el servidor. Por ejemplo, para obtener una Shell inversa.





Dado que no existe parche oficial para estas vulnerabilidades, se ha creado un parche que soluciona el XSS usado como vector de entrada, el RCE y un Type Juggling a la hora de iniciar sesión, ya que son las vulnerabilidades más potencialmente explotables por un atacante sin credenciales.

Soluciona:

  • CVE-2019-15087 (RCE mediante cambio de algoritmo de resumen)
  • CVE-2019-15088 (Type Juggling que afecta al inicio de sesión)
  • CVE-2019-14913 (XSS Almacenado en los registros)

No soluciona:

  • CVE-2019-14911 (XSS reflejado)
  • CVE-2019-14912 (Robo de cookies a través del módulo OPENSSO)
  • CVE-2019-14914 (Path traversal que permite leer y eliminar archivos)
  • CVE-2019-14915 (Self-XSS)
  • CVE-2019-14916 (Subida de archivos sin restricciones)
  • CVE-2019-15085 (Contraseña de BD en formulario)
  • CVE-2019-15086 (XSS reflejado)
  • CVE-2019-15089 (Falta de controles anti CSRF)


Parche para adAS 1.7.0 que soluciona múltiples vulnerabilidades

https://gist.github.com/Wocanilo/d2afbee46436385ea3c92fa22c0cca9f

Y aquí concluye el post de hoy. Espero que os haya resultado interesante, y nos vemos en nada con mi siguiente artículo, en el que os contaré cómo solucioné el reto 2 del CTF en el que participé durante las  V Jornadas Nacionales de Investigación en Ciberseguridad (JNIC).

¡Hasta la próxima!


Daniel Sesé Benjumea

Daniel Sesé Benjumea