Seguridad en AJAX

Publicado en Artículos, Programación, Seguridad,


Tweet about this on TwitterShare on Google+1Share on Facebook0Share on LinkedIn0

En este artículo vamos a comenzar a recopilar los problemas de seguridad que presenta la tecnología AJAX. Esta tecnología cada vez más distribuida por la web 2.0. Primero hablaremos lo que es AJAX y después vamos a hablar de los problemas de seguridad que se tiene y posibles soluciones o formas de mitigación.

AJAX, Asynchronous Javascript and XML, es una técnica que permite presentar la información con CSS y DOM. Esta técnica permite crear aplicaciones interactivas ricas, las cuales se ejecutan en el lado del cliente, client-side, en el navegador. El funcionamiento de AJAX es sencillo, mientras la aplicación se ejecuta en el navegador del cliente, la comunicación se lleva a cabo de manera asíncrona en segundo plano con el servidor. Esto permite crear el efecto de que el sitio web va cambiando en función de las necesidades, por la actualización de la información en el servidor, el cual podría ser debido a otras acciones del cliente.

Ahora vamos a hablar de problemas de seguridad que se tienen que tener en cuenta, para ello hablaremos de lo que está compuesto ya que su seguridad dependerá de la seguridad que tienen los componentes que lo forman.

Hay que tener en cuenta el aumento de la superficie de ataque, es decir, la parte que se ejecuta o desarrolla en la parte del cliente, y esto hace que la exposición o superficie de ataque sea mayor. La revelación de la lógica de la aplicación hace que los posibles atacantes conozcan parte del código, ya que éste reside en la parte del cliente. Esto hace que el usuario o atacante pueda estudiar e inferir cierta parte de la lógica, y utilizarlo para llevar a cabo acciones maliciosas sobre la lógica de la aplicación.

La dificultad de la auditoría de las aplicaciones hace que exista un problema de seguridad, ya que por un lado se debe revisar un mayor número de líneas de código y hace que haya más puntos a revisar. La parte de auditoría hay que llevarla tanto de la parte del cliente como del servidor.

Vulnerabilidades clásicas como SQLi o XSS, y nuevas posibilidades para el XSS. SQLi es una de las vulnerabilidades top de OWASP, y sigue siendo una de las principales amenazas en las nuevas tecnologías, hoy en día también con las bases de datos no relaciones, como por ejemplo Mongo Injection. Las nuevas posibilidades para los XSS surgen del almacenamiento de más datos en la parte del cliente y se pueden obtener cookies, credenciales y realizar un robo de información en profundidad. Mediante el DOM y un XSS se puede alterar el contenido de un sitio, modifica la dirección de dónde los datos o formularios de usuarios son enviados, robo de cookies y credenciales, tal y como se mencionó anteriormente.

En la siguiente imagen se puede visualizar un esquema de cómo funciona un XSS con DOM, denominados DOM-Based XSS.

Un grave problema utilizando AJAX entre nombres de dominios es lo que se conoce como Same Origin Policy. Con este problema de seguridad un script obtenido en un origen puede cargar o modificar propiedades del documento desde otro origen no igual al primero.

El envenenamiento XML es otro de los problemas de seguridad a los que nos podemos enfrentar. El servidor debe validar todos los datos que recibe, ya que un posible XML malformado puede causar un crash en el servidor provocando una denegación de servicio.

La ejecución de código malicioso también se encuentra en este ámbito, y es importante tenerlo en cuenta. Las llamadas que se realizan con AJAX ejecutan en background sin ninguna interacción del usuario, por lo que el usuario no es consciente de lo que se está realizando en un sitio concreto, por lo que la web puede aprovechar este hecho para realizar un robo de cookies. Es un problema de seguridad que se debe tener muy en cuenta, ya que se puede llevar a cabo de manera silenciosa y poco sospechosa.

Los XPATH inyectados en SOAP son una amenaza y es una acción similar a una inyección SQL. El lenguaje utilizado es XPATH y el objetivo del ataque son los documentos XML.

Algo que hay que tener muy en cuenta son las validaciones de cliente y no realizadas en la parte del servidor. Este hecho es quizá una de las mayores amenazas a las que se enfrenta AJAX y cualquier tecnología que se encuentre en el lado del cliente. Toda petición debe ser validada en el lado del servidor, independientemente de si se hace una validación en el cliente.

¿Cómo solucionamos?

Se propone el siguiente listado:

  • El código de Javascript se debe ejecutar mediante el uso de una sandbox, con lo que todo lo malicioso que se intente ejecutar queda aislado y sin acceso a los recursos de interés de la máquina atacada.
  • No establecer conexiones con sitios diferentes del nombre de dominio del que se ha obtenido el script de Javascript. De este modo se puede proteger de problemas de seguridad y esta medida se denomina CORS, Cross-Origin Resource Sharing.
  • Los ficheros Javascript que se han obtenido desde un sitio en concreto no deben poder acceder a propiedades de otro sitio.
  • Validación de todos los campos de entrada y comprobación siempre en el lado del servidor, de otra manera cualquier acción que se valide en el cliente puede ser manipulada, por ejemplo mediante el uso de un proxy.
  • Implantar controles de seguridad como pueden ser autenticación, autorización, e incluso registro de operaciones o logging, siempre en el lado del servidor.
  • Utilizar métodos POST en vez de métodos GET.
  • Se debe tener en cuenta los ataques clásicos como SQLi y XSS por lo que buscarlos especialmente y XSRF, los cuales podrán ser solventados mediante un filtrado correcto o utilización de tokens correctamente en el caso del XSRF.
  • No almacenar jamás datos sensibles o confidenciales en el lado del cliente, este hecho haría que obtenerlos por un atacante fuera algo potencialmente sencillo.
  • Utilización de métodos criptográficos para transmitir datos sensibles o confidenciales entre el cliente y el servidor.
  • La lógica de negocio debe tener el principio de mínima exposición y encontrarse siempre en el lado del servidor.
  • Toda petición realizada con AJAX y que acceda a recursos protegidos deberán encontrarse autenticadas.

Se puede entender fácilmente que las tecnologías estudiadas en este trabajo, englobadas en la web 2.0 pueden sufrir ataques tal y como ocurría en la web 1.0. La auditoría y el S-SDLC es algo totalmente necesario para minimizar la ocurrencia de las posibles amenazas que se han tratado en el presente documento.


vía FluProject

Seguridad en AJAX
5 (100%) 1 voto

Etiquetas: , ,


Deja un comentario

Cuanto es 7 + 9 ?
Please leave these two fields as-is:
IMPORTANTE! Necesitas resolver la operación matemática para poder continuar.

Newsletter

Redes sociales

Centro de soporte

Centro de recursos