Skip to main content

REDAXO CMS EUVDEUVD-2026-85331

| CVE-2026-63002 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-09-23 https://github.com/redaxo/core GHSA-w998-qmw9-mf4m
4.8
CVSS 3.1 · Vendor: https://github.com/redaxo/core
View

Attack ChainAIDerived

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

  1. Access
    Gain file-write to /media (backup restore or server access)
  2. Delivery
    Plant file with HTML-metacharacter filename
  3. Exploit
    Backend user opens Mediapool Sync page
  4. Execution
    Unescaped filename renders in admin HTML
  5. Persist
    Stored XSS executes in victim session
  6. Impact
    Steal admin session cookie / CMS takeover

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires two chained prerequisites: (1) the attacker must be able to place a file with an HTML-metacharacter filename into the REDAXO /media filesystem directory without registering it in the media database - per the advisory this needs admin-level backup restore or direct server/filesystem access; and (2) a backend user holding the media[sync] permission must then navigate to Mediapool → Sync to trigger the stored payload (required user interaction, UI:R). Exploitation is limited to REDAXO core <= 5.21.1; it is not remotely exploitable against a default configuration by an unauthenticated external attacker, since the file-placement step demands high privilege or server access.

Impact

This is a genuine but low-to-moderate priority issue, correctly rated LOW (CVSS 4.8). The provided CVSS 3.1 vector (AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N) is internally consistent and defensible: although the XSS payload delivery is network-facing, actually planting the malicious filename in the /media filesystem directory requires high privilege (admin-level backup restore or direct server access), which justifies PR:H, and a backend victim must load the sync page (UI:R). No EPSS score, no CISA KEV listing, and no independent POC/exploit-code signal are present in the input - only the vendor advisory's step-by-step reproduction. The realistic risk is therefore constrained by the strong precondition: an attacker who can already write arbitrary files to /media typically already possesses significant access, making this more of a privilege-escalation/lateral-movement primitive (low-priv media[sync] operator → admin session theft) than a remote-unauthenticated threat. No conflicting signals of note; the vendor vector and description agree. Verify EPSS/POC status externally as neither is supplied.

Exploit ScenarioDerived

An attacker with the ability to write files to the REDAXO /media directory (via an admin-level backup restore or server/FTP access) places a file named like <img src=x onerror=alert(document.cookie)>.txt that is not yet registered in the media database. When any backend user with the media[sync] permission opens Mediapool → Sync, the unescaped filename executes JavaScript in their session, enabling cookie/session theft against higher-privileged admins. The vendor advisory documents a working reproduction, though no separate weaponized exploit code is referenced.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 23, 2026

Stored cross-site scripting in REDAXO CMS 5.21.1 and earlier allows an attacker who can place a file with HTML metacharacters in its filename into the /media directory to inject JavaScript that runs in the browser of any backend user who opens Mediapool → Sync, enabling session-cookie theft and potential CMS takeover. The flaw lives in the mediapool addon's sync.php, which renders unregistered filesystem filenames into HTML without rex_escape(); exploitation requires high privilege (admin-level backup restore or direct server/filesystem access) plus a victim holding the media[sync] permission who loads the page, so it is not reachable by an unauthenticated remote attacker on a default install. It is correctly rated LOW at CVSS 4.8, with no public exploit identified at time of analysis and no confirmed active exploitation (not in CISA KEV), although the vendor advisory documents a step-by-step proof-of-concept reproduction path; a vendor patch is available in REDAXO 5.21.2.

RemediationAI

Vendor-released patch: upgrade to REDAXO 5.21.2, which is published at https://github.com/redaxo/core/releases/tag/5.21.2 and corresponds to fix PR https://github.com/redaxo/core/pull/6581 and commit https://github.com/redaxo/core/commit/2daaa3a30570bc76a82f63fd21fb8c9c2cd5dc7c; because that commit also escapes several other media_manager, mediapool and metainfo output points, a full upgrade is preferable to a hand-applied one-line hotfix. If upgrading must be deferred, apply the code change manually by wrapping $file and $notWritable in rex_escape() in redaxo/src/addons/mediapool/pages/sync.php (both the label/field construction near lines 119-120 and the implode at line 170) - note that custom patches will be overwritten by the next update and must be re-verified. Practical compensating controls, with their trade-offs: restrict backup restore and any filesystem write access to /media to fully trusted administrators, and inventory /media for unexpected filenames (especially any containing <, >, quotes or spaces) before letting users open the sync page, accepting that a restored backup can silently reintroduce a malicious name; and/or remove the media[sync] permission from non-administrative roles so only trusted admins can reach the vulnerable page, at the cost of disabling media synchronisation for editors. As defense in depth, a strict Content-Security-Policy on the backend can blunt inline-script payloads, but REDAXO's backend relies on inline JavaScript and a restrictive CSP may break administrative functionality, so it should only be considered alongside patching. The same PR tightened escaping in media_manager, mediapool and metainfo handlers, so organisations should treat this as a signal to review other unescaped filename/name output paths rather than patch sync.php in isolation.

Affected VersionsENISA

core < 5.21.2

Affected Packages

composer redaxo/source fix: 5.21.2
euvd core fix: 5.21.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in composer, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

REDAXO is a PHP-based content management system; the vulnerable code sits in the bundled mediapool addon at redaxo/src/addons/mediapool/pages/sync.php, where the $diffFiles array is filled with raw filesystem filenames found in /media that are not yet registered in the media database. Lines 119-120 interpolate those names directly into a <label> and an <input value="..."> string, and line 170 implodes the $notWritable list into a <ul>/<li> fragment, all without passing through rex_escape() (REDAXO's htmlspecialchars wrapper). This is classic CWE-79 improper neutralization of input during web page generation: the application treats an externally influenced filesystem name as trusted markup rather than escaping it at the output sink, so a name such as <img src=x onerror=...>.txt becomes executable script. The weakness is inconsistent with the rest of the codebase, where identical filename output paths (media.detail.php:236, media.list.php) do call rex_escape(); the accompanying fix commit extends escaping to several other media_manager, mediapool and metainfo output points, indicating a broader stored-XSS hygiene issue. The CVSS vector AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N reflects that the injection is delivered over the web but requires high privileges to plant the file and victim interaction to fire, with the changed scope reflecting code execution in the victim's browser context.

Know when PHP 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 (https://github.com/redaxo/core) PRIMARY 4.8 MEDIUM
AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 4.8 MEDIUM

Planting the file requires admin/server-level write access (PR:H), a victim must view the sync page (UI:R), and XSS executing in another user's browser is a scope change (S:C) with limited C/I and no availability impact.

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

Primary rating from Vendor (https://github.com/redaxo/core).

CVSS VectorVendor: https://github.com/redaxo/core

Attack Vector
Network
Attack Complexity
Low
Privileges Required
High
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

DescriptionCVE.org

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

Threat Intelligence Overview

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Low
REDAXO is a niche German PHP CMS, modest deployment footprint
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High

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 MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +24
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

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