Introducci贸n
En este post quer铆a hacer referencia a mi quinto CVE que me han otorgado por parte de INCIBE. En concreto, se trata de una vulnerabilidad XSS Stored via SVG en la empresa espa帽ola Koibox, una empresa centrada en gesti贸n para centros de belleza. Esta vulnerabilidad se llev贸 a cabo en al 谩rea de tareas, en abrir un nuevo ticket se pod铆a a帽adir un adjunto y pude subir al servidor un SVG malicioso que conten铆a c贸digo JavaScript. A la hora de subir el adjunto se mantuvo almacenado en el servidor puedo realizar acciones malintencionadas por parte de un tercero
Explotaci贸n
La informaci贸n del CVE es la siguiente:
饾悡饾悽饾惄饾惃 饾悵饾悶 饾惎饾惍饾惀饾惂饾悶饾惈饾悮饾悰饾悽饾惀饾悽饾悵饾悮饾悵: XSS Stored.
饾悡饾悽饾惄饾惉: Indico algunos consejos para detectar este tipo de vulnerabilidad por si a alg煤n profesional le resulta 煤til:
1) Usa herramientas como Burp Suite para modificar el Content-Type
a image/svg+xml
y ver si es aceptado por el backend.


Mitigaci贸n
Para mitigar un XSS Stored via SVG, una t茅cnica maliciosa en la que se enga帽a a los usuarios para que hagan clic en elementos web sin saberlo, puedes aplicar las siguientes medidas:
1. No permitir la subida de SVGs
La forma m谩s segura de prevenir XSS v铆a SVG es simplemente no permitir que los usuarios suban archivos SVG. Si no son indispensables, bloqu茅alos completamente.
2. Sanitizar los SVGs subidos
Si necesitas aceptar SVGs, aseg煤rate de limpiarlos eliminando cualquier c贸digo potencialmente malicioso:
- Elimina etiquetas como
<script>
,<iframe>
,<object>
,<foreignObject>
. - Quita atributos peligrosos como
onload
,onclick
,xlink:href
,style
, o cualquier enlacejavascript:
. - Utiliza librer铆as de sanitizaci贸n apropiadas para tu lenguaje, como DOMPurify (JavaScript), Bleach (Python) o HTMLPurifier (PHP).
3. Servir los SVGs como archivos est谩ticos
No incrustes SVGs directamente en el HTML. En su lugar:
- Guarda los archivos SVG en un servidor o CDN.
- Sirve los SVGs con el tipo de contenido correcto (
image/svg+xml
) y, si es posible, como descarga (Content-Disposition: attachment
). - Considera convertir los SVGs a PNG o JPG para evitar cualquier riesgo.
4. Aplicar una Content Security Policy (CSP) estricta
Implementa una pol铆tica CSP que bloquee la ejecuci贸n de scripts y objetos externos. Un ejemplo:
csharpCopiarEditardefault-src 'self'; script-src 'none'; object-src 'none'; base-uri 'none';
Esto ayuda a prevenir que el navegador ejecute c贸digo malicioso incluso si el SVG se carga.
5. Validar el tipo MIME y la extensi贸n
No conf铆es solo en la extensi贸n del archivo. Verifica que el tipo MIME real del archivo subido sea image/svg+xml
, y aseg煤rate de que no sea un SVG camuflado como .png
o .jpg
.
6. Renderizar los SVGs de forma segura
Nunca insertes el contenido del SVG directamente en el DOM usando innerHTML
o similar. Usa etiquetas de imagen (<img>
) para mostrar el SVG como una imagen, evitando as铆 la ejecuci贸n de scripts incrustados.
Estas medidas pueden usarse en conjunto para garantizar una protecci贸n completa contra ataques de clickjacking.

Links: