SiYuan vulnerável a XSS refletido via bypass do prefixo de namespace SVG em SanitizeSVG (getDynamicIcon, não autenticado)
Plataforma
go
Componente
github.com/siyuan-note/siyuan/kernel
Corrigido em
0.0.0-20260330031106-f09953afc57a
### Sumário A função `SanitizeSVG` introduzida na v3.6.0 para corrigir XSS no endpoint não autenticado `/api/icon/getDynamicIcon` pode ser ignorada usando nomes de elementos com prefixo de namespace como `<x:script xmlns:x="http://www.w3.org/2000/svg">`. O analisador Go HTML5 registra a tag do elemento como `"x:script"` em vez de `"script"`, então a verificação da tag a aprova. O SVG é servido com `Content-Type: image/svg+xml` e sem Política de Segurança de Conteúdo (Content Security Policy); quando um navegador abre a resposta diretamente, seu analisador XML resolve o prefixo para o namespace SVG e executa o script incorporado. ### Detalhes A rota `getDynamicIcon` é registrada sem autenticação: ```go // kernel/server/serve.go ginServer.Handle("GET", "/api/icon/getDynamicIcon", getDynamicIcon) ``` Para o tipo 8, o parâmetro de consulta `content` é inserido diretamente em um elemento SVG `<text>` usando `fmt.Sprintf` sem codificação HTML: ```go // kernel/api/icon.go:579-584 return fmt.Sprintf(` <svg id="dynamic_icon_type8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="..."/> <text x="50%%" y="55%%" ...>%s</text> </svg>`, ..., content) ``` `SanitizeSVG` então analisa o SVG com "
Como corrigir
Nenhum patch oficial disponível. Procure alternativas ou monitore atualizações.
Monitore suas dependências automaticamente
Receba alertas quando novas vulnerabilidades afetarem seus projetos.
Começar grátis