CVE-2026-63002

mediumpriority · track · 0EPSS 0.002 · 9 %ileUS
grimoire priorityP3 · Track
Exploitable?
—
no known exploitation
Likely / severe?
0.20% (9th) EPSS
CVSS 4.8 · medium
Is it mine?
2 products
Check your exposure
Who says so?
2 sources
nvd · osv

EPSS · scored 2026-10-28

REDAXO is a PHP-based content management system. Prior to 5.21.2, redaxo/src/addons/mediapool/pages/sync.php inserts filenames held in $diffFiles from the media filesystem into the Mediapool Sync page without rex_escape(). An attacker who can place an unregistered file with HTML metacharacters in the media directory can execute script in the browser of a backend user with media[sync] permission when that user opens the Sync page, enabling session theft or unauthorized backend actions. This issue is fixed in version 5.21.2.

01

cvss

Technical severity, 0–10. One row per scoring source.

4.8
010

base score 0–10 · higher = more severe · hover a vector to decode

v3.14.8mediumCVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:Nsecondary · security-advisories@github.comexploitability 1.7 · impact 2.7
v3.14.8mediumCVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:Nsecondary · OSV
v3.14.4mediumCVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N/E:Usecondary · CVSS-BT (t0sche)
02

ssvc

A stakeholder decision — act, attend, or track — from exploitation and impact.

Exploitation: poc · Automatable: no · Technical Impact: partialcoordinatorcisa_ssvcUS
03

weaknesses

The CWE weakness classes this flaw belongs to.

04

affected products (2)

Products and version ranges known to be affected.

05

advisories (1)

Vendor and ecosystem advisories describing this.

  • GHSA-w998-qmw9-mf4mREDAXO: Stored XSS in Mediapool Sync Page via Unescaped Filesystem Filenames2026-09-23ghsa · osvUS

    ### Summary The mediapool sync page (`sync.php`) renders filenames from the `/media` filesystem directory directly into HTML without applying `rex_escape()` (i.e., `htmlspecialchars`). Any file placed in the media directory whose filename contains HTML metacharacters will execute JavaScript in the browser of any backend user who views the sync page. ### Details In `redaxo/src/addons/mediapool/pages/sync.php`, the variable `$diffFiles` is populated from actual filesystem filenames (files in `/media/` not yet registered in the database). These filenames are then rendered without escaping: **File:** `redaxo/src/addons/mediapool/pages/sync.php:119-120` ```php foreach ($diffFiles as $file) { if (is_writable(rex_path::media($file))) { $e = []; $e['label'] = '<label>' . $file . '</label>'; // NO rex_escape! $e['field'] = '<input type="checkbox" name="sync_files[]" value="' . $file . '" />'; // NO rex_escape! $writable[] = $e; } else { $notWritable[] = $file; } } ``` **File:** `redaxo/src/addons/mediapool/pages/sync.php:170` ```php $fragment->setVar('body', '<ul><li>' . implode('</li><li>', $notWritable) . '</li></ul>', false); // $notWritable contains unescaped filenames ``` By contrast, all other filename displays in the codebase use `rex_escape($fname)` (e.g., `media.detail.php:236`, `media.list.php`). The sync page is accessible to any backend user with the `media[sync]` permission (not exclusively admins). ### PoC 1. Place a file named `<img src=x onerror=alert(document.cookie)>.txt` into the REDAXO `/media/` directory (via backup restore or server access) without adding it to the media database. 2. Log in as any backend user with `media[sync]` permission. 3. Navigate to **Mediapool → Sync**. 4. The XSS payload executes immediately, stealing the admin session cookie. ### Impact Stored XSS in the admin panel. An attacker who can place files in the media directory (via admin-level backup restore or server access) can achieve persistent XSS against all users who visit the sync page, including higher-privileged admins. This enables session hijacking, credential theft, and full CMS takeover. ### Fix Apply `rex_escape()` to all filename variables before inserting into HTML: ```php $e['label'] = '<label>' . rex_escape($file) . '</label>'; $e['field'] = '<input type="checkbox" name="sync_files[]" value="' . rex_escape($file) . '" />'; // ... $fragment->setVar('body', '<ul><li>' . implode('</li><li>', array_map('rex_escape', $notWritable)) . '</li></ul>', false); ```

06

sources

Which sources assert this record, and when.

published 2026-09-23modified 2026-10-19
07

references (4) nvd

External citations — patches, advisories, analysis.

scry

Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.

Free scan