
Cross-Site Scripting armazenado no "usememos" via SVG
É bastante simples: XSS armazenado via SVG é uma forma muito comum de encontrar Cross-Site Scripting na natureza, então foi uma das primeiras coisas que fiz.
Implantei o usememos via Pikapods, onde então naveguei até a página inicial e criei uma conta. Com a conta, criei um ’pensamento':
Em seguida, criei um arquivo SVG contendo o seguinte 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 executa JavaScript, resultando na impressão do ‘document.domain’ (então apenas mostra ‘*.pikapod.net’). Selecionei o arquivo, neste caso chamado xss6.svg, e então pude ‘copiar endereço da imagem’:
Como você notou, o XSS não executa dentro da página principal, infelizmente. Tentei algumas manobras para fazê-lo funcionar, mas sem sucesso. Então, inserir o URL copiado resulta em um pop-up de XSS – revelando o URL:
Para mais informações sobre esta vulnerabilidade, veja meu post no blog em: https://tiem.io/cves/cve-2025-50738-stored-xss-via-svg/