La tecnología evoluciona a un ritmo realmente rápido, incluso se adoptan medidas antes de que acaben de estar definidos estándares, como ocurre con HTML5. La mayoría de webs de hoy día son compatibles con HTML4, un estándar presentado en 1997. Trece años después de eso Internet y las páginas web han cambiado radicalmente, con nuevo estándar o no.
Para cubrir ese hueco, los desarrolladores web han adoptado una variedad notable de tecnologías como el uso de Javascript desde el navegador, plugins de terceros como Flash, etc. Todos esos pasos dejan claro el paso de los navegadores como un mero sistema de muestra de documentos a una plataforma de aplicaciones web.
Ahora mismo el estándar HTML5, casi completo, está siendo implementado -en parte- en las últimas versiones de todos los navegadores Internet Explorer, Firefox, Safari, Chrome y Opera. Existen muchas aplicaciones Web que están disponibles en lenguaje HTML y cada día parece haber más. Sin embargo HTML5 trae consigo potenciales vulnerabilidades de seguridad -no quiere decir que tenga bugs o vulnerabilidades- sino que existen diversas líneas en las que podrían surgir vulnerabilidades. Algunas de ellas nacen de los elementos del estándar en sí y otras de las implementaciones en cada navegador.
De momento no se han observado ataques en HTML5, pero las áreas en las que probablemente lleguen de cara al futuro son las siguientes.
1. Cross-Document Messaging
HTML4 no permite a las páginas de un dominio pasar o acceder datos a páginas de otro dominio. Es decir, si una página carga desde dominio1.com y contiene código JavaScript que lee la posición del ratón después de un click, no puede pasar esos datos a una página hospedada en dominio2.com necesitando cargarla en otra ventana -popup-.
Esta medida previene que páginas maliciosas intercepten datos de una página legítima. HTML5 integra una API llamada postMessage que crea un framework para un script en un dominio que permite pasar datos a un script que corra en otro dominio. Para asegurara que las peticiones no son maliciosas, postMessage incluye propiedades objeto que el desarrollador puede usar para verificar el origen de la petición, asegurando que coincida con el dominio esperado.
Sin embargo HTML5 no hace obligatorio este chequeo, es decir depende del desarrollador web en sí, pudiendo dejar el scripts expuesto a peticiones maliciosas.
2. Almacenamiento Local
HTML5 permite almacenamiento offline, se puede acceder a una base de datos local SQL mediante JavaSript en una página web. Como otras características HTML5, es algo que ya existía mediante uso de plugins de terceros (Google Gears).
Ofrecer acceso al almacenamiento local puede acelerar notablemente las aplicaciones web, especialmente cuando necesitan un acceso a datos constante. Pero también presenta varias posibles vulnerabilidades que pueden ser explotadas.
3. Abuso de Atributos
La posibilidad de ofrecer nuevas etiquetas en HTML5 llega acompañada de la posibilidad de nuevos atributos, algunos de los cuales pueden resultar en un abuso claro. Una amenaza particular es utilizar atributos para lanzar ejecución automática de scripts.
Por ejemplo, el nuevo atributo HTML5 “autofocus” pasa automáticamente ha centrar el navegador en un elemento específico. Un sitio web malicioso podría aprovecharlo para evitar que el usuario maneje el navegador a su antojo, ofreciendo sólo acceso a una ventana con código malicioso. Otros atributos como “poster” y “srcdoc” permitirían que elementos ejecuten recursos externos lo que también podría llegar en forma de malware
4. Inline Multimedia y SVG
HTML5 es un estándar centrado en multimedia, en comparación con HTML4, hasta ahora se utiliza notablemente plugins de terceros como Flash para reproducir contenidos multimedia como MP3 y MP4 -audio y vídeo-.
Las nuevas etiquetas <audio>, <video> y <svg> pueden cargar nativamente en el navegador formatos populares y gráficos vectoriales sin necesidad de un plugin externo que consume recursos extra y en ocasiones causa inestabilidad en el navegador.
Este paso delega en los navegadores la implementación de la renderización de esos elementos que resulta en posibles bugs explotables como el uqe han documentado en Google Chrome en relación a la muestra de SVG debido a una violación de política cross-domain.
5. Validación de entrada
Administrar los dispositivos de entrada por parte del usuario dentro del navegador requiere tener cuidado, sobre todo cuando la entrada va a ser mostrada o renderizada. Usuarios malintencionados pueden explotar validaciones poco seguras para lanzar código malicioso en la propia web.
Los desarrolladores web tienen que confiar en el proceso en el lado de los servidores para implementar validación rigurosa, pero este método no ofrece una experiencia de usuario óptima, aunque la aplicación Ajax ha mejorado la situación. HTML5 ofrece la posibilidad de client-side input validation, lo que permitirá una serie de aplicaciones que trabajarán de manera más eficiente de cara al usuario.
Sin embargo definiciones de validación erróneas podrían hacer que los usuarios se saltasen los chequeos de validación, y si bien no es un problema específico de HTML5, sí que lo es de la nueva sintaxis de validadción de HTML5. Además los hackers podrían explotar client-side validation para la sintaxis regular expression (regex) pudiendo crear ataques Denial of Service (DoS), enviando el navegador a un bucle infinito.