vulnerabilidade de segurança ![]()
Resumo: instalar este plugin vazará - mesmo quando desativado - todos os campos personalizados de tópicos presentes para qualquer pessoa que possa acessar o tópico, incluindo usuários anônimos. Dependendo de outros plugins que você instalou, os campos personalizados de tópicos podem conter dados sensíveis.
Ao avaliar este plugin para um cliente, descobrimos uma série de problemas de segurança. Corrigimos esses problemas em nosso fork (https://github.com/communiteq/discourse-topic-trade-buttons/tree/master) e fizemos um pull request. No entanto, o autor do tópico não respondeu ao nosso pull request nem à nossa mensagem privada, então agora estamos divulgando esses problemas.
Correção de segurança: vazamento de informações
Todos os campos personalizados (incluindo os de outros plugins!) estão sendo serializados, inclusive para usuários anônimos. Campos personalizados podem conter dados sensíveis e nunca devem ser serializados dessa forma.
Como os valores sold_at etc. estão sendo definidos no lado do servidor de qualquer maneira e os botões são “calculados” em topic.archived, a lógica dos campos personalizados pode ser removida do código voltado para o usuário no frontend e os campos personalizados só precisam ser serializados para que a interface de administração funcione - portanto, a serialização pode ser limitada a usuários administradores. Suspeitamos que isso nem seja necessário.
Correções de inicialização
A verificação if SiteSetting.topic_trade_buttons_enabled que está protegendo a lógica de serialização torna necessário reiniciar o Discourse após habilitar ou desabilitar o plugin. Essa verificação é desnecessária, pois o Discourse já cuida disso.
Usar respect_plugin_enabled: false é desnecessário e agrava o problema de segurança descrito acima.