
Vulnerabilidade de Cross-Site Scripting (XSS) baseada em DOM no novel V3.5.0 (CWE-79)
novel (V3.5.0), uma plataforma de leitura de romances baseada em Spring Boot 3 + Vue 3, possui uma vulnerabilidade de XSS baseado em DOM no módulo de comentários de livros. A falha reside na validação/codificação inadequada do conteúdo de comentário enviado pelo usuário: Back-end: O campo commentContent (na entidade/DTO BookComment) é armazenado no banco de dados e retornado via API sem filtrar código HTML/JS malicioso; Front-end: A plataforma recupera comentários não codificados, armazena-os em window.localStorage (chave: book_comment_{bookId}) e renderiza os dados diretamente no DOM via v-html do Vue 3 (sem sanitização). Atacantes podem enviar comentários maliciosos (após fazer login), induzir usuários a acessar páginas afetadas e acionar a execução de código para roubar cookies de sessão, personificar identidades ou adulterar o conteúdo da página.
Versão alvo: novel V3.5.0 Ambiente: Chrome/Firefox, conta de usuário legítima (login necessário) URL Afetada: Página de detalhes do romance (http://117.72.165.13:8888/book/detail.html?id={bookId}) e página de lista de comentários (http://117.72.165.13:8888/book/comment-{bookId}.html)
A vulnerabilidade é ativada no módulo de comentários de livros (lógica de negócio principal):
Backend: O campo commentContent na entidade/DTO BookComment é armazenado na tabela do banco de dados book_comment e retornado via API de lista de comentários (/api/book/comment/list?bookId={bookId}) sem filtrar código HTML/JS malicioso.
Frontend: A página recupera o conteúdo do comentário não codificado da API, armazena-o em window.localStorage (chave: book_comment_{bookId}, por exemplo, book_comment_37 para o ID do livro 37), e renderiza os dados diretamente no DOM via diretiva v-html do Vue 3 (inserido na tag <li class="dec">) sem sanitização.
http://117.72.165.13:8888/book/1935650139770011648/1984484631582167040.html?switch=on&wvstest=<svg onload="alert('DOM-XSS-Test')">
(A página armazenará o valor do parâmetro wvstest em window.localStorage)
localStorage.setItem('book_comment_37', '');


Acesse http://117.72.165.13:8888/user/login.html, faça login com uma conta legítima e navegue até a página de detalhes do romance.
Localize a textarea de comentário (id="txtComment") na página, insira o payload malicioso (). Clique no botão "Enviar" para acionar o método BookDetail.SaveComment(37, 0, payload) (37 é o bookId).
Atualize a página de detalhes do romance; o front-end chama /api/book/comment/list?bookId=37 para recuperar o comentário malicioso e o armazena em window.localStorage (chave: book_comment_37).
Observe que a página exibe uma janela pop-up mostrando o cookie de sessão do usuário (confirma a execução de código malicioso).
Pressione F12 para abrir as Ferramentas do Desenvolvedor, vá até o painel 「Elements」, pesquise por na estrutura DOM (confirme que o payload foi inserido na tag <liclass="dec">).
