Clase 04: HTML5 y últimas tendencias en ataques.

Taller de Seguridad Web

Claudio Salazar (csalazar spect cl)



Sky - Beige - Simple - Serif - Night - Default

Agenda

  • HTML5 y seguridad.
  • Últimas tendencias en ataques.

HTML5 y seguridad

Esta sección trata sobre las nuevas características incluidas en HTML5, su incidencia en la seguridad de una aplicación y vulnerabilidades que han emergido producto de este aclamado estandar.

Como referencia de esta sección se tomó la presentación HTML5 Top 10 Threats - Stealth Attacks and Silent Exploits de Shreeraj Shah.

Características de HTML5

  • CORS (Cross Origin Resource Sharing).
  • Almacenamiento local.
  • webSQL.
  • Web Sockets.
  • Web Workers.
  • Web Messaging.

HTML5 y ataques XSS

HTML5 trae consigo nuevas etiquetas, atributos y eventos, lo cual presenta nuevos vectores que pueden esquivar los filtros XSS actuales.


Las recomendaciones siguen siendo las mismas: validar entrada y salida de datos.

HTML5 y ataques CSRF [1]

Con HTML5, se han añadido nuevas tecnologías como CORS que pueden ser relajadas para generar peticiones cross-domain sigilosas.


El token CSRF sigue siendo la solución para estos escenarios.

Almacenamiento local

HTML5 añade la característica de almacenamiento local, pudiendo guardar información en el lado del cliente. Un ataque XSS puede acceder a este tipo de almacenamiento.


Lo recomendado es no guardar datos sensibles en el lado del cliente.

webSQL

Es la implementación de bases de datos locales que pueden ser consultadas a través del lenguaje de consulta SQL.

Al igual que en el lado del servidor, esta característica puede ser susceptible a ataques de inyección SQL.

Ejemplo de caso real [1]



db.transaction
(
  function(tx)
  {
    tx.executeSql("INSERT INTO tweet_db (id, tweet, screenname, fullname) values (" + t.id + ",'" + t.text + "','" + t.user.screen_name + "','" +  t.user.name + "')", []);
  }
)
    

Escenario normal


t.id = 12345;
t.text = "blabla"
t.user.screen_name = "Juan Bueno"
t.user.name = "juan_bueno"
    

db.transaction
(
  function(tx)
  {
    tx.executeSql("INSERT INTO tweet_db (id, tweet, screenname, fullname) values (12345,'blabla','Juan Bueno','juan_bueno')", []);
  }
)
    

Escenario de vulnerabilidad

Viendo que los datos de un tweet forman parte de la consulta webSQL y no existe ninguna protección aplicada a ésta, se podría realizar una inyección SQL con datos de nuestra elección.

Explotación de la vulnerabilidad


t.id = 12345;
t.text = "blabla','Juan Malo','juan_malo')/*"
t.user.screen_name = "Juan Bueno"
t.user.name = "juan_bueno"
    

db.transaction
(
  function(tx)
  {
    tx.executeSql("INSERT INTO tweet_db (id, tweet, screenname, fullname) values (12345,'blabla','Juan Malo','juan_malo')/*','Juan Bueno','juan_bueno')", []);
  }
)
    

Buena práctica

La recomendación para inyección SQL, tanto en el lado del cliente como el servidor, es usar consultas parametrizadas.

tx.executeSql('INSERT INTO tweet_db (id, tweet, screenname, fullname) values (?,?,?,?)', [t.id,t.text,t.user.screen_name,t.user.name]);
      

Web Sockets

Esta tecnología añade el soporte de sockets a nivel del navegador, dando la posibilidad de una comunicación bidireccional cliente/servidor.


Las recomendaciones van por validar los datos recibidos tanto en c/s, usar Web Sockets seguros (wss) y restringir las posibles conexiones c/s mediante el uso de cabeceras como CSP. [1] [2]

Demo [1]

Web Workers

Web Workers son el equivalente a Threads en un lenguaje de programación.


Si bien por sí solos no tienen incidencia en seguridad, pueden posibilitar que ciertas tareas sean llevadas de forma sigilosa y sin que interrumpan el normal flujo de la aplicación.

Web Messaging

Esta característica hace posible el paso de mensajes entre dos documentos con diferentes orígenes.


Se recomienda especificar el origen/destino de los mensajes y validar los datos recibidos antes de usarlos. Un uso incorrecto puede provocar que la página sea susceptible a XSS basado en DOM [1].

Enlaces de utilidad.

Últimas tendencias en ataques

El propósito de está sección es mostrar ataques modernos para concientizar a los desarrolladores sobre la criticidad de las vulnerabilidades estudiadas hasta ahora.

BeEF

The Browser Exploitation Framework (BeEF) es una herramienta de seguridad que provee una serie de utilidades para llevar un simple XSS a otro nivel.


Permite recopilar información de la víctima, ejercer ingeniería social, descubrimiento de la red perimetral, etc.

Demo

Formas de UI Redressing

En el pasado, múltiples vectores de ataque del tipo UI-Redressing han sido aplicados. Es interesante conocerlos y ver como han ido evolucionando para esquivar las protecciones desarrolladas por los navegadores.

Estas demos están basados en la investigación de Krzysztof Kotowicz y Luca De Fulgentis.

Demo UI-Redressing

Basado en "Stealing Facebook Graph API Access Token : Yet Another UI Redressing Vector"

Demo UI-Redressing 1 [1]

Demo UI-Redressing 2 [1]

Demo UI-Redressing 3 [1]

Análisis de Demo UI-Redressing 3

Demo FileJacking [1]

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.