
Cross-Site Scripting Almacenado en "usememos" mediante SVG
Es bastante sencillo: un XSS almacenado mediante SVG es una forma muy común de encontrar Cross-Site Scripting en la naturaleza, así que fue una de las primeras cosas que hice.
Desplegué usememos a través de Pikapods, donde luego navegué a la página principal y creé una cuenta. Con la cuenta, creé un 'pensamiento':
Luego creé un archivo SVG que contenía el siguiente payload:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
</svg>
Este payload ejecuta JavaScript, lo que da como resultado la impresión de 'document.domain' (por lo que solo muestra '*.pikapod.net'). Seleccioné el archivo, en este caso se llamaba xss6.svg y pude 'copiar dirección de la imagen':
Como notarás, el XSS no se ejecuta dentro de la página principal, lamentablemente. Intenté algunas maniobras para que funcionara, pero sin éxito. Así que ingresar la URL copiada da como resultado una ventana emergente de XSS, que revela la URL:
Para obtener más información sobre esta vulnerabilidad, consulta mi publicación en el blog: https://tiem.io/cves/cve-2025-50738-stored-xss-via-svg/