
Vulnérabilité de type Cross-Site Scripting (XSS) basé sur le DOM dans novel V3.5.0 (CWE-79)
novel (V3.5.0), une plateforme de lecture de romans basée sur Spring Boot 3 + Vue 3, présente une vulnérabilité de type XSS basé sur le DOM dans son module de commentaires de livres. Le défaut réside dans une validation/encodage inadéquat du contenu des commentaires soumis par les utilisateurs : Backend : le champ commentContent (dans l’entité/DTO BookComment) est stocké dans la base de données et renvoyé via l’API sans filtrage des codes HTML/JS malveillants ; Frontend : la plateforme récupère des commentaires non encodés, les stocke dans window.localStorage (clé : book_comment_{bookId}), puis rend les données directement dans le DOM via la directive v-html de Vue 3 (sans assainissement). Les attaquants peuvent soumettre des commentaires malveillants (après connexion), inciter les utilisateurs à accéder aux pages concernées et déclencher l’exécution de code afin de voler les cookies de session, d’usurper des identités ou de modifier le contenu de la page.
La vulnérabilité est déclenchée dans le module de commentaires de livres (logique métier principale) :
Backend : le champ commentContent de l’entité/DTO BookComment est stocké dans la table book_comment et renvoyé via l’API de liste des commentaires (/api/book/comment/list?bookId={bookId}) sans filtrage des codes HTML/JS malveillants.
Frontend : la page récupère le contenu des commentaires non encodé depuis l’API, le stocke dans window.localStorage (clé : book_comment_{bookId}, par exemple book_comment_37 pour le livre ID 37), puis rend les données directement dans le DOM via la directive v-html de Vue 3 (insérées dans la balise <li class="dec">) sans assainissement.
http://117.72.165.13:8888/book/1935650139770011648/1984484631582167040.html?switch=on&wvstest=<svg onload="alert('DOM-XSS-Test')">
(La page stockera la valeur du paramètre wvstest dans window.localStorage)
localStorage.setItem('book_comment_37', '');


Accédez à http://117.72.165.13:8888/user/login.html, connectez-vous avec un compte légitime, puis accédez à la page de détail du roman.
Localisez la zone de texte de commentaire (id="txtComment") sur la page, saisissez la charge utile malveillante (). Cliquez sur le bouton « Soumettre » pour déclencher la méthode BookDetail.SaveComment(37, 0, payload) (37 est le bookId).
Actualisez la page de détail du roman ; le frontend appelle /api/book/comment/list?bookId=37 pour récupérer le commentaire malveillant et le stocke dans window.localStorage (clé : book_comment_37).
Observez que la page affiche une fenêtre contextuelle présentant le cookie de session de l’utilisateur (confirmation de l’exécution du code malveillant).
Appuyez sur F12 pour ouvrir les outils de développement, passez au panneau « Elements », recherchez dans la structure DOM (confirmez que la charge utile est insérée dans la balise <liclass="dec">).
