FlawOpen

flawopen.com/XSS/Carga de SVG

¿La carga de SVG implica riesgo de XSS?

Página de referencia
Respuesta breve

Un SVG subido es un documento, no solo píxeles: puede incluir contenido activo como scripts y manejadores de eventos. La ejecución depende de cómo lo recibe el navegador. En <img> se usa un contexto de imagen restringido; SVG inline, navegación directa o incrustación como documento pueden ser activos.

Qué diferencia SVG de otros formatos de imagen

A diferencia de PNG o JPEG, SVG es XML y puede contener contenido activo. Los navegadores desactivan los scripts en contextos de imagen restringidos como <img>, pero no cuando el SVG se abre directamente, se incrusta como documento mediante <object>, <iframe> o <embed>, o se inserta inline. Una imagen de perfil subida puede convertirse en stored XSS si la aplicación la sirve en un contexto activo bajo su propio origen. El comportamiento depende del contexto; la extensión y el MIME no sanea el contenido.

Cómo proteger las cargas

Preguntas frecuentes

¿Validar la extensión o el MIME del archivo lo soluciona?

['¿Validar la extensión o el MIME del archivo lo soluciona?', 'No. La extensión y el MIME declarado son metadatos, no validan el contenido activo del documento. Comprueba el formato real y luego aplica una lista de saneamiento específica para SVG o conviértelo a raster si no necesitas funciones SVG.']

Referencias

Véase también Cross-Site Scripting (XSS, CWE-79): cómo funciona y cómo evitarlo en cada lenguaje — flawopen.com Riesgo de XSS con Vue v-html WKWebView: ¿HTML no confiable seguro? XSS reflejado, almacenado y basado en DOM: ¿en qué se diferencian? Riesgos de seguridad de addJavascriptInterface en Android Protección XSS de Angular: valores seguros y APIs de omisión XSS por MIME sniffing: Content-Type y nosniff