Aguas con el AJAX
Hoy en día cualquier persona que sea digno de llamarse programador Web ha escuchado acerca de AJAX, no es raro ver que en los últimos meses nos han bombardeado con información acerca de esta tecnología, blogs, podcasts, libros, seminarios, incluso ya existe una conferencia de AJAX.
La columna principal de AJAX se basa en la creación del objeto HttpRequest el cual abre un canal de comunicación hacia el servidor Web tal y como lo hace el navegador, por medio de javascript podemos abrir un canal de comunicación hacia el servidor y solicitar por una pagina ya sea estática (HTML) o dinámica (PHP, ASPX, JSP, etc.) lo que obtenemos del resultado de esta llamada va a ser exactamente el mismo resultado que obtendríamos si mandamos llamar la misma pagina desde el navegador. Por lo regular se mandan llamar scripts que regresen XML o JSON. Para todas aquellas personas que no lo único que saben es de AJAX es que es un químico que se utiliza para limpiar (mi mama lo usa :)) revisen la categoría de AJAX en el blog de Carlos Madrigal
Gracias a AJAX podemos por fin proveer aplicaciones responsivas tal y como lo haríamos con una aplicación de escritorio, bueno y que tiene de malo esto? Se preguntaran, bueno no tiene nada de mal siempre y cuando se cuente con un mecanismo de seguridad bien definido.
Seguridad? Seguridad!!!!! Pero si solo estamos hablado de unas mugrosas paginas que dibujan la interfase de usuario y ya esta, porque debemos de preocuparnos por la seguridad? Que se preocupen los gueyes del Server para que no los hackeen y se roben los datos de las bases de datos.
La implementación de AJAX en nuestras aplicaciones Web abre la puerta a una nueva plataforma de ataques por parte de los gueyes mal intencionados que no tienen otra cosa que hace mas que el estar chinge y chinge y chinge y chinge (cual vil pinche mosca en una mañana de verano).
Existen diferentes tipos de ataques que un guey mal intencionado podría hacerle a nuestro sito cuando este implementa AJAX, estos son solo algunos de ellos.
Information Leakage – (en perro- ups se te vieron hasta las entrañas ).
La situación mas común se da al momento de desarrollar nuestras formas de captura o de edición, típicamente estas formas piden por un ID por ejemplo del cliente con AJAX el programador puede crear un pedazo de javascript que cuando el campo de texto pierda el foco ejecute una petición al servidor para traerse la información ya sea en formato XML, JSON, etc. Este tipo de escenarios le dan a nuestros atacantes el “how to” (en perro- ya se como chigados hacerle ), ya que se enteran de nombres de funciones, tipos de retorno, parámetros, rangos validos de datos, etc.
Resource Transfer (en perro- presta ese archivo)
Las requisiciones echas con AJAX son idénticas a las echas por el navegador, el servidor no tiene forma de identificar si la requisición viene del navegador o de un script, lo que significa que por medio de AJAX se puedan solicitar archivos, por ejemplo, que pasa si la configuración de nuestro sito esta en un archivo de configuración, por medio de AJAX se podría requerir ese archivo de configuración (todo esto sin que el usuario lo note) y ver su contenido por ejemplo el nombre de usuario y la clave de acceso a la base de datos donde se guardan los números de las tarjetas de crédito de los clientes (ay guey!!!!)..
Injection of script (en perro- de donde salio eso)
Esto es básicamente es la inyección de un script dentro de una pagina servida por el servidor web, este script al ser ejecutado pone al usuario a merced del maldito script, el script puede robarse a la malagueña las cookies, variables de sesión o información de la PC en donde se esta ejecutando el navegador, etc. y enviarla por medio de AJAX a la dirección de mendigo hacker..
Ajax Bridging
En este mundo en donde la arquitectura que esta de moda es SOA, muchas de las empresas están ofreciendo sus servicios a través de este tipo de arquitectura, en pocas palabras se les esta abriendo digo están abriendo sus aplicaciones. Sin embargo por cuando usamos un framework por razones de seguridad este framework AJAX no pude hacer llamadas hacia otros sitios que no sean de los sitos de los que vienen, por ejemplo la implementación de AJAX bajada de google.com no se puede conectar a yahoo.com o live.com, si la aplicación tiene la necesidad de hacer esto hay algo llamado AJAX bridge el cual como su nombre lo indica es un puente entre sitios, la comunicación entre estos sitios por lo regular se lleva a cabo por medio de web services.
El problema que se podría presentar es el abuso por parte de un cliente hacia el proveedor de servicios, por ejemplo consideremos esta situación:
La empresa negocios.com provee un servicio de directorio de negocios a sus clientes, esta empresa ofrece diferentes tipos de membresía que van desde la consulta de 10 negocios (la membresía gratis) hasta el acceso ilimitado del mismo (la membresía non plus ultra $$$$$$) .
El sito miempresa.com tiene una membresía non plus ultra o sea acceso ilimitado al directorio de negocios, el mañoso podría hacer diferentes cosas en este escenario
Una seria si el hacker desea copiar toda la base de datos hacinado un chingo de llamadas por medio del puente de ajax de miempresa.com. debido a la relación de negocio entre estas dos partes no hay nada que pueda impedir este tipo de ataque.
Otra cosa que podría hacer el jijo del maíz es lanzar una ataque malicioso de manera que el proveedor (negocios.com) lo detecte y debido a que proviene del puente ajax de miempresa.com le niegue el servicio miempresa.com, causandole un daño a esta o alguno de sus clientes.
Como ven esta es solo una pequeña lista de los riesgos de seguridad a los que nos podamos enfrentar si implementamos AJAX sin tener diseñado un esquema de seguridad adecuado.
La primera vez que escuche acerca de AJAX no me emocione mucho, uno de mis problemas fue que no encontraba una aplicación practica para tal tecnología, sin embargo conforme escuchaba mas de AJAX me empecé a emocionar mas y a ver las posibles aplicaciones de este tipo de tecnologías y estoy seguro que muchos están en este tipo de situación, sin embargo una de las cosas la mayoría esta haciendo es programando a la copy & passte (en perro: copiar y pegar) y no entienden las implicaciones o no ven la foto completa, mi recomendación es que si están pensando en crear o migrar una aplicación Web usando AJAX entiendan la foto completa y evalúen seriamente las posibles implicaciones de seguridad que conlleva dicha implementación.
Saludos y no coman tierra.