domingo, marzo 27, 2011

Buscando sesiones rotas con componentes cliente

Uno de los fallos comunes en aplicaciones web son los de sesión rota. En este tipo de fallos, el programador del software no comprueba en todos los puntos de la aplicación que el usuario tenga una sesión autenticada y activa, lo que permite a atacantes sin sesión activa llegar a determinadas partes de la aplicación.

Encontrar partes de la aplicación web que pueden ser accedidas sin una sesión activa puede ayudar desde a encontrar más información del sitio hasta conseguir un acceso, dependiendo del lugar donde falle la comprobación.

Un entorno a explorar son aquellas aplicaciones web que cargan parte de la lógica mediante un componente que se carga en el navegador. Este componente puede ser un simple fichero en flash, un componente ActiveX o un Applet Java, por poner un ejemplo.

En el caso de que sen componentes fácilmente decompilables, una idea sencilla es abrir el cliente y buscar las URLS contenidas para poder realizar un spidering de las mismas, buscando todos los ficheros que aparezcan. Esto es muy común, por ejemplo, en los ficheros flash o los applets Java. Si el componente es un objeto escrito en Visual C, la cosa implica hacer reversing o fuzzing. Alejandro Ramos escribió un gran artículo sobre cómo analizar la seguridad de los ActiveX.

Sin embargo, en cualquier caso, debe existir una comunicación entre la aplicación web y el cliente para que este último vaya abriendo los paneles de interfaz de usuario a media que un usuario autenticado los vaya necesitando. Es por eso que, cuando el servidor se lo indique, el cliente deberá abrir un nuevo panel al usuario, con opciones que llamarán a nuevas partes del servidor.

Si se intercepta la comunicación entre el servidor y el cliente, es fácil indicarle al cliente que debe abrir otro panel del interfaz, y descubrir nuevas partes de la aplicación en el servidor.

En el ejemplo del otro día, con ThinWorx, se carga un applet Java o un control ActiveX dependiendo del navegador. Si se intercepta la comunicación entre el servidor y el cliente se puede ver que cuando el usuario no introduce una clave correcta se obtiene un mensaje de error.


Figura 1: Error de autenticación

Este mensaje de error es mostrado por el componente cliente porque el servidor se lo ha indicado por medio de un código configurado. En este caso, el valor 4.


Figura 2: Código de respuesta de servidor

Conseguir ver diferentes partes de la aplicación cliente será tan senillo en este caso como cambiar los códigos de control que el servidor envía al cliente. En este caso, para acceder al panel de usuario, basta con manipular el valor 4, y sustituirlo por un valor 0, tal y como se ve en la siguiente imagen.


Figura 3: Manipulación de código de respuesta de servidor

El resultado es que se accede a un panel de administración de usuario sin sesión. Lógicamente. Si el servidor tiene comprobada correctametne la sesión en todas las ubicaciones llamadas, no se podrá ver nada más que las partes clientes.


Figura 4: Panel de usuario de la aplicación

Sin embargo, con el descubrimiento de nuevas URLs, se puede continuar realizando un proceso de spidering, buscando nuevas ubicaciones, para intentar encontrar partes de la aplicación que no requieran sesiones. En la siguiente imagen se puede ver el panel de administración de la aplicación.


Figura 5: Panel de administración

Tal vez, con este sistema no consigas tener el acceso completo a un sitio, pero si descubrir mucha más información que, de buen seguro, será útil más adelante.

Saludos Malignos!

4 comentarios:

  1. Q guapo has salido en las noticias de A3, pero me gusta mas las foca en rosa! :)

    ResponderEliminar
  2. Buenos dias!!! Acabo de descubrir tu blog, es magnifico!!!!
    Me gustaria hacerte una pregunta: como se cambia el valor de control ( 4 por el 0) tengo entendido que con firebug se puede hacer pero no se como.

    Gracias.

    ResponderEliminar
  3. @Anónimo de guapo... (serás anónima) }:)) espero!

    @anónimo de valores. Yo use Burp Suite e intercepté las respuestas del servidor. Con eso vale. }:))

    ResponderEliminar
  4. Gracias maligno!!.
    Si no es mucho pedir tienes algún tutorial (si es en español mejor q mejor). Estamos desarrollando un programa para el control de plagas y no puede haber "ninguna" inseguridad

    ResponderEliminar