
Vulnerabilità Cross-Site Scripting (XSS) basata su DOM in novel V3.5.0 (CWE-79)
novel (V3.5.0), una piattaforma di lettura di romanzi basata su Spring Boot 3 + Vue 3, presenta una vulnerabilità XSS basata su DOM nel modulo dei commenti dei libri. Il difetto risiede nella validazione/codifica inadeguata del contenuto dei commenti inviati dagli utenti: Back-end: il campo commentContent (nell'entità/DTO BookComment) viene archiviato nel database e restituito tramite API senza filtrare codice HTML/JS dannoso; Front-end: la piattaforma recupera i commenti non codificati, li archivia in window.localStorage (chiave: book_comment_{bookId}) e renderizza i dati direttamente nel DOM tramite v-html di Vue 3 (senza sanificazione). Gli attaccanti possono inviare commenti dannosi (dopo l'accesso), indurre gli utenti a visitare le pagine interessate e attivare l'esecuzione di codice per rubare i cookie di sessione, impersonare identità o alterare il contenuto della pagina.
Versione del target: novel V3.5.0 Ambiente: Chrome/Firefox, account utente legittimo (accesso richiesto) URL interessati: pagina dei dettagli del romanzo (http://117.72.165.13:8888/book/detail.html?id={bookId}) e pagina dell'elenco commenti (http://117.72.165.13:8888/book/comment-{bookId}.html)
La vulnerabilità viene attivata nel modulo dei commenti dei libri (logica di business principale):
Backend: il campo commentContent nell'entità/DTO BookComment viene archiviato nella tabella del database book_comment e restituito tramite l'API dell'elenco commenti (/api/book/comment/list?bookId={bookId}) senza filtrare codice HTML/JS dannoso.
Frontend: la pagina recupera il contenuto dei commenti non codificato dall'API, lo archivia in window.localStorage (chiave: book_comment_{bookId}, ad esempio book_comment_37 per l'ID libro 37) e renderizza i dati direttamente nel DOM tramite la direttiva v-html di Vue 3 (inserita nel tag <li class="dec">) senza sanificazione.
http://117.72.165.13:8888/book/1935650139770011648/1984484631582167040.html?switch=on&wvstest=<svg onload="alert('DOM-XSS-Test')">
(La pagina archivia il valore del parametro wvstest in window.localStorage)
localStorage.setItem('book_comment_37', '');
Accedere a http://117.72.165.13:8888/user/login.html, effettuare l'accesso con un account legittimo e navigare fino alla pagina dei dettagli del romanzo.
Individuare la textarea dei commenti (id="txtComment") nella pagina, inserire il payload dannoso (). Fare clic sul pulsante "Submit" per attivare il metodo BookDetail.SaveComment(37, 0, payload) (37 è il bookId).
Aggiornare la pagina dei dettagli del romanzo; il front-end chiama /api/book/comment/list?bookId=37 per recuperare il commento dannoso e lo archivia in window.localStorage (chiave: book_comment_37).
Osservare la pagina che apre una finestra con il cookie di sessione dell'utente (conferma dell'esecuzione di codice dannoso).
Premere F12 per aprire gli Strumenti di sviluppo, passare al pannello 「Elements」, cercare nella struttura DOM (confermare che il payload sia inserito in<liclass="dec">tag).
