Skip to main content

FreshRSS CVE-2025-68932

LOW
Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG) (CWE-338)
2025-12-27 security-advisories@github.com
2.9
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Locate FreshRSS instance with remember-me enabled
  2. Delivery
    Harvest token samples and timing data
  3. Exploit
    Predict mt_rand/uniqid-based remember-me token
  4. Execution
    Replay forged cookie for authentication
  5. Impact
    Hijack 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.6% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

Vendor (github) PRIMARY 2.9 LOW
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
vuln.today AI 6.5 MEDIUM

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).

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

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

EPSS Score
0.6%
Top 55% exploitable
Prevalence
Low
self-hosted hobby RSS aggregator, minimal enterprise footprint
Exploit
POC
Public exploit code exists
Data Quality
4 sources
Confidence: Medium

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 LOW
CISA KEV No
Public POC Yes
EPSS 0.6%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

35
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +14
PoC: +20
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.

Affected Products (CPE)CVE.org

cpe:2.3:a:freshrss:freshrss:*:*:*:*:*:*:*:*
CVE-2025-31134 HIGH POC
7.5 Jun 04

FreshRSS versions prior to 1.26.2 suffer from an information disclosure vulnerability that allows unauthenticated remote

CVE-2025-68148 HIGH POC
7.5 Dec 27

Denial of service in FreshRSS 1.27.0 through versions before 1.28.0 lets a remote, unauthenticated attacker who controls

CVE-2025-58173 HIGH POC
7.4 Dec 16

Path traversal in FreshRSS 1.23.0 through 1.27.0 lets an authenticated low-privilege user expose and invoke the installe

CVE-2025-46341 HIGH POC
7.1 Jun 04

Critical authentication bypass vulnerability in FreshRSS versions prior to 1.26.2 that allows authenticated attackers to

CVE-2025-32015 MEDIUM POC
6.7 Jun 04

FreshRSS is a self-hosted RSS feed aggregator. Prior to version 1.26.2, HTML is sanitized improperly inside the `<iframe

CVE-2025-31136 MEDIUM POC
6.7 Jun 04

FreshRSS is a self-hosted RSS feed aggregator. Prior to version 1.26.2, it's possible to run arbitrary JavaScript on the

CVE-2025-59949 MEDIUM POC
6.5 Dec 18

Forced session termination in FreshRSS versions prior to 1.27.1 allows an attacker-controlled web page to log out an aut

CVE-2023-22481 MEDIUM POC
5.5 Mar 06

FreshRSS is a self-hosted RSS feed aggregator. Rated medium severity (CVSS 5.5), this vulnerability is low attack comple

CVE-2025-46339 MEDIUM POC
4.3 Jun 04

A security vulnerability in FreshRSS (CVSS 4.3). Risk factors: public PoC available. Vendor patch is available.

CVE-2025-31482 MEDIUM POC
4.3 Jun 04

FreshRSS is a self-hosted RSS feed aggregator. A vulnerability in versions prior to 1.26.2 causes a user to be repeatedl

CVE-2025-62166 HIGH
7.5 Mar 09

self-hostable RSS aggregator. versions up to 1.28.0 is affected by improper access control (CVSS 7.5).

CVE-2022-23497 HIGH
7.5 Dec 09

FreshRSS is a free, self-hostable RSS aggregator. Rated high severity (CVSS 7.5), this vulnerability is remotely exploit

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