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.
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.
Con HTML5, se han añadido nuevas tecnologías como CORS que pueden ser relajadas para generar peticiones cross-domain sigilosas.
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.
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.
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 + "')", []);
}
)
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')", []);
}
)
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.
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')", []);
}
)
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]);
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]
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.
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].
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.
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.
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.
Basado en "Stealing Facebook Graph API Access Token : Yet Another UI Redressing Vector"
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.