
Vulnerabilidad de Cross-Site Scripting (XSS) basado en DOM en novel V3.5.0 (CWE-79)
novel (V3.5.0), una plataforma de lectura de novelas basada en Spring Boot 3 + Vue 3, tiene una vulnerabilidad de XSS basado en DOM en su módulo de comentarios de libros. La falla radica en una validación/codificación inadecuada del contenido de los comentarios enviados por los usuarios: Back-end: el campo commentContent (en la entidad/DTO BookComment) se almacena en la base de datos y se devuelve a través de la API sin filtrar código HTML/JS malicioso; Front-end: la plataforma recupera los comentarios sin codificar, los almacena en window.localStorage (clave: book_comment_{bookId}) y renderiza los datos directamente en el DOM mediante v-html de Vue 3 (sin saneamiento). Los atacantes pueden enviar comentarios maliciosos (después de iniciar sesión), inducir a los usuarios a acceder a páginas afectadas y provocar la ejecución de código para robar cookies de sesión, suplantar identidades o alterar el contenido de la página.
Versión objetivo: novel V3.5.0 Entorno: Chrome/Firefox, cuenta de usuario legítima (requiere inicio de sesión) URL afectada: Página de detalle de la novela (http://117.72.165.13:8888/book/detail.html?id={bookId}) y página de lista de comentarios (http://117.72.165.13:8888/book/comment-{bookId}.html)
La vulnerabilidad se activa en el módulo de comentarios de libros (lógica de negocio principal):
Backend: el campo commentContent de la entidad/DTO BookComment se almacena en la tabla de la base de datos book_comment y se devuelve a través de la API de lista de comentarios (/api/book/comment/list?bookId={bookId}) sin filtrar código HTML/JS malicioso.
Frontend: la página recupera el contenido de los comentarios sin codificar desde la API, lo almacena en window.localStorage (clave: book_comment_{bookId}, por ejemplo, book_comment_37 para el ID de libro 37) y renderiza los datos directamente en el DOM mediante la directiva v-html de Vue 3 (insertados en la etiqueta <li class="dec">) sin saneamiento.
http://117.72.165.13:8888/book/1935650139770011648/1984484631582167040.html?switch=on&wvstest=<svg onload="alert('DOM-XSS-Test')">
(La página almacenará el valor del parámetro wvstest en window.localStorage)
localStorage.setItem('book_comment_37', '');
Acceda a http://117.72.165.13:8888/user/login.html, inicie sesión con una cuenta legítima y navegue hasta la página de detalle de la novela.
Localice el área de texto del comentario (id="txtComment") en la página e ingrese el payload malicioso (). Haga clic en el botón «Submit» para activar el método BookDetail.SaveComment(37, 0, payload) (37 es el bookId).
Actualice la página de detalle de la novela; el front-end llama a /api/book/comment/list?bookId=37 para recuperar el comentario malicioso y lo almacena en window.localStorage (clave: book_comment_37).
Observe que la página muestra una ventana emergente con la cookie de sesión del usuario (confirma la ejecución de código malicioso).
Presione F12 para abrir las Herramientas de desarrollo, cambie al panel 「Elements」, busque en la estructura del DOM (confirme que el payload se inserta en<liclass="dec">tag).
