
DOM-based Cross-Site Scripting (XSS) Vulnerability in novel V3.5.0 (CWE-79)
novel (V3.5.0), जो Spring Boot 3 + Vue 3 पर आधारित एक उपन्यास पढ़ने का प्लेटफॉर्म है, में इसके पुस्तक टिप्पणी मॉड्यूल में DOM-आधारित XSS भेद्यता है। दोष उपयोगकर्ता द्वारा प्रस्तुत टिप्पणी सामग्री के अपर्याप्त सत्यापन/एन्कोडिंग में है: बैकएंड: commentContent फ़ील्ड (BookComment entity/DTO में) डेटाबेस में संग्रहीत होती है और API के माध्यम से दुर्भावनापूर्ण HTML/JS कोड को फ़िल्टर किए बिना वापस कर दी जाती है; फ्रंटएंड: प्लेटफॉर्म अनएन्कोडेड टिप्पणियाँ प्राप्त करता है, उन्हें window.localStorage (कुंजी: book_comment_{bookId}) में संग्रहीत करता है, और डेटा को सीधे Vue 3 के v-html (बिना सैनिटाइज़ेशन) के माध्यम से DOM में प्रस्तुत करता है। हमलावर दुर्भावनापूर्ण टिप्पणियाँ सबमिट कर सकते हैं (लॉग इन करने के बाद), उपयोगकर्ताओं को प्रभावित पृष्ठों तक पहुँचने के लिए प्रेरित कर सकते हैं, और सत्र कुकीज़ चुराने, पहचान का प्रतिरूपण करने, या पृष्ठ सामग्री में छेड़छाड़ करने के लिए कोड निष्पादन ट्रिगर कर सकते हैं।
लक्ष्य संस्करण: novel V3.5.0 पर्यावरण: Chrome/Firefox, वैध उपयोगकर्ता खाता (लॉगिन आवश्यक) प्रभावित URL: उपन्यास विवरण पृष्ठ (http://117.72.165.13:8888/book/detail.html?id={bookId}) और टिप्पणी सूची पृष्ठ (http://117.72.165.13:8888/book/comment-{bookId}.html)
भेद्यता पुस्तक टिप्पणी मॉड्यूल (मुख्य व्यावसायिक तर्क) में ट्रिगर होती है:
बैकएंड: BookComment entity/DTO में commentContent फ़ील्ड book_comment डेटाबेस तालिका में संग्रहीत होती है और टिप्पणी सूची API (/api/book/comment/list?bookId={bookId}) के माध्यम से दुर्भावनापूर्ण HTML/JS कोड को फ़िल्टर किए बिना वापस कर दी जाती है।
फ्रंटएंड: पृष्ठ API से अनएन्कोडेड टिप्पणी सामग्री प्राप्त करता है, इसे window.localStorage (कुंजी: book_comment_{bookId}, उदा., पुस्तक ID 37 के लिए book_comment_37) में संग्रहीत करता है, और डेटा को सीधे Vue 3 के v-html निर्देश ( <li class="dec"> टैग में डाला गया) के माध्यम से DOM में प्रस्तुत करता है, बिना सैनिटाइज़ेशन के।
http://117.72.165.13:8888/book/1935650139770011648/1984484631582167040.html?switch=on&wvstest=<svg onload="alert('DOM-XSS-Test')">
(पृष्ठ wvstest पैरामीटर के मान को window.localStorage में संग्रहीत करेगा)
localStorage.setItem('book_comment_37', '');
http://117.72.165.13:8888/user/login.html तक पहुँचें, एक वैध खाते से लॉगिन करें, और उपन्यास विवरण पृष्ठ पर नेविगेट करें।
पृष्ठ पर टिप्पणी टेक्स्टएरिया (id="txtComment") का पता लगाएँ, दुर्भावनापूर्ण पेलोड () इनपुट करें। "Submit" बटन पर क्लिक करें ताकि BookDetail.SaveComment(37, 0, payload) विधि ट्रिगर हो (37 bookId है)।
उपन्यास विवरण पृष्ठ को रिफ्रेश करें; फ्रंटएंड /api/book/comment/list?bookId=37 को कॉल करके दुर्भावनापूर्ण टिप्पणी प्राप्त करता है, और इसे window.localStorage (कुंजी: book_comment_37) में संग्रहीत करता है।
पृष्ठ पर एक पॉप-अप विंडो दिखाई देती है जिसमें उपयोगकर्ता का सत्र कुकी प्रदर्शित होता है (दुर्भावनापूर्ण कोड निष्पादन की पुष्टि)।
F12 दबाकर डेवलपर टूल खोलें, "Elements" पैनल पर स्विच करें, DOM संरचना में खोजें (पुष्टि करें कि पेलोड <li class="dec"> टैग में डाला गया है)।
