Mozilla Firefox no
protege adecuadamente de ataques XSS en el código JavaScript privilegiado usado
internamente por el navegador, principalmente en su propia interfaz gráfica
Así es, hay código
JavaScript privilegiado corriendo en los navegadores modernos. Tanto Google
Chrome como Mozilla Firefox usan JavaScript en la programación de sus
interfaces de usuario. Por privilegiado nos referimos a código que tiene acceso
a las páginas abiertas en el navegador, el sistema de archivos... Hay distintos
contextos de ejecución dentro del código privilegiado (algunos más restringidos
que otros), siendo uno de los más interesantes por permitir introducir código
externo es el de las extensiones del navegador.
En este caso, nos
encontramos con una vulnerabilidad de Mozilla Firefox por no restringir la
introducción de código JavaScript embebido en los documentos web que corren código
privilegiado. Específicamente, el llamado 'chrome code', que no es más que
código JavaScript especialmente privilegiado usado en la interfaz gráfica de
Firefox (en la barra de estado, los menús... A toda esta parte se le llama
Chrome).
Separación entre
contexto de ejecución JavaScript privilegiado (Chrome, interfaz gráfica de
Firefox) y no privilegiado (content, donde acostumbramos a que se ejecute
JavaScript). Extraído de developer.mozilla.org.
Tras analizar
superficialmente la vulnerabilidad, no está claro de qué forma sería explotable
(sólo si la interfaz gráfica ya tiene una vulnerabilidad XSS). Los de Cisco
afirman que basta con convencer a un usuario para que abra un link o un archivo
especialmente diseñado. La descripción de la vulnerabilidad es especialmente
vaga en cuanto a los términos de su explotación... Tras contactar con el
investigador original de la vulnerabilidad, Johann Hofmann, éste nos confirma
que la descripción es intencionalmente vaga, debido a que algunos usuarios
tardan en actualizar. Dicho esto y viendo que los de Mozilla evalúan como
crítica la vulnerabilidad , podemos imaginar que los de Cisco quizás no se
equivoquen...
El parche a esta
vulnerabilidad no se ha hecho esperar, y ya en la versión 58.0.1 está corregido
el fallo. Según sus declaraciones, lo ideal sería usar CSP (políticas de
seguridad respecto al contenido de los documentos web, configurables) en una de
sus configuraciones más estrictas, para evitar JavaScript embebido en los
documentos web que corren 'chrome code'. Pero por desgracia, tienen bastante de
ésto en el código fuente de Firefox, y no es plausible a corto plazo. Así que
se conforman con sanear la creación de nuevas etiquetas HTML para que no
contengan JavaScript embebido.
Es posible que todo
esto te haya sonado a chino, y no es de extrañar. Un navegador web modernos es
de las piezas más complejas en cuanto a ingeniería de software. Y lo tienes
gratis, al alcance de tus dedos :)
Más información:
·
Arbitrary
code execution through unsanitized browser UI https://www.mozilla.org/en-US/security/advisories/mfsa2018-05/
·
An
overview of the script security architecture in Gecko https://developer.mozilla.org/en-US/docs/Mozilla/Gecko/Script_security
·
MDN
web docs: Add-ons https://developer.mozilla.org/en-US/Add-ons
·
Chrome
extensions: Overview https://developer.chrome.com/extensions/overview
Fuente: Hispasec