Un SVG en línea en HTML puede contener controladores de eventos y nodos de script SVG. Entonces, si puedo especificar una imagen SVG para que se cargue tu página y hacer que la inscribas en la página, puedo inyectar el script a través de esa imagen.
La especificación de HTML5
El elemento svg
del espacio de nombres SVG cae en las categorías de contenido incrustado, contenido de frases y contenido de flujo para los propósitos de los modelos de contenido en esta especificación.
...
La semántica de los elementos SVG está definida por la especificación SVG y otras especificaciones aplicables. [SVG]
Mario Heiderich explotó la confusión en Opera acerca de qué dominio SVG contenido debe ejecutar para crear un imagen que cuando se carga entre dominios, ataca varias capas y termina llamando a su teléfono.
Resumen
- Los SVG no son solo imágenes, sino mini aplicaciones
Las etiquetas - ahora pueden implementar Java, PDF y Flash, y te llaman
en Skype
- SVG en línea crea pequeñas islas XML que permiten los ataques XML en
Sitios web HTML
- SVG y XSLT también funcionan, habilitando DoS y otros ataques
- Seguridad web y seguridad XML, ¡se vuelven a encontrar!
- Y XXE está de vuelta, ¿recuerdas las advertencias de 2002?
- SVG no está recibiendo suficiente atención en la seguridad
comunidad
- SVG ofrece mucho espacio para más investigación de seguridad
En diapositivas anteriores, Mario analiza XSS específicamente y los problemas con la descarga de archivos SVG para ejecutarse localmente y notas
- Permitiendo SVG para subir == permitiendo HTML para subir
Es posible escribir políglotas: archivos que son válidos en varios idiomas, como un archivo que es una página HTML y una imagen JPEG GIF y un programa de JavaScript . Esa segunda página explica:
la imagen de arriba es un archivo GIF perfectamente válido, al igual que un programa javascript perfectamente válido (de hecho, ¡incluso es un programa de Caja válido!). Una etiqueta de imagen espera que su atributo src apunte al contenido que se analiza correctamente como una imagen, al igual que una etiqueta de script espera que su atributo src apunte a un archivo javascript. La etiqueta especifica un contexto en el que se espera el contenido de un tipo particular. Si la única información que un navegador utilizaba para representar contenido era el contexto creado por la etiqueta circundante, las cosas serían simples. Pero las cosas en el mundo del navegador nunca son simples. Cuando un servidor envía un archivo, también envía el tipo MIME de ese archivo en un encabezado de tipo de contenido. Todo está bien cuando el tipo de contenido que el servidor afirma es consistente con el contexto esperado en el que se usa ese contenido. ¿Qué sucede cuando el servidor no envía un tipo de contenido? ¿Qué sucede cuando se envía un archivo con un tipo de contenido cuando se espera un tipo diferente?
...
Los navegadores realizan un rastreo de contenido aparentemente en interés de la facilidad de uso, por lo que incluso los servidores mal configurados pueden continuar "trabajando". El problema aquí es que un navegador da diferentes tipos de contenido diferentes cantidades de acceso. Si puede engañar al navegador para que piense que un tipo de contenido es realmente otro, puede pasar por alto las restricciones impuestas al acceso al contenido real. Por ejemplo, una página HTML puede cargar imágenes externas, hojas de estilo y scripts. En este caso, el contexto de seguridad en el que se ejecutan estos recursos se deriva de la URL de la página en la que están incrustados. Por otra parte, si el tipo de contenido que se está cargando es Flash o Java, por ejemplo, el contexto de seguridad se deriva de La URL del propio applet. Si el navegador utiliza heurísticas y se confunde entre un objeto Flash y una imagen, ¡existen implicaciones reales para la seguridad! Este tipo de confusión fue la fuente del ataque GIFAR.