FlawOpen

flawopen.com/XSS/Upload de SVG

Upload de SVG pode causar XSS?

Página de referência
Resposta curta

Um SVG enviado é um documento, não apenas pixels: pode conter elementos ativos, como scripts e manipuladores de eventos. A execução depende de como o navegador recebe o arquivo. SVG em <img> fica em um contexto de imagem restrito; SVG inline, navegação direta ou incorporação como documento podem ser ativos.

O que diferencia SVG de outros formatos de imagem

Diferentemente de PNG ou JPEG, SVG é XML e pode conter conteúdo ativo. Navegadores desativam scripts em contextos restritos de imagem, como <img>, mas essa restrição não se aplica quando o SVG é aberto diretamente, incorporado como documento via <object>, <iframe> ou <embed>, nem quando sua marcação é inserida inline. Uma imagem de perfil enviada pode virar stored XSS se a aplicação a servir em contexto ativo na origem da aplicação. O comportamento depende do contexto; extensão e MIME não são sanitização.

Como proteger uploads

Perguntas frequentes

Validar a extensão ou o MIME do arquivo resolve?

['Validar extensão ou MIME do arquivo resolve o problema?', 'Não. Extensão e MIME declarado são metadados, não análise do conteúdo ativo do documento. Verifique o formato real e depois use uma allowlist de sanitização compatível com SVG ou converta para raster se os recursos SVG não forem necessários.']

Referências

Veja também Cross-Site Scripting (XSS, CWE-79): como funciona e como evitar em todas as linguagens — flawopen.com Risco de XSS no Vue v-html WKWebView: HTML não confiável é seguro? XSS refletido, armazenado e baseado em DOM: quais são as diferenças? Riscos de segurança do addJavascriptInterface no Android Proteção XSS do Angular: padrões seguros e APIs de bypass XSS por MIME sniffing: Content-Type e nosniff