vulnérabilité de sécurité ![]()
TL;DR l’installation de ce plugin divulguera - même lorsqu’il est désactivé - tous les champs personnalisés de sujet présents à toute personne pouvant accéder au sujet, y compris les utilisateurs anonymes. Selon les autres plugins que vous avez installés, les champs personnalisés de sujet peuvent contenir des données sensibles.
Lors de l’évaluation de ce plugin pour un client, nous avons découvert un certain nombre de problèmes de sécurité. Nous avons corrigé ces problèmes dans notre fork (https://github.com/communiteq/discourse-topic-trade-buttons/tree/master) et avons soumis une pull request. Cependant, l’auteur du sujet n’a pas répondu à notre pull request ni à notre message privé, nous divulguons donc maintenant ces problèmes.
Correction de sécurité : fuite d’informations
Tous les champs personnalisés (y compris ceux d’autres plugins !) sont sérialisés, y compris pour les utilisateurs anonymes. Les champs personnalisés peuvent contenir des données sensibles et ne devraient jamais être sérialisés de cette manière.
Étant donné que les valeurs sold_at, etc. sont définies côté serveur de toute façon et que les boutons sont “calculés” sur topic.archived, la logique des champs personnalisés peut être supprimée du code côté frontend destiné aux utilisateurs et les champs personnalisés n’ont besoin d’être sérialisés que pour l’interface d’administration afin de fonctionner - la sérialisation peut donc être limitée aux utilisateurs administrateurs. Nous soupçonnons que cela n’est même pas nécessaire.
Corrections d’initialisation
La vérification if SiteSetting.topic_trade_buttons_enabled qui encadre la logique de sérialisation rend nécessaire le redémarrage de Discourse après l’activation ou la désactivation du plugin. Cette vérification est inutile puisque Discourse s’en charge déjà.
L’utilisation de respect_plugin_enabled: false est inutile et aggrave le problème de sécurité décrit ci-dessus.