XSS no DOMPurify causado por serialização DOM e reparsing de HTML

Ambos os bugs apareceram quando uma aplicação passou uma árvore DOM criada pelo navegador para o DOMPurify e depois inseriu a string retornada com innerHTML. O DOMPurify inspecionou uma árvore, enquanto o navegador criou outra durante a segunda análise. Passar o mesmo payload como uma string HTML não funcionou porque a primeira análise o normalizou antes da sanitização.
• Elementos de texto bruto — O atacante criou um elemento xmp ou iframe através da API DOM e colocou </xmp><img ... onerror=...> dentro de seu texto. O DOMPurify viu o payload como texto. Após a serialização e inserção através de innerHTML, </xmp> fechou o elemento de texto e o img seguinte tornou-se marcação ativa. Esta rota exigia que a aplicação permitisse o elemento afetado através de ADD_TAGS.
• Incompatibilidade de maiúsculas/minúsculas em atributos — No DOMPurify 3.4.13, um nó analisado como XML podia preservar o atributo em maiúsculas ONERROR. O DOMPurify reconheceu-o como perigoso após normalizar o nome, mas a etapa de remoção não correspondeu ao atributo com maiúsculas preservadas. Ele permaneceu na saída, e a análise HTML posterior transformou-o em um manipulador de eventos. Esta rota não exigia opções personalizadas do sanitizador, embora o nó tivesse que vir de XML, XHTML ou outro analisador que preserva maiúsculas/minúsculas.
Os pesquisadores reproduziram ambos os bugs no Chromium, Firefox e WebKit. O DOMPurify 3.4.14 estendeu a verificação de texto bruto além de style e alterou a remoção de atributos para atingir o nó Attr exato. Os mantenedores classificaram as mudanças como endurecimento e não publicaram um aviso de segurança.
Produto
Chromium
Dompurify
Firefox
Webkit