Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRequest password reset for admin
-
DeliveryRead server Date header
-
ExploitPrecompute md5(microtime()) token candidates
-
ExecutionProbe tokens against passrecover endpoint
-
PersistValidate matching token
-
ImpactReset admin password and take over account
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Cryptographic PRNG selection
|
| Exploitation Conditions | Exploitation requires that the target account's password-recovery flow be invoked (attacker can trigger it for any account, including admin) and that the attacker can read the server's Date header to bootstrap the microtime() timing window. The limiting factor is timing: the attacker must precompute and probe candidate tokens within the narrow window before the token seed drifts, and must succeed against the ~1M-value/second space (reflected as AC:H/AT:P). No authentication, no user interaction, and no special server configuration are needed - the weak md5(microtime()) token generation is the default behavior in Cotonti through 1.0.0. Any endpoint rate-limiting or short token TTL would further constrain the probing step. |
| Impact | This is a genuine high-priority flaw, not a CVSS-inflation case. The impact is complete account takeover of any user including administrators via an unauthenticated network path (PR:N/UI:N), which correctly justifies full VC:H/VI:H/VA:H. The tempering factors are real and well-modeled by the vendor's CVSS 4.0 vector: AC:H and AT:P (attack requirements present) reflect that success is not deterministic - the attacker must win a race against a narrow time window, precompute the correct md5(microtime()) candidate, and probe it before the token expires or the window drifts. No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no evidence of active exploitation - the signal here is a credible reported flaw with a vendor patch, reported by VulnCheck, rather than in-the-wild abuse. Net: treat as a priority patch for any Cotonti operator because the impact is total (admin takeover) and unauthenticated, but the low deployment footprint and probabilistic timing requirement mean opportunistic mass exploitation is less likely than targeted attacks against known Cotonti sites. |
| Exploit ScenarioDerived | An unauthenticated attacker targeting a known Cotonti site issues a password-recovery request for the admin account, then reads the server's HTTP Date header to anchor the microtime() seed. They precompute the ~1 million candidate md5(microtime()) tokens for the relevant second and rapidly probe them against the passrecover endpoint until one validates, allowing them to reset the admin password and seize the account. No public exploit code was identified at time of analysis, though the technique is fully described in the VulnCheck advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Unauthenticated attackers can reset the password of any Cotonti account, including administrator accounts, because password-recovery validation tokens in Cotonti through 1.0.0 are derived from md5(microtime()) rather than a cryptographically secure random source, leaving roughly one million predictable candidate values per second. Exploitation requires the attacker to trigger the recovery flow for a target account, read the server's Date header to bootstrap the microtime() timing window, then precompute and probe candidate tokens against the passrecover endpoint before the seed drifts - a timing-constrained but fully unauthenticated attack (assessed CVSS 3.1 AV:N/AC:H/PR:N/UI:N, C:H/I:H/A:H; CVSS 4.0 base 9.2). No public exploit code or confirmed in-the-wild exploitation was identified at time of analysis; any endpoint rate-limiting or short token lifetime further constrains the probing step, so this is a genuine high-priority flaw rather than a CVSS-inflation case.
RemediationAI
Apply the upstream vendor fix, which replaces the predictable token generator in modules/users/inc/users.passrecover.php with $validationKey = bin2hex(random_bytes(32)) (256 bits of CSPRNG output) and corrects the $validationKey/$validationkey case mismatch that could bypass the empty-value check; the fix is delivered via the vendor's upstream pull request (https://github.com/Cotonti/Cotonti/pull/1898) referenced alongside the issue at https://github.com/Cotonti/Cotonti/issues/1890 and the VulnCheck advisory at https://www.vulncheck.com/advisories/cotonti-through-1.0.0-predictable-password-recovery-token-via-weak-prng - patch availability is confirmed per vendor, but a formally tagged patched release was not independently confirmed from the supplied data, so review the PR or advisory for the applicable distribution before relying on a release package, and backport the one-line change if no tag is yet published. Until the fix is deployed, disable self-service password recovery or restrict the passrecover endpoint to trusted networks (trade-off: administrators lose self-service resets and must reset credentials manually or via CLI), and front the endpoint with strict rate-limiting and short-lived, single-use reset tokens (trade-off: aggressive throttling can lock out legitimate users and does not eliminate the race, only narrows the probing window). Additional compensating controls include monitoring for bursts of failed token validations from a single source, alerting on administrator password-reset events, and forcing credential rotation for privileged accounts on affected instances.
Affected VersionsENISA
Affected Packages
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 root cause is CWE-338 (Use of Cryptographically Weak Pseudo-Random Number Generator), specifically the token assignment in modules/users/inc/users.passrecover.php where $validationKey = md5(microtime()). PHP's microtime() returns the current Unix timestamp with microsecond fractional precision, so its output - and therefore the MD5 hash of that output - is drawn from a space of only about 1,000,000 distinct values per second, and the output is directly correlated with server wall-clock time. An attacker who can observe the server's Date response header can approximate that clock, enumerate candidate tokens for a narrow window of seconds, and submit them to the passrecover authentication endpoint until one matches, yielding a valid reset for an arbitrary account. The vulnerable code sits in the users module of the Cotonti PHP CMS and applies to all versions covered by cpe:2.3:a:cotonti:cotonti:* (i.e., the entire tracked release line through 1.0.0). The defect is compounded by a variable-name case bug noted in the upstream fix ($validationkey vs $validationKey), which meant the emptiness check could be bypassed and the weak generator invoked. MD5 itself is not the primary weakness here - the entropy collapse of the input seed is.
Know when Cotonti gets its next vulnerability
- 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
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Unauthenticated network attack (PR:N/UI:N) but success requires winning a timing race and brute-probing a large token space, so AC:H; admin account takeover yields full C:H/I:H/A:H.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Cotonti through 1.0.0 derives password recovery validation tokens from md5(microtime()) in users.passrecover.php, creating a predictable token space of approximately one million values per second. Unauthenticated attackers can read the server Date header, precompute candidate tokens within a narrow time window, and probe them against the passrecover authentication endpoint to reset any account password including administrators.
Articles & Coverage 1
Executive ViewAI
Cotonti deployments at version 1.0.0 and earlier are exposed to a critical, remotely exploitable authentication bypass that can allow an unauthenticated attacker to reset passwords for any account, including administrators. Successful exploitation could give an outsider full control of the affected site, its content, and connected user or customer data, with potential regulatory, financial, and reputational consequences. Leadership should treat any internet-facing Cotonti instance as high risk and prioritize emergency remediation.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
SQL injection vulnerability in modules/rss/rss.php in Cotonti before 0.9.14 allows remote attackers to execute arbitrary
Cross-site request forgery in Cotonti 1.0.0 (commit f43f1fc3) lets a remote attacker escalate privileges to administrato
PHP object injection in the Cotonti 1.0.0 Comments plugin allows unauthenticated, network-reachable attackers to instant
A vulnerability has been found in Cotonti Siena v0.9.25. Affected by this vulnerability is the file /admin.php?m=config&
Cotonti Siena 0.9.19 contains a stored cross-site scripting vulnerability in the admin configuration panel's site title
A stored cross-site scripting (XSS) vulnerability in the Edit Page function of Cotonti CMS v0.9.24 allows authenticated
Cotonti Siena 0.9.20 allows admins to conduct stored XSS attacks via a direct message (DM). Rated medium severity (CVSS
Cotonti Siena 0.9.20 allows admins to conduct stored XSS attacks via a forum post. Rated medium severity (CVSS 4.8), thi
Cross-site request forgery in Cotonti 1.0.0 (commit f43f1fc3) administration configuration handler allows a remote attac
Cross-Site Request Forgery in the Personal File Storage (PFS) module of Cotonti 1.0.0 (commit f43f1fc3) allows remote at
PHP object injection in Cotonti 1.0.0 allows authenticated users with comment-write permissions to pass attacker-control
PHP Object Injection in Cotonti CMS's Comments plugin grants any authenticated member a deserialization primitive reacha
EUVD-2026-83365
GHSA-rw92-cwm5-wp25
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB