CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-47347

CVE-2026-47347: Open Redirect Vulnerability in TYPO3 CMS GeneralUtility::sanitizeLocalUrl

Alon Barad
Alon Barad
Software Engineer

Jun 15, 2026·7 min read·2 visits

Executive Summary (TL;DR)

A flaw in TYPO3's GeneralUtility::sanitizeLocalUrl allows attackers to bypass local URL verification. By passing URLs with backslashes, attackers trigger modern browser normalizations, redirecting users to external malicious domains.

CVE-2026-47347 is an open redirect vulnerability affecting multiple TYPO3 CMS versions. The issue resides in GeneralUtility::sanitizeLocalUrl, where an insufficient blocklist validation implementation fails to prevent browsers from normalizing malformed relative paths into external protocol-relative redirections. Attackers can exploit this to conduct phishing, session hijacking, or credential harvesting campaigns.

Vulnerability Overview

The TYPO3 Content Management System exposes an attack surface via input parameters that dictate downstream HTTP redirections. TYPO3 Core relies on the GeneralUtility::sanitizeLocalUrl function to ensure user-controlled destination strings are confined to safe, local directory paths. This function serves as the central control mechanism for preventing open redirect vectors across both core components and third-party extensions.

The core issue lies in the validation method's failure to address browser-level URL parsing and normalization behavior. While the utility is designed to validate relative paths, it incorrectly classifies structurally malformed strings as local paths. This discrepancy exposes applications to Open Redirect (CWE-601) exploits, where malicious external domains can be disguised as benign internal links.

An attacker can exploit this flaw to orchestrate highly targeted spearphishing or credential harvesting campaigns. Users clicking on a trusted link containing the bypass payload are silently redirected to a malicious destination. This degrades the perceived trustworthiness of the host application, facilitating secondary exploitation vectors.

Root Cause Analysis

The root cause of CVE-2026-47347 is a parser differential between the server-side validation logic and client-side web browser normalization rules. When processing an input URL, GeneralUtility::sanitizeLocalUrl historically used a simple blocklist strategy. It scanned the target string for only three characters: the newline (\n), carriage return (\r), and the null byte (\x00).

If these three characters were absent, the function assumed the path was safe to treat as local. It failed to validate the presence of other control characters, such as vertical tabs (\v), form feeds (\f), or backslash delimiters (\). PHP's native parsing and string operations did not treat a sequence starting with backslashes (e.g., \\evil.com) as a valid absolute URL, leading the application to classify it as a relative path.

Conversely, modern web browsers, following the WHATWG URL Living Standard, auto-normalize backslashes to forward slashes before making network requests. When a browser receives a Location: \\\\attacker.com HTTP response header, it normalizes the target to //attacker.com. The browser parses this as a protocol-relative URL and redirects the user's connection to the external domain, bypassing the application's intended restrictions.

Code Analysis

Prior to the security patch, the vulnerable logic in typo3/sysext/core/Classes/Utility/GeneralUtility.php checked for forbidden control characters via strpbrk. It did not apply a structured character whitelist. This blocklist approach allowed any invalid characters not specified in the blocklist to flow to the redirection engine.

// Vulnerable Implementation
public static function sanitizeLocalUrl(string $url): string
{
    $sanitizedUrl = '';
    if (!empty($url)) {
        // Only checks for basic newline, carriage return, and null bytes
        if (strpbrk($url, "\n\r\x00") !== false) {
            static::getLogger()->notice('URL "{url}" contains unexpected whitespace and was denied as local url.', ['url' => $url]);
            return '';
        }
        // Downstream parsing continues, mistakenly allowing backslashes
        ...

The patch introduces a strict RFC 3986 compliance check, switching the design paradigm from a blocklist to a robust whitelist. It defines an explicit array of allowed characters containing alphanumerics, unreserved characters, and valid percent-encoding or scheme-delimiting symbols.

// Patched Implementation
public static function sanitizeLocalUrl(string $url, ServerRequestInterface $req = null): string
{
    $sanitizedUrl = '';
    if (!empty($url)) {
        $validUrlCharacters = [
            // Percent-Encoding
            '%',
            // Reserved Characters (gen-delims & sub-delims)
            ':', '/', '?', '#', '[', ']', '@',
            '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=',
            // Unreserved Characters (ALPHA & DIGIT)
            '-', '.', '_', '~',
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        ];
 
        // Remove all valid characters; if any remain, the URL is invalid
        $hasInvalidCharacters = str_replace($validUrlCharacters, '', $url) !== '';
        if ($hasInvalidCharacters) {
            static::getLogger()->notice('The URL "{url}" contains unexpected characters and was denied as local url.', ['url' => $url]);
            return '';
        }

By utilizing str_replace, the patched code effectively strips all legitimate URL characters from the input. If any character remains, the string contains illegal symbols such as backslashes or non-standard control characters. The function logs a notice and returns an empty string, completely preventing downstream execution of dangerous inputs.

Exploitation and Payload Analysis

Exploiting this vulnerability requires the presence of an endpoint that accepts a destination URL parameter and processes it via GeneralUtility::sanitizeLocalUrl before initiating a redirect. Standard vectors include authentication forms, language selection switches, or custom payment processing and back-to-origin flows.

An attacker crafts an exploitation vector by supplying a protocol-relative address masked with backslashes. For example, the input \\attacker-controlled-site.com is submitted as the return path. Since the server does not find any blocked control characters (\n, \r, or \x00), it allows the input to pass to the client browser via a Location header.

Other payload variants leverage mixed slashes and control characters to achieve the same result. Payloads such as \v//attacker-controlled-site.com or \x0c//attacker-controlled-site.com evade simplistic regex checks while inducing browser-level normalization. The visual structure of the target URL remains masked in the user's initial interface, decreasing the likelihood of detection prior to execution.

Impact Assessment and Defensive Posture

The severity of CVE-2026-47347 is rated as Medium with a CVSS v4.0 score of 5.3. Although it does not permit arbitrary code execution or direct compromise of local system files, the vulnerability significantly undermines the session integrity of application clients. An attacker can use the open redirect to masquerade external landing pages as trusted local modules.

This technique corresponds to MITRE ATT&CK technique T1566.002 (Spearphishing Link). Phishing filters and email security gateways often trust links targeting legitimate enterprise TYPO3 domains. By routing malicious links through the open redirect, attackers bypass automated detection, facilitating high-yield phishing and credential harvesting campaigns.

The EPSS score of 0.00484 indicates a low immediate probability of mass automated exploit campaigns, which is typical for open redirect vulnerabilities. However, because this vulnerability involves a core helper utility in TYPO3 CMS, any third-party extensions using sanitizeLocalUrl are equally exposed. Organizations should immediately prioritize patching to prevent targeted social engineering campaigns against their users.

Remediation and Detection Strategies

The primary remediation path is upgrading the TYPO3 installation to the patched releases. The TYPO3 security team has released security updates covering all active LTS and ELTS branches. Administrators should verify their core versions match or exceed 10.4.57 ELTS, 11.5.51 ELTS, 12.4.46 ELTS, 13.4.31 LTS, or 14.3.3 LTS.

If immediate patching is unfeasible, administrators can deploy defensive rules at the Web Application Firewall (WAF) layer. Because the exploit relies on raw or percent-encoded backslashes in query parameters, rules can be configured to drop incoming requests containing these patterns. A sample ModSecurity rule targetting the URI arguments and detecting double backslashes looks like this:

SecRule ARGS "@rx (?i)(?:\\|%5c){2,}[a-z0-9]" "id:1000099,phase:2,deny,status:400,log,msg:'Potential CVE-2026-47347 Open Redirect Bypass Attempt'"

Additionally, network-level intrusion detection systems (IDS) can flag these exploitation attempts. A Snort rule focusing on the raw parameters within incoming HTTP request payloads can alert administrators to validation bypass attempts:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"TYPO3 sanitizeLocalUrl Open Redirect Bypass Attempt"; flow:established,to_server; content:"/alt_intro.php"; http_uri; content:"\\"; http_uri; sid:1000001; rev:1;)

Official Patches

TYPO3Fix open redirect in GeneralUtility::sanitizeLocalUrl (Core/13.4 Branch)
TYPO3Apply strict whitelist matching (Main Branch)

Fix Analysis (2)

Technical Appendix

CVSS Score
5.3/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N
EPSS Probability
0.48%
Top 62% most exploited

Affected Systems

TYPO3 CMS Core

Affected Versions Detail

Product
Affected Versions
Fixed Version
TYPO3 CMS
TYPO3
< 10.4.5710.4.57 ELTS
TYPO3 CMS
TYPO3
11.0.0 - 11.5.5011.5.51 ELTS
TYPO3 CMS
TYPO3
12.0.0 - 12.4.4512.4.46 ELTS
TYPO3 CMS
TYPO3
13.0.0 - 13.4.3013.4.31 LTS
TYPO3 CMS
TYPO3
14.0.0 - 14.3.214.3.3 LTS
AttributeDetail
CWE IDCWE-601
Attack VectorNetwork (AV:N)
CVSS v4.05.3 (Medium)
EPSS Score0.00484
Exploit StatusNone (No Public Exploit)
CISA KEV StatusNot Listed
ImpactSubsequent System Integrity (SI:L)

MITRE ATT&CK Mapping

T1566.002Spearphishing Link
Initial Access
CWE-601
URL Redirection to Untrusted Site ('Open Redirect')

The web application redirects the user to an untrusted external URL supplied by user input.

References & Sources

  • [1]TYPO3 Security Advisory TYPO3-CORE-SA-2026-009
  • [2]CVE-2026-47347 Record
  • [3]TYPO3 Core Commit 22c2dd5398ebc4cb7aa4aa37e02cb39181dee0cd
  • [4]TYPO3 Core Commit 3ffc0835012c6199db0e1dc4b56a77147d8600e0
  • [5]CWE-601 Definition
  • [6]TYPO3 Security Guide
  • [7]TYPO3 Announce Mailing List
  • [8]TYPO3 Review System Log

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•10 minutes ago•CVE-2026-49982
8.2

CVE-2026-49982: Path Traversal Bypass via Type Confusion in node-tmp

A high-severity type-confusion path traversal vulnerability (CVE-2026-49982 / GHSA-7c78-jf6q-g5cm) exists in the node-tmp package version 0.2.6. The vulnerability allows remote attackers to bypass path validation checks by passing non-string data types such as Arrays or duck-typed Objects into options like prefix, postfix, or template. Because the library relies on the .includes() method without verifying the input type, standard array checks evaluate differently than string checks. Downstream string coercion subsequently restores the traversal sequence, allowing files and directories to be created outside the designated temporary directory root. This can result in arbitrary file writes and potential local file execution depending on application context.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 3 hours ago•CVE-2026-47349
5.3

CVE-2026-47349: Missing Authorization in TYPO3 CMS DataHandler Record Restoration

An authenticated backend user with access to the Recycler module in TYPO3 CMS can bypass write restrictions and restore soft-deleted records on pages or database tables they are not authorized to modify. This vulnerability resides in the core DataHandler class due to missing permission checks during 'undelete' operations.

Alon Barad
Alon Barad
2 views•7 min read
•about 3 hours ago•CVE-2026-11607
7.6

CVE-2026-11607: Broken Access Control in TYPO3 CMS Form Framework

CVE-2026-11607 is a critical broken access control vulnerability in TYPO3 CMS's Form Framework (ext:form). Authenticated backend users with access to the Form Framework can load unauthorized YAML configurations, bypassing file extension restrictions. This allows the execution of arbitrary SQL commands via the SaveToDatabase finisher, leading to privilege escalation to administrator level.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 4 hours ago•GHSA-G7R4-M6W7-QQQR
7.5

GHSA-G7R4-M6W7-QQQR: Path Traversal and Arbitrary File Read in esbuild Development Server on Windows

Improper validation of backslash character separators in esbuild's local development server allows path traversal on Windows systems.

Alon Barad
Alon Barad
3 views•7 min read
•about 5 hours ago•GHSA-GV7W-RQVM-QJHR
8.1

GHSA-GV7W-RQVM-QJHR: Remote Code Execution via Missing Binary Integrity Verification in esbuild Deno Integration

An issue was discovered in the Deno integration of the esbuild package. The module fails to verify the integrity of downloaded native binary packages from NPM registries before writing and executing them on the local filesystem. This allows an attacker who controls the NPM_CONFIG_REGISTRY environment variable or intercepts the network connection to execute arbitrary native code on the host machine.

Amit Schendel
Amit Schendel
10 views•6 min read
•about 6 hours ago•GHSA-CHGR-C6PX-7XPP
5.9

GHSA-chgr-c6px-7xpp: Thread-Safety Data Race in PyO3 Closure Wrapping

A thread-safety vulnerability exists in the PyO3 library versions prior to 0.29.0 due to a missing Sync trait bound on closure type parameters. This omission allows safe Rust code to register non-thread-safe closures as Python callables, leading to concurrent shared mutation and data races during multithreaded execution.

Amit Schendel
Amit Schendel
3 views•11 min read