
DOM-basierte Cross-Site-Scripting-Schwachstelle (XSS) in novel V3.5.0 (CWE-79)
novel (V3.5.0), eine auf Spring Boot 3 + Vue 3 basierende Romanleseplattform, weist eine DOM-basierte XSS-Schwachstelle in ihrem Buchkommentarmodul auf. Der Fehler liegt in einer unzureichenden Validierung/Kodierung der vom Benutzer übermittelten Kommentarinhalte: Backend: Das Feld commentContent (in der Entität/DTO BookComment) wird in der Datenbank gespeichert und über die API zurückgegeben, ohne schädlichen HTML/JS-Code zu filtern; Frontend: Die Plattform ruft unkodierte Kommentare ab, speichert sie in window.localStorage (Schlüssel: book_comment_{bookId}) und rendert die Daten direkt über Vue 3’s v-html in das DOM (ohne Bereinigung). Angreifer können bösartige Kommentare (nach dem Einloggen) einreichen, Benutzer dazu verleiten, betroffene Seiten aufzurufen, und Codeausführung auslösen, um Sitzungscookies zu stehlen, Identitäten zu übernehmen oder Seiteninhalte zu manipulieren.
Zielversion: novel V3.5.0 Umgebung: Chrome/Firefox, legitimes Benutzerkonto (Anmeldung erforderlich) Betroffene URL: Romandetailseite (http://117.72.165.13:8888/book/detail.html?id={bookId}) und Kommentarlistenseite (http://117.72.165.13:8888/book/comment-{bookId}.html)
Die Schwachstelle wird im Buchkommentarmodul ausgelöst (Kern-Geschäftslogik):
Backend: Das Feld commentContent in der Entität/DTO BookComment wird in der Datenbanktabelle book_comment gespeichert und über die Kommentarlisten-API (/api/book/comment/list?bookId={bookId}) zurückgegeben, ohne schädlichen HTML/JS-Code zu filtern.
Frontend: Die Seite ruft unkodierte Kommentarinhalte von der API ab, speichert sie in window.localStorage (Schlüssel: book_comment_{bookId}, z. B. book_comment_37 für Buch-ID 37) und rendert die Daten direkt über die v-html-Direktive von Vue 3 in das DOM (eingefügt in den <li class="dec">-Tag), ohne Bereinigung.
http://117.72.165.13:8888/book/1935650139770011648/1984484631582167040.html?switch=on&wvstest=<svg onload="alert('DOM-XSS-Test')">
(Die Seite speichert den Wert des Parameters wvstest in window.localStorage)
localStorage.setItem('book_comment_37', '');


Rufen Sie http://117.72.165.13:8888/user/login.html auf, melden Sie sich mit einem legitimen Konto an und navigieren Sie zur Romandetailseite.
Suchen Sie das Kommentar-Textfeld (id="txtComment") auf der Seite und geben Sie den bösartigen Payload ein (). Klicken Sie auf die Schaltfläche "Submit", um die Methode BookDetail.SaveComment(37, 0, payload) auszulösen (37 ist die bookId).
Aktualisieren Sie die Romandetailseite; das Frontend ruft /api/book/comment/list?bookId=37 auf, um den bösartigen Kommentar abzurufen, und speichert ihn in window.localStorage (Schlüssel: book_comment_37).
Beobachten Sie, dass auf der Seite ein Fenster mit dem Sitzungscookie des Benutzers angezeigt wird (bestätigt die Ausführung des bösartigen Codes).
Drücken Sie F12, um die Entwicklertools zu öffnen. Wechseln Sie zum Bereich 「Elements」 und suchen Sie im DOM nach (bestätigen Sie, dass der Payload in das<liclass="dec">tag eingefügt wurde).
