
Prova de conceito de Stored XSS para a seção de notas do OpenKM, demonstrando um bypass das regras de sanitização usando javascript:, com pontuação CVSS 3.1 e orientação de remediação.
XSS armazenado em Notas
Um XSS armazenado foi encontrado na seção de notas do aplicativo durante um teste de penetração em um cliente que estava usando o OpenKM. Basicamente, ao armazenar notas, de alguma forma o HTML normal era permitido e renderizado como estava. Como você sabe, tags <script> e eventos javascript on-* estavam sendo sanitizados/substituídos como parte do conjunto de regras de sanitização de XSS.
No entanto, descobrimos que usar "javascript:" em uma tag <a> contornava essa regra de sanitização/substituição.
Para reproduzir o problema, você pode enviar a seguinte carga útil na seção de notas.
<a href='javascript:alert(1)'>Click here for more info</a>
Para acionar a carga útil, um usuário precisará ser enganado para clicar nela.
Em termos de impacto: Um usuário de baixo nível pode enviar cargas úteis maliciosas de JavaScript para registrar teclas pressionadas, redirecionar usuários para sites maliciosos ou enviar dados no contexto da vítima, que são acionados quando a vítima clica no link.
Áreas afetadas no aplicativo: Todas as seções de notas.
Versões afetadas: OpenKM Community Edition 6.3.11
CVSS 3.1: CVSS:3.0/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N (Medium 5.4)
Recomendação: Melhorar a sanitização, talvez, substituindo completamente a palavra-chave 'javascript'. Ou apenas adicionar uma regra extra para substituir 'javascript:'
Referências: Correção: https://github.com/openkm/document-management-system/pull/336 CVE: NIST: