CVE-2026-25726
Official description Straight from the sourceThe vendor's or NVD's own wording, published unedited. Authoritative, but often terse — it says what broke, rarely what to do.
NVD · uneditedCloudreve is a self-hosted file management and sharing system. Prior to version 4.13.0, the application uses the weak pseudo-random number generator math/rand seeded with time.Now().UnixNano() to generate critical security secrets, including the secret_key, and hash_id_salt. These secrets are generated upon first startup and persisted in the database. An attacker can exploit this by obtaining the administrator's account creation time (via public API endpoints) to narrow the search window for the PRNG seed, and use known hashid to validate the seed. By brute-forcing the seed (demonstrated to take <3 hours on general consumer PC), an attacker can predict the secret_key. This allows them to forge valid JSON Web Tokens (JWTs) for any user, including administrators, leading to full account takeover and privilege escalation. This issue has been patched in version 4.13.0.
Technical summary Written by usOur analysis, written from the advisory, the CVSS vector and the affected-version data. It adds context the advisory leaves out, and never invents facts that are not in the source.
dbcve analysis · high confidenceCloudreve versions prior to 4.13.0 use the weak math/rand PRNG seeded with time.Now().UnixNano() to generate critical secrets (secret_key, hash_id_salt) at first startup. Attackers can obtain the admin account creation time via public API, then brute-force the PRNG seed (taking <3 hours) to predict secret_key and forge valid JWTs for full account takeover.
Verify against the referenced sources before acting — the references below are authoritative for this CVE, this summary is not.
Affected products & versions What the vendor confirmedThe version ranges the vendor confirmed as vulnerable. If your version sits inside a range here, treat yourself as exposed until you have upgraded.
NVD · CPE data< 4.13.0CVSS breakdown How the score is builtThe industry scoring standard. It rates how the flaw is reached, what it takes to exploit, and what an attacker gains — the score is derived from those, not the other way round.
From the vector- Attack vector
- Network
- Complexity
- Low
- Privileges
- None
- User interaction
- None
- Scope
- Unchanged
- Confidentiality
- High
- Integrity
- High
- Availability
- High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Am I affected? How to checkSteps we derive from the advisory and the affected-version data, so you can decide whether this CVE reaches your setup. They are a guide, not a scan — your own configuration is the authority.
dbcve checksWork through these to decide whether this CVE applies to you.
-
Identify Cloudreve versionLocate the Cloudreve binary or container image and determine its version using 'cloudreve --version', checking the Docker image tag, or examining the conf.ini file for a version fieldAffected if The version is below 4.13.0 or cannot be determined (indicating it may be an older installation)
-
Locate the configuration databaseFind the Cloudreve database file (typically SQLite named 'cloudreve.db' or similar in the data directory, or a MySQL/PostgreSQL database if configured). Consult conf.ini for the database connection string.Affected if A database exists and contains Cloudreve installation data
-
Check for secret_key in databaseQuery the database for the secret_key value. In SQLite: 'SELECT value FROM configs WHERE name="secret_key";' or equivalent table. This value is generated at first startup.Affected if A secret_key value exists in the database, indicating the application has been initialized
-
Check for hash_id_salt in databaseQuery the database for the hash_id_salt value. In SQLite: 'SELECT value FROM configs WHERE name="hash_id_salt";' or equivalent table. This is also generated at first startup using the same weak PRNG.Affected if A hash_id_salt value exists in the database, confirming both critical secrets were generated at initialization
-
Verify deployment timelineCheck the admin account creation timestamp via database query (e.g., 'SELECT created_at FROM users WHERE id=1;' for the initial admin). Compare this timestamp against the date version 4.13.0 was released.Affected if The admin account was created before upgrading to version 4.13.0, indicating the secrets may have been generated using the vulnerable PRNG
If the installed version is below 4.13.0 or unknown, and the database contains secret_key and hash_id_salt values generated during initialization, the deployment is likely affected by this vulnerability.
Generated from the published advisory. Verify against your own configuration.
Remediation Closing itWhat it takes to close this. Where a vendor fix exists we point at it; where none exists we say so plainly, and can build one. Effort estimates are scoped from the advisory, not from your codebase.
dbcve · scoped4.13.0
Upgrade to Cloudreve version 4.13.0 or later, which replaces the weak PRNG with crypto/rand. After upgrading, rotate all generated secrets (secret_key, hash_id_salt) and investigate for any signs of prior compromise.
4.13.0 or later
- Upgrade Cloudreve to version 4.13.0 or later to obtain the fixed crypto implementation
- After upgrading, regenerate the secret_key and hash_id_salt by clearing the stored values in the database so new secure values are generated on next startup
- Review all user sessions and consider invalidating existing JWTs to force re-authentication
- Audit administrator accounts for any unauthorized access that may have occurred prior to the upgrade
Generated from the published advisory — verify against the referenced sources before acting.
- Consultation3.0 h
- Implementation2.0 h
- Testing3.0 h
- Review / QA2.0 h
An estimate, not a bill — we confirm scope with you before any work starts. Need it this week? Rush from $2,832.
Scan for this in your stack
Free · runs locallyCheck whether your project pulls in CVE-2026-25726 — or any other known-vulnerable package — straight from your lock files. Free and open source; it runs locally and uploads nothing.
References Go to the primary sourcePrimary sources — vendor advisories, patches and trackers. Where our summary and a reference disagree, the reference wins.
Primary sourcesPractitioner notes
ContributedPeer-ranked notes from engineers who’ve handled CVE-2026-25726 in production — separate from our analysis above.
The advisory tells you what broke. It rarely tells you what actually worked. If you’ve dealt with this one, that detail is what the next engineer is searching for.
- The version that genuinely resolved it — not the one the vendor claimed
- A config change or rule that shut the vector down
- A gotcha in the upgrade path that cost you an afternoon
No notes yet
Be the first to add a field note for this CVE — a mitigation you’ve verified, a version caveat, or a link to a working fix. Sign in above to contribute.
A place for practitioners to share what actually worked: a mitigation you’ve tested, a configuration change, a version- or environment-specific caveat, or a link to a verified patch. The most useful notes rise to the top as peers upvote them, so the signal stays high.
- Verified mitigations, workarounds, and config changes
- Version or environment caveats, and links to real fixes
- No weaponised exploit code, or anything meant to cause harm
- No spam, self-promotion, credentials, or personal data