Skip to main content

Xxyopen Novel CVE-2026-110104

| EUVDEUVD-2026-98937 HIGH
Use of Password Hash With Insufficient Computational Effort (CWE-916)
2026-10-13 disclosure@vulncheck.com GHSA-25gx-36j3-jw66
8.2
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain database dump via leak or backup
  2. Delivery
    Extract unsalted MD5 digests from user_info.password
  3. Exploit
    Crack hashes with rainbow tables or GPU brute force
  4. Execution
    Recover plaintext passwords
  5. Impact
    Reuse credentials for account takeover and credential stuffing

Vulnerability Assessment

Weakness
CWE
Exploitation Conditions

Exploitation requires the attacker to FIRST obtain the contents of the user_info.password column - through a database leak, SQL injection, stolen/exposed backup, or insider access - since the MD5 digests are stored server-side and not exposed by any application feature. Once the column is obtained, the limiting factor is only password strength: unsalted MD5 digests are trivially cracked for weak/common passwords via rainbow tables and resist cracking only for high-entropy passwords. This affects Xxyopen novel (github.com/201206030/novel) through version 3.5.0; instances already migrated to the BCrypt fix, or whose users have all re-logged-in (triggering the opportunistic BCrypt upgrade in the patched login path), are no longer affected. The vulnerability is not remotely triggerable on its own - it is a confidentiality-amplifier conditioned on a separate data-exposure event.

Impact

This is a CWE-916 weak-password-storage flaw (unsalted MD5 in user_info.password) rather than a directly exploitable network vulnerability, and the signals should be read with that in mind. The input CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:H) scores 8.2, but the critical nuance is AT:P - an 'attack requirement' is present, meaning exploitation is NOT self-contained over the network: the attacker must first obtain the password column via a separate database leak or backup exposure, as the description itself states. The high CVSS is driven entirely by VC:H (confidentiality of recovered plaintext credentials). No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no evidence of active or automatable exploitation; this is a latent data-protection weakness, not an imminent remote-exploitation priority. Treat it as a defense-in-depth / credential-hygiene issue whose real-world severity is contingent on a prior breach of the database - the AV:N network metric overstates reachability because the MD5 digests are not themselves exposed by any network-facing feature. Patch is confirmed available (BCrypt migration), which lowers remediation risk.

Exploit ScenarioDerived

An attacker who already obtains the user_info table - via a SQL injection, a misconfigured backup, or an insider database dump - extracts the 32-character unsalted MD5 password digests. Because the hashes are unsalted, the attacker runs them against precomputed rainbow tables or GPU-accelerated brute force to recover plaintext passwords, then reuses those credentials against this application and any other service where users reused them. No public exploit identified at time of analysis; the 'exploit' is standard offline hash cracking.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 13, 2026

Unsalted MD5 password storage in Xxyopen novel through 3.5.0 allows offline recovery of user plaintext passwords from the user_info.password column, because UserServiceImpl.register() calls DigestUtils.md5DigestAsHex without any per-user salt or key stretching. The flaw is a confidentiality amplifier rather than a directly reachable bug: an attacker must first obtain the password column via a database leak, SQL injection, exposed backup, or insider access, after which precomputed rainbow tables and GPU brute force make short or common passwords recoverable in seconds to hours, enabling credential reuse against the application and elsewhere. No public exploit code was identified at time of analysis and there is no evidence of confirmed active exploitation (CISA KEV), though the root cause and the upstream BCrypt fix are both publicly documented; instances migrated to the patched code, and accounts that have re-logged-in to trigger the BCrypt upgrade, are no longer affected.

RemediationAI

Apply the upstream fix by upgrading to a build that includes commit fa82ce7e426a5b29db469b8f13d2e29fc1260871 (PR github.com/201206030/novel/pull/53), which introduces spring-security-crypto and replaces MD5 with BCryptPasswordEncoder via a dual-path login that opportunistically rehashes legacy MD5 rows on successful sign-in; because no tagged patched release number is confirmed in the source data, treat this as upstream fix available (PR/commit) rather than a released version, and verify the version you deploy. Note the trade-off that upgrading alone does not retroactively protect passwords: any user who has not logged in since deployment retains a crackable MD5 digest, so force a password reset and session invalidation for all accounts after migration, or explicitly trigger the legacy-to-BCrypt upgrade path. Because the exposure requires an attacker to already hold the user_info.password column, compensating controls should target that precondition: restrict network access to the MySQL database and remove it from the public attack surface, rotate DB and backup credentials, audit and encrypt backups so dumps are not readable at rest, patch SQL injection vectors elsewhere in the application, and monitor for bulk-dump or anomalous SELECT activity against user_info. If immediate reseeding of all passwords is impractical, prioritize resetting accounts with weak or reused passwords and enable rate limiting and MFA on login to blunt credential-stuffing reuse of any recovered passwords.

Affected VersionsENISA

Novel 0 ≤3.5.0

Affected Packages

euvd novel no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The defect is CWE-916 (Use of Password Hash With Insufficient Computational Effort) in the Java/Spring Boot project github.com/201206030/novel. The vulnerable code path is UserServiceImpl.register(), which sets user_info.password to DigestUtils.md5DigestAsHex(password.getBytes(UTF_8)) - a single-round, unsalted MD5 hex digest (32 lowercase hex characters). Unsalted MD5 is fast by design (~10^10 guesses/second on commodity GPUs), so identical passwords produce identical digests, allowing precomputed lookup tables (rainbow tables) and cracking-cluster amortization. The schema even contains a legacy salt column that is no longer mixed into the hash, confirming the design intent was lost. The public fix (commit fa82ce7, PR #53) adds the org.springframework.security:spring-security-crypto dependency and introduces a BCryptPasswordEncoder with a regex (^[0-9a-f]{32}$) that distinguishes legacy MD5 digests from BCrypt hashes; login first attempts BCrypt verification, falls back to the MD5 comparison only for legacy rows, and on a successful legacy match immediately rewrites the row with a BCrypt hash - an opportunistic, transparent migration. Because MD5 digests never left the server (no API exposes the password field), the CWE-916 flaw is not remotely triggerable on its own; it converts any other data-exposure event into mass plaintext credential compromise.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (vulncheck) PRIMARY 8.2 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

AC:H because exploitation depends on a separate database-leak precondition (no self-contained network attack); C:H for recovered plaintext passwords; I/A:N as storage weakness grants no integrity or availability impact.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Xxyopen novel through 3.5.0 contains a weak password hashing vulnerability that allows attackers to recover plaintext passwords because UserServiceImpl.register() stores unsalted MD5 digests in user_info.password. Attackers who obtain the password column through a database leak or backup exposure can crack hashes with precomputed tables or GPU brute force and reuse credentials.

Executive ViewAI

Why It Matters

Xxyopen novel versions through 3.5.0 store user passwords with unsalted MD5, meaning any leak of the user_info.password column can expose user credentials to offline cracking. While not directly exploitable, this flaw amplifies the impact of a database breach and enables credential reuse against the application and other services. No public exploit identified at time of analysis, but leadership should prioritize protecting the password database and accelerating a migration to strong, salted password hashing.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: restrict database access and encrypt backups; monitor for SQL injection and unauthorized data exfiltration; force password resets and require strong, unique passphrases; enable multi-factor authentication; and prioritize migration to BCrypt with per-user salt and key stretching once available.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Low
niche open-source Chinese novel platform, hobby project, no enterprise footprint
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy