GHSA-m8r3-22v6-g877

Suggest an improvement
Source
https://github.com/advisories/GHSA-m8r3-22v6-g877
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-m8r3-22v6-g877/GHSA-m8r3-22v6-g877.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-m8r3-22v6-g877
Aliases
  • CVE-2026-63000
Published
2026-09-23T14:09:15Z
Modified
2026-09-23T14:15:04Z
Severity
  • 6.4 (Medium) CVSS_V3 - CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:H/A:L CVSS Calculator
Summary
REDAXO: Missing CSRF Protection on Package Update Action Allows Forced Addon Updates
Details

Summary

The rex_api_install_package_update API function (install addon) does not override requiresCsrfProtection(), which defaults to false in the base class rex_api_function. Any authenticated admin can therefore be tricked via a CSRF attack into silently triggering a package update from the REDAXO package server.

Details

File: redaxo/src/core/lib/api_function.php:277-280

protected function requiresCsrfProtection()
{
    return false;  // DEFAULT — subclasses must opt in
}

File: redaxo/src/addons/install/lib/api/api_package_update.php:8-39

class rex_api_install_package_update extends rex_api_function
{
    public function execute()
    {
        if (!rex::getUser()?->isAdmin()) {
            throw new rex_api_exception('You do not have the permission!');
        }
        $addonkey = rex_request('addonkey', 'string');
        $fileId = rex_request('file', 'int');
        $installer = new rex_install_package_update();
        // ... downloads and installs $addonkey version $fileId from redaxo.org
    }
    // requiresCsrfProtection() NOT overridden — defaults to false
}

For comparison, rex_api_install_package_add and rex_api_install_package_delete both correctly return true. Only rex_api_install_package_update is missing this.

PoC

<!-- Attacker-controlled page -->
<img src="https://victim-redaxo.example.com/index.php?page=install/packages&rex-api-call=install_package_update&addonkey=some_addon&file=42" />

When an authenticated admin visits this page, the request is automatically made with their session cookie, causing some_addon to be updated to version file_id=42.

Impact

An attacker who can lure an admin to a malicious page can force-install specific addon versions. If combined with a supply-chain compromise of a package on redaxo.org, or by targeting a downgrade to a known-vulnerable version, this becomes a remote code execution vector. Even without supply-chain compromise, it can be used to disrupt the site by forcing unwanted updates.

Fix

Add requiresCsrfProtection() to rex_api_install_package_update:

protected function requiresCsrfProtection()
{
    return true;
}
Database specific
{
    "cwe_ids":  [
        "CWE-352"
    ],
    "github_reviewed":  true,
    "github_reviewed_at":  "2026-09-23T14:09:15Z",
    "nvd_published_at":  null,
    "severity":  "MODERATE"
}
References

Affected packages

Packagist / redaxo/source

Package

Name
redaxo/source
Purl
pkg:composer/redaxo/source

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
5.21.2

Affected versions

5.*
5.10.0-beta1
5.10.0-beta2
5.10.0
5.10.1
5.11.0-beta1
5.11.0
5.11.1
5.11.2
5.12.0-beta1
5.12.0-beta2
5.12.0-beta3
5.12.0
5.12.1
5.13.0-beta1
5.13.0-beta2
5.13.0
5.13.1
5.13.2
5.13.3
5.14.0-beta1
5.14.0-beta2
5.14.0
5.14.1
5.14.2
5.14.3
5.15.0-beta1
5.15.0
5.15.1
5.16.0-beta1
5.16.0
5.16.1
5.17.0
5.17.1
5.18.0
5.18.1
5.18.2
5.18.3
5.19.0
5.20.0
5.20.1
5.20.2
5.21.0-beta1
5.21.0
5.21.1

Database specific

last_known_affected_version_range
"<= 5.21.1"
source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-m8r3-22v6-g877/GHSA-m8r3-22v6-g877.json"