Sep 1, 2026·5 min read·3 visits
Architectural unification of TYPO3 entry points broke the referrer-based isolation boundary, allowing frontend scripts (such as those injected via XSS) to make unauthorized administrative requests on behalf of active backend users.
CVE-2026-19418 is a high-severity origin validation vulnerability in TYPO3 CMS that enables Cross-Site Request Forgery (CSRF) and access control bypasses. Due to architectural consolidation of entry points in version 13.0, the core ReferrerEnforcer fails to isolate backend endpoints from the frontend, allowing an attacker with frontend script execution capabilities to perform unauthorized administrative actions.
CVE-2026-19418 represents a regression in the boundary isolation mechanisms of the TYPO3 CMS core, specifically affecting the Backend (ext:backend) and Install Tool (ext:install) subcomponents. In TYPO3, administrative and configuration endpoints are protected against unauthorized requests by evaluating the request origin.
Historically, this boundary was maintained by comparing the referrer path against the physical script directories. The architectural consolidation in TYPO3 v13.0, which unified the entry points for frontend and backend under the site root script, unintentionally disabled this protection mechanism.
The vulnerability is classified under CWE-346 (Origin Validation Error) and CWE-352 (Cross-Site Request Forgery). The consequence is a cross-application security boundary failure, permitting frontend code to interact seamlessly with sensitive administrative routes.
The flaw lies within the referrer verification logic implemented in TYPO3\CMS\Core\Http\Security\ReferrerEnforcer. Prior to TYPO3 v13.0, backend routes resolved to a sub-path such as https://example.com/typo3/. This distinct subfolder was matched against the $this->requestDir parameter during request processing.
In TYPO3 v13.0, both frontend and backend entry points were consolidated to /index.php at the site root. As a consequence, the resolved $this->requestDir parameter became /. When evaluating a request, the enforcer executes str_starts_with($referrer, $requestDir) to determine same-origin access.
Because every frontend URL begins with the site root path, any request initiated from a frontend page (e.g., https://example.com/blog) is incorrectly marked as TYPE_REFERRER_SAME_ORIGIN | TYPE_REFERRER_SAME_SITE. This misclassification treats generic frontend origins with the same authority as backend admin panels, breaking the privilege boundary.
The vulnerable component in ReferrerEnforcer.php evaluated referrers using a generic comparison against the request directory.
// Vulnerable code in TYPO3 v13.0.0 - 13.4.33
protected function resolveReferrerType(ServerRequestInterface $request, string $requestHost, string $requestDir): int
{
$referrer = $request->getServerParams()['HTTP_REFERER'] ?? '';
if ($referrer === '') {
return self::TYPE_REFERRER_EMPTY;
}
// All paths starting with the root request directory (/) were treated as Same-Origin
if (str_starts_with($referrer, $requestDir)) {
return self::TYPE_REFERRER_SAME_ORIGIN | self::TYPE_REFERRER_SAME_SITE;
}
// ...
}The patch addresses this structural vulnerability by making ReferrerEnforcer abstract and establishing discrete enforcers for the backend and the install tool. The backend enforcer uses BackendEntryPointResolver to dynamically resolve the explicit administrative subfolder path, while the install tool enforcer explicitly validates the exact query parameters of the entry point.
// Patched backend logic in TYPO3 v13.4.34 / 14.3.6
protected function resolveReferrerType(ServerRequestInterface $request): int
{
$referrer = $request->getServerParams()['HTTP_REFERER'] ?? '';
if ($referrer === '') {
return self::TYPE_REFERRER_EMPTY;
}
// Dynamically retrieve the explicit backend entry point (e.g., /typo3/)
$entryPointUri = $this->backendEntryPointResolver->getUriFromRequest($request);
if (str_starts_with($referrer, (string)$entryPointUri)) {
return self::TYPE_REFERRER_SAME_ORIGIN | self::TYPE_REFERRER_SAME_SITE;
}
// Generic site domain referrers are strictly classified as Same-Site (non-privileged)
$requestHost = rtrim($this->resolveRequestHost($request), '/') . '/';
if (str_starts_with($referrer, $requestHost)) {
return self::TYPE_REFERRER_SAME_SITE;
}
return 0;
}An attacker can exploit this vulnerability to perform unauthorized actions by chaining it with a frontend scripting capability, such as stored or reflected Cross-Site Scripting (XSS). The vulnerability requires an active session of a TYPO3 backend administrator.
When the administrator visits a frontend page containing the attacker's payload, the browser automatically executes the script. Since the script is running under the site's domain context, the browser will attach the administrator's active session cookies to any requests directed to the backend route.
The payload issues a fetch or XMLHttpRequest request to administrative endpoints. The browser appends the Referer header corresponding to the current frontend page. Due to the vulnerable ReferrerEnforcer logic, the TYPO3 core accepts this referrer as identical to the backend origin, executing the payload actions.
// Conceptual XSS payload running on the frontend domain
fetch('https://victim-typo3.com/typo3/index.php?route=/ajax/some-admin-action', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify({
action: 'create_admin',
username: 'backdoor_user',
password: 'Password123!'
}),
credentials: 'include' // Attaches administrative session cookies
});The overall security impact is high, as defined by its CVSS score of 7.3. Exploitation leads to complete administrative compromise of the CMS instance, allowing attackers to manipulate system configurations, dump database contents, and execute arbitrary code on the underlying web server.
The attack path can be modeled as follows:
Because the Install Tool endpoints are also affected, attackers can write files, modify database tables, or install malicious extensions to secure persistent web shells, escalating the initial client-side execution to remote code execution (RCE) on the host environment.
The primary and most effective remediation is upgrading the TYPO3 core. Administrators running TYPO3 v13 must upgrade to version 13.4.34 LTS or later, and those on v14 must upgrade to version 14.3.6 LTS or later.
When immediate upgrading is not possible, organizations should deploy a strict Content Security Policy (CSP). Restricting the script sources (script-src) to nonces or trusted hashes and disabling 'unsafe-inline' prevents the execution of the initial XSS vectors that trigger the CSRF bypass.
Additionally, Web Application Firewalls (WAFs) can be configured to inspect backend requests. Any request targeting administrative paths under /typo3/ that contains a Referer header lacking the explicit backend subdirectory prefix should be dropped or flagged for investigation.
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N| Product | Affected Versions | Fixed Version |
|---|---|---|
TYPO3 CMS TYPO3 Association | >= 13.0.0, < 13.4.34 | 13.4.34 LTS |
TYPO3 CMS TYPO3 Association | >= 14.0.0, < 14.3.6 | 14.3.6 LTS |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-346, CWE-352 |
| Attack Vector | Network (requires administrative user session & client-side script execution) |
| CVSS Score | 7.3 (High) |
| EPSS Score | 0.00213 (Percentile: 11.47%) |
| Impact | Full Administrative Compromise / Unauthorized Configuration Changes |
| Exploit Status | poc |
| KEV Status | Not Listed |
The software does not properly verify that the source of a request is valid or expected, allowing origin validation errors and potential CSRF bypasses.
An authentication oracle vulnerability exists in Filament before 4.12.5 and 5.7.5. The application initiates MFA challenge workflows prior to verifying user authorization policies, allowing unauthenticated attackers to validate guessed credentials.
A multi-factor authentication bypass vulnerability exists in Filament (Laravel full-stack framework panels) due to improper time-step tracking of Time-Based One-Time Password (TOTP) codes. By submitting valid TOTP codes from an older time window within the drift allowance, an attacker with a user's password can bypass the single-use MFA guarantee and obtain unauthorized account access.
CVE-2026-84304 is a high-severity uncontrolled resource consumption vulnerability in gRPC-Go, the Go implementation of the gRPC framework. The issue stems from a memory amplification flaw inside the HTTP/2 DATA frame processing subsystem. Remote, unauthenticated attackers can exploit this vulnerability by sending a high volume of heavily fragmented, tiny DATA frames within multiplexed concurrent streams. This causes gRPC-Go servers to allocate excessive internal metadata structures on the Go heap, leading to severe heap memory amplification, intense garbage collection thrashing, and process termination due to Out-of-Memory (OOM) conditions.
CVE-2026-79675 is a critical command injection vulnerability in NLTK versions prior to 3.10.3 that permits remote attackers to execute arbitrary code on the hosting system. This vulnerability stems from an incomplete mitigation of a previous vulnerability, CVE-2026-12841. While NLTK verified global JVM options configured through the library's setup routines, it failed to perform equivalent safety checks on options provided during per-call invocations of Stanford NLP Java wrappers. Attackers controlling these parameters can pass dangerous Java configuration options to the system shell, bypassing security boundaries to spawn interactive processes or load untrusted Java archives.
A vulnerability in Django REST Framework (DRF) before version 3.17.2 allows remote attackers to bypass the native Django DATA_UPLOAD_MAX_MEMORY_SIZE limits. When parsing JSON or URL-encoded request bodies, DRF's JSONParser and FormParser read directly from the low-level HTTP network stream, bypassing Django's high-level request size checks and causing Denial of Service (DoS) via resource exhaustion.
A directory traversal vulnerability exists in pacquet, the Rust port of pnpm. When executing an install with the --trust-lockfile flag enabled, a crafted pnpm-lock.yaml file bypasses resolution-policy verification. This allows an attacker to inject path traversal sequences into package names or versions, leading to symbolic links being written outside the workspace directory.