FreshRSS
CVE-2025-68932
LOW
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLocate FreshRSS instance with remember-me enabled
-
DeliveryHarvest token samples and timing data
-
ExploitPredict mt_rand/uniqid-based remember-me token
-
ExecutionReplay forged cookie for authentication
-
ImpactHijack victim account session
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 victim actually uses the 'keep me logged in' (remember-me) functionality, since the predictable remember-me token is the sole persistent credential being attacked; it also applies to challenge-response nonces and email-validation tokens generated the same way. The affected tokens are built as sha1(systemConf->salt . username . uniqid('' . mt_rand(), true)), so successful prediction requires defeating the mt_rand()/uniqid() entropy AND knowing or recovering the secret per-instance system salt and the target username - these are the primary limiting factors and the reason for AC:H/AT:P. No authentication is required to attempt token prediction (PR:N) and no user interaction is needed (UI:N), and the weak generators are used by default, but all affected instances are those running versions prior to 1.28.0. |
| Impact | Signals converge on LOW real-world priority despite the alarming 'account takeover' language in the description. The vendor CVSS 4.0 score is only 2.9, with AC:H (high complexity) and AT:P (specific attack requirements) reflecting that predicting the tokens is non-trivial, and VC:L/VI:N/VA:N capping impact. Crucially, the patched code shows the token is sha1(systemConf->salt . username . uniqid(mt_rand)) - the weak mt_rand()/uniqid() entropy is the flaw, but the token is also mixed with a SECRET system salt, so prediction realistically requires recovering or knowing that salt, which is why complexity is high. EPSS is low at 0.55% (45th percentile) and this is NOT on CISA KEV, consistent with the low-priority picture. POC/exploit material is publicly available (the GHSA advisory), but POC availability is not active exploitation. Signals are internally consistent rather than conflicting: CVSS, EPSS, and absence of KEV all point the same direction. The main caveat is that CVSS rates CONFIDENTIALITY impact only as Low (VC:L) even though successful exploitation yields full persistent session takeover of the victim's account - an analyst may consider the per-account impact higher than the vector suggests, but exploitability remains the limiting factor. |
| Exploit ScenarioDerived | A remote unauthenticated attacker targeting a FreshRSS instance where users rely on the 'keep me logged in' feature attempts to predict the remember-me token, which is derived from the weak mt_rand()/uniqid() PRNG. If the attacker can overcome the PRNG weakness and the secret system salt, they forge a valid persistent authentication cookie and hijack the victim's account. Public exploit/advisory material (GHSA-j9wc-gwc6-p786) exists, but the high attack complexity (AC:H) and dependency on the secret salt make practical exploitation difficult. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 13, 2026
Weak randomness in FreshRSS versions prior to 1.28.0 lets attackers predict the 'keep me logged in' remember-me tokens, challenge-response nonces, and email-validation tokens that the application generates with mt_rand() and uniqid(), enabling persistent session hijacking and account takeover against users who rely on the remember-me feature. Per the independent assessment the attack is unauthenticated and needs no user interaction, but it is gated by high attack complexity: the attacker must also know or recover the per-instance secret salt and the target username, so real-world priority is low even though confidentiality impact on a compromised account is high. Exploitation status: publicly available exploit code exists (the NVD-referenced 'exploit' link resolves to the project's GitHub security advisory GHSA-j9wc-gwc6-p786, not an independently weaponized kit); there is no CISA KEV entry, and EPSS is only 0.55% (45th percentile). The issue is fixed in FreshRSS 1.28.0.
RemediationAI
Vendor-released patch: upgrade to FreshRSS 1.28.0, which is the version in which the issue is patched (references: GitHub security advisory GHSA-j9wc-gwc6-p786, PR 8061, commit 57e1a375cbd2db9741ff19167813344f8eff5772 - the commit swaps sha1 over mt_rand()/uniqid() inputs for hash('sha256', ... . random_bytes(32))). Where immediate upgrade is not possible, the most effective compensating control is to invalidate the predictable material: rotate/replace the secret 'salt' value in the FreshRSS system configuration (config.php) so that any token previously derivable from the old salt-and any salt originally generated by the likewise-weak installer routine-no longer validates. The side effect is significant and must be planned: rotating the salt invalidates all existing remember-me cookies and CSRF/nonce state, forcing every user to log in again. Because the exposed remember-me token is the sole persistent credential, administrators can also neutralize the attack surface by disabling the 'keep me logged in' option for users (shortening session lifetimes and requiring re-authentication), by removing stale remembered-session rows so any attacker-predicted token has nothing to bind to, and by not exposing the instance directly to the internet (put it behind a VPN or an authenticating reverse proxy) since the reminder requires no authentication to attempt. Finally, because successful prediction depends on recovering the per-instance salt and guessing the target username, treat the system salt as a secret: do not publish it in shared configs, screenshots, or issue trackers, and prefer usernames that are not trivially enumerable. Monitor for anomalous login/session activity until all instances are on 1.28.0. Note the patch does not alter the failure-path nonce which still uses rand(), so validate the upgrade actually landed rather than relying on a partial backport.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
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). FreshRSS is a PHP application, and the affected code paths built security-relevant secrets by concatenating the instance salt with a username and a value derived from the non-cryptographic mt_rand() and uniqid() functions, then hashing with SHA-1. The commit diff at 57e1a375 shows exactly which artifacts were affected: the remember-me cookie token in app/Models/FormAuth.php (sha1(systemConf->salt . $username . uniqid('' . mt_rand(), true))), CSRF tokens in app/Models/Auth.php, challenge-response nonces in app/Controllers/javascriptController.php, email-validation tokens in app/Controllers/userController.php, the installer's setup hash in lib/lib_install.php, and even favicon cache jitter in p/f.php. mt_rand() is a Mersenne Twister generator whose output is recoverable from a modest number of observed values, and uniqid() is time-based, so the combined entropy of the token is far below the ~160 bits that the SHA-1 output implies; SHA-1 here only obscures a low-entropy input rather than adding strength. The patch replaces these constructions with hash('sha256', systemConf->salt . <context> . random_bytes(32)) and hash('sha256', 'failure' . rand()) for the failure path - i.e. a CSPRNG-sourced 256-bit random component. Note also that the install-time salt itself was produced by the same weak pattern (sha1(uniqid(mt_rand()...) . stat(__FILE__))) and is now generated with random_bytes(32); because the salt is the primary mitigating secret for predicting tokens, an instance installed with a weak, low-entropy salt substantially lowers the practical bar even though the code-level issue is in the token generator.
Know when Freshrss 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:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
No auth needed to attempt prediction (PR:N), but defeating the PRNG plus secret salt makes it AC:H; successful remember-me takeover yields full account access (C:H) with limited config change (I:L).
Primary rating from Vendor (github).
CVSS VectorVendor: github
DescriptionCVE.org
FreshRSS is a free, self-hostable RSS aggregator. Prior to version 1.28.0, FreshRSS uses cryptographically weak random number generators (mt_rand() and uniqid()) to generate remember-me authentication tokens and challenge-response nonces. This allows attackers to predict valid session tokens, leading to account takeover through persistent session hijacking. The remember-me tokens provide permanent authentication and are the sole credential for "keep me logged in" functionality. This issue has been patched in version 1.28.0.
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.
Affected Products (CPE)CVE.org
FreshRSS versions prior to 1.26.2 suffer from an information disclosure vulnerability that allows unauthenticated remote
Denial of service in FreshRSS 1.27.0 through versions before 1.28.0 lets a remote, unauthenticated attacker who controls
Path traversal in FreshRSS 1.23.0 through 1.27.0 lets an authenticated low-privilege user expose and invoke the installe
Critical authentication bypass vulnerability in FreshRSS versions prior to 1.26.2 that allows authenticated attackers to
FreshRSS is a self-hosted RSS feed aggregator. Prior to version 1.26.2, HTML is sanitized improperly inside the `<iframe
FreshRSS is a self-hosted RSS feed aggregator. Prior to version 1.26.2, it's possible to run arbitrary JavaScript on the
Forced session termination in FreshRSS versions prior to 1.27.1 allows an attacker-controlled web page to log out an aut
FreshRSS is a self-hosted RSS feed aggregator. Rated medium severity (CVSS 5.5), this vulnerability is low attack comple
A security vulnerability in FreshRSS (CVSS 4.3). Risk factors: public PoC available. Vendor patch is available.
FreshRSS is a self-hosted RSS feed aggregator. A vulnerability in versions prior to 1.26.2 causes a user to be repeatedl
self-hostable RSS aggregator. versions up to 1.28.0 is affected by improper access control (CVSS 7.5).
FreshRSS is a free, self-hostable RSS aggregator. Rated high severity (CVSS 7.5), this vulnerability is remotely exploit
NVD
CVE.org
EPSS
GitHub
Exploit-DB