Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAuthenticate as backend admin with Media Manager access
-
DeliveryStore XSS payload as effect type name
-
ExploitBind effect to target media file
-
InstallVictim admin clicks Delete on that file
-
C2Unescaped name renders as HTML
-
ExecutePayload runs in victim session, exfiltrates cookies/CSRF token
-
ImpactBackend account 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 | Requires the REDAXO Media Manager addon to be in use, and the attacker must already hold a backend administrator account with access to Media Manager to plant an XSS payload in an effect type's name field (the type-name validation at types.php:200 blocks |
| Impact | This is a genuinely low-priority issue despite being a real, well-documented vulnerability. The provided CVSS 3.1 vector (AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N = 4.8) correctly captures a heavily-gated stored XSS: exploitation requires PR:H (an attacker who already holds a backend administrator account with Media Manager access to plant the payload) and UI:R (a second administrator must subsequently click 'Delete' on a media file referenced by the poisoned effect). The realistic threat is therefore admin-to-admin escalation/lateral movement, not external compromise - an attacker who can plant the payload is already a privileged backend user. No EPSS score, KEV listing, or SSVC decision data was provided in the input; per the precision rules this means no widespread-exploitation signal exists. A detailed proof-of-concept (DB-seeding commands, JPEG payload, step-by-step trigger, screenshot) IS published in the GitHub Security Advisory GHSA-mf2p-wjp4-99pq, so publicly available exploit code exists, but that is distinct from active exploitation, which is not confirmed. Net: a valid vulnerability worth patching in the normal cycle, but not an emergency - the PR:H + UI:R requirements and the niche product footprint keep real-world risk low. |
| Exploit ScenarioDerived | A malicious or compromised REDAXO backend administrator creates a Media Manager effect type whose name field contains an XSS payload (e.g. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
Stored cross-site scripting in REDAXO CMS 5.x (affecting versions up to and including 5.21.1) lets an authenticated backend administrator plant HTML/JavaScript in a Media Manager effect type's name field, which is later rendered unescaped inside the 'media is in use' warning shown when another administrator tries to delete a referenced media file. Successful exploitation requires a second, victim administrator to click the Delete button on a specifically referenced media item, after which the payload runs in the victim's backend session and can be used for session hijacking, credential harvesting, or CSRF-token theft leading to full backend account takeover. Rated CVSS 3.1 4.8 (AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N), this is a low-priority issue: it is not listed in CISA KEV and there is no evidence of active exploitation, though the vendor advisory publishes a full step-by-step proof-of-concept reproduction (publicly available exploit code exists). No EPSS score or in-the-wild telemetry was provided with this report.
RemediationAI
Upgrade REDAXO core to 5.21.2 or later (vendor-released patch: 5.21.2), which applies rex_escape() to the effect type name and to other unescaped values; the change is contained in PR https://github.com/redaxo/core/pull/6581 (commit 2daaa3a30570bc76a82f63fd21fb8c9c2cd5dc7c), and the advisory is at https://github.com/redaxo/core/security/advisories/GHSA-mf2p-wjp4-99pq. If immediate upgrade is not possible, the highest-value compensating control is to treat the type-name field as a trust boundary: audit existing rows in rex_media_manager_type and rename or remove any type whose name contains '<', '>', '"', '&' or apostrophes (side effect: renaming a type changes its display label and any references by name in workflows/templates, so verify Media Manager output afterwards), and restrict backend Media Manager privileges to a minimal set of trusted administrators since planting the payload requires the media_manager addon permission (this reduces but does not eliminate the second-administrator victim path). If Media Manager effects are not used, disabling or removing the media_manager addon eliminates the vulnerable code path entirely, at the cost of losing image resizing, watermarking and all media effect processing. Note that the victim still has to click Delete on a referenced media file for execution, so hardening browser-side session protection (HttpOnly/SameSite cookies, short admin session lifetimes) limits the post-exploitation impact of session theft but does not fix the underlying injection.
Affected VersionsENISA
Affected Packages
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
The flaw is a classic CWE-79 output-encoding failure in REDAXO's media_manager addon. The handler in redaxo/src/addons/media_manager/lib/media_manager.php (function mediaIsInUse(), registered on the MEDIA_IS_IN_USE extension point in boot.php) queries media_manager effect rows whose parameters JSON references the filename being deleted, then builds an HTML anchor string using the effect type's name value directly with no rex_escape() call. That string is concatenated into the exception message raised by rex_media_service::deleteMedia() and rendered by rex_view::error() as raw HTML, so stored markup executes in the DOM of the reviewing administrator. The same addon demonstrates the intended safe pattern at types.php line 91 (rex_escape($list->getValue('name'))), and the associated upstream fix (PR #6581, commit 2daaa3a30570bc76a82f63fd21fb8c9c2cd5dc7c) adds rex_escape() across media_manager.php, effects.php, mediapool.php, sync.php, metainfo media_handler.php and phpmailer checkmail.php. The root cause is compounded by an input-validation gap: types.php line 200 validates the type name with NOT_MATCH '{[/\\]}', which blocks braces and slashes but permits '<', '>', '"' and '&' - precisely the characters needed to inject an element such as <img src=x onerror=...>. The affected package is composer/redaxo/source (CPE pkg:composer/redaxo_source), i.e. the REDAXO core distribution containing the media_manager addon.
Know when Redaxo 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
AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
PR:H because payload planting needs an admin Media Manager account; UI:R because a victim admin must click Delete; S:C as script escapes into the victim's authenticated session; C:L/I:L for cookie/token theft.
Primary rating from Vendor (https://github.com/redaxo/core).
CVSS VectorVendor: https://github.com/redaxo/core
DescriptionCVE.org
Summary
A stored cross-site scripting (XSS) vulnerability exists in REDAXO CMS 5.x. When an administrator attempts to delete a media file that is referenced by a Media Manager effect, the warning message rendered in the backend includes the type's name field without HTML escaping. An attacker with access to the Media Manager addon can store an XSS payload as a type name; the payload executes in the browser of any administrator who subsequently tries to delete a media file linked to that type's effects. This can lead to session hijacking and full backend account takeover.
---
Details
File: redaxo/src/addons/media_manager/lib/media_manager.php Function: mediaIsInUse() - registered on the MEDIA_IS_IN_USE extension point in boot.php
When rex_media_service::deleteMedia() is called, it invokes rex_mediapool::mediaIsInUse($filename), which fires the MEDIA_IS_IN_USE extension point. The media_manager addon's handler queries all effects whose parameters JSON contains the filename, then constructs an HTML anchor with the type name inserted verbatim:
// media_manager.php ~line 457 ← VULNERABLE
$message = '<a href="javascript:openPage(\'' . rex_url::backendPage(...) . '\')">'
. rex_i18n::msg('media_manager') . ' '
. rex_i18n::msg('media_manager_effect_name') . ': '
. (string) $sql->getValue('name') // ← NO rex_escape() call
. '</a>';The returned $message string is concatenated into the exception message thrown by deleteMedia() and rendered by rex_view::error() as raw HTML.
Contrast with the correct pattern used elsewhere in the same addon:
// types.php line 91 ← CORRECT
$name = '<b>' . rex_escape($list->getValue('name')) . '</b>';Input validation gap: types.php line 200 validates the type name with the rule NOT_MATCH '{[/\\]}', which blocks {, /, and \ but permits <, >, ", ', and & - all characters required to inject HTML.
---
PoC
<img width="2074" height="1720" alt="image" src="https://github.com/user-attachments/assets/207f85d3-f4e2-4828-9211-8da36ec9c43d" />
Test environment: REDAXO 5.x running at http://localhost/ Account required: Any REDAXO backend administrator Test credentials: username admin / password Admin12345!
Step 1 - Seed test data directly into the database (single CMD command)
docker exec -i 34--core-5x-redaxo-1 php -r "$p=new PDO('mysql:host=db;dbname=redaxo','redaxo','redaxo');$p->exec(\"INSERT IGNORE INTO rex_media(category_id,attributes,filetype,filename,originalname,filesize,width,height,title,createdate,createuser,updatedate,updateuser) VALUES(0,'','image/jpeg','xss_test.jpg','xss_test.jpg',284,1,1,'XSS Test',NOW(),'admin',NOW(),'admin')\");$tid=$p->query(\"SELECT id FROM rex_media_manager_type WHERE name='<img src=x onerror=alert(document.domain)>'\")->fetchColumn();if(!$tid){$p->prepare(\"INSERT INTO rex_media_manager_type(status,name,description,createdate,createuser,updatedate,updateuser) VALUES(1,?,'poc',NOW(),'admin',NOW(),'admin')\")->execute(['<img src=x onerror=alert(document.domain)>']);$tid=$p->lastInsertId();}$p->prepare(\"INSERT IGNORE INTO rex_media_manager_type_effect(type_id,effect,parameters,priority,createdate,createuser,updatedate,updateuser) VALUES(?,'watermark',?,1,NOW(),'admin',NOW(),'admin')\")->execute([$tid,json_encode(['rex_effect_watermark'=>['watermark_image'=>'xss_test.jpg']])]);echo \"OK type_id=$tid\n\";"Step 2 - Place a 1×1 JPEG in the media directory
docker exec 34--core-5x-redaxo-1 sh -c "printf '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\x0c\x19\x12\x13\x0f\x14\x1d\x1a\x1f\x1e\x1d\x1a\x1c\x1c $.\' \",#\x1c\x1c(7),01444\x1f\x27=82<.342\x1e>\x1b\x1b123\x1e4\x1c\x1f\xff\xc0\x00\x0b\x08\x00\x01\x00\x01\x01\x01\x11\x00\xff\xc4\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\xff\xda\x00\x08\x01\x01\x00\x00?\x00\xf5\x00\xff\xd9' > /var/www/html/media/xss_test.jpg"Step 3 - Login to the backend
Open a browser and navigate to:
http://localhost/redaxo/index.phpLogin with: admin / Admin12345!
Step 4 - Trigger the XSS
Navigate to the media file detail page:
http://localhost/redaxo/index.php?page=mediapool/media&file_id=1Click the Delete button. REDAXO checks whether the file is in use, finds the Watermark effect whose parameters JSON references xss_test.jpg, and renders the type name in the warning HTML without escaping.
Result: The browser executes <img src=x onerror=alert(document.domain)> and an alert dialog showing the current domain appears immediately.
---
Impact
Vulnerability type: Stored Cross-Site Scripting (Stored XSS)
Who is impacted: Any backend administrator who attempts to delete a media file that is referenced by a Media Manager effect. A malicious administrator (or an attacker who has compromised any admin account) can pre-plant a payload in a type name. All other administrators who later try to delete affected media files will have the payload executed in their browser sessions.
Exploitability:
- Privilege required to plant: Administrator (access to Media Manager addon)
- Privilege required to trigger: Administrator (access to Mediapool)
- User interaction required: Victim must click "Delete" on a media file
Realistic attack scenarios:
- Session cookie theft via
document.cookieexfiltration (leads to full account takeover) - Credential harvesting by dynamically replacing the login form
- CSRF-token extraction to perform authenticated actions on behalf of the victim
---
Fix
Apply rex_escape() to the type name before concatenating it into the HTML anchor:
// media_manager.php - apply rex_escape() to the name value
$message = '<a href="javascript:openPage(\'' . rex_url::backendPage(...) . '\')">'
. rex_i18n::msg('media_manager') . ' '
. rex_i18n::msg('media_manager_effect_name') . ': '
. rex_escape((string) $sql->getValue('name')) // ← ADD rex_escape()
. '</a>';Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
In REDAXO before 5.6.3, a critical SQL injection vulnerability has been discovered in the rex_list class because of the
Redaxo CMS Mediapool Addon 5.5.1 and older contains an arbitrary file upload vulnerability that allows authenticated use
Remote code execution in REDAXO CMS versions 5.18.2 through 5.21.0 is reachable by authenticated backend users with medi
A Remote Code Execution (RCE) vulnerability in the template management component in REDAXO CMS 5.20.0 allows remote auth
REDAXO CMS v2.11.0 was discovered to contain a remote code execution (RCE) vulnerability. Rated high severity (CVSS 7.2)
An issue was discovered in REDAXO version 5.15.1, allows attackers to execute arbitrary code and obtain sensitive inform
Redaxo v5.15.1 was discovered to contain a remote code execution (RCE) vulnerability via the component /pages/templates.
Remote code execution in the modules component in Yakamara Media Redaxo CMS version 5.12.1 allows an authenticated CMS u
Redaxo CMS 5.2 contains a cross-site request forgery vulnerability that allows unauthenticated attackers to create admin
Arbitrary file disclosure in REDAXO's Backup addon allows authenticated users with backup permissions to read any file w
Triggering an error page of the import process in Yakamara Media Redaxo CMS version 5.12.1 allows an authenticated CMS u
REDAXO is a PHP-based CMS. Rated medium severity (CVSS 6.1), this vulnerability is remotely exploitable, no authenticati
EUVD-2026-85329
GHSA-mf2p-wjp4-99pq
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB