CVE-2026-109392 Overview
CVE-2026-109392 is a stored cross-site scripting (XSS) vulnerability in Pimcore through version 2026.3.1. The flaw resides in how the ExternalImage data object field stores and renders URL values without proper escaping. Authenticated backend users with data object edit permission can inject attribute-breaking payloads that execute JavaScript in the admin origin. The payload triggers when another user opens the version preview or diff views of the affected object. The weakness is tracked under CWE-79 (Improper Neutralization of Input During Web Page Generation).
Critical Impact
Authenticated attackers can hijack admin sessions, perform actions as higher-privileged users, and pivot further into Pimcore-managed content when victims open version preview pages.
Affected Products
- Pimcore platform through version 2026.3.1
- Pimcore admin-ui-classic-bundle (template preview_version.html.twig)
- Deployments exposing the Pimcore admin backend to multiple editorial users
Discovery Timeline
- 2026-10-12 - CVE-2026-109392 published to NVD
- 2026-10-13 - Last updated in NVD database
Technical Details for CVE-2026-109392
Vulnerability Analysis
The vulnerability exists in the Pimcore data object subsystem, specifically in the ExternalImage field type. When a backend user edits a data object, the ExternalImage field accepts a URL string that is persisted without server-side neutralization of HTML metacharacters. When Pimcore later renders the version preview or diff view, the stored URL is inserted directly into an HTML attribute context in the Twig template preview_version.html.twig. Because the value is not escaped for the attribute context, a crafted input can break out of the enclosing attribute and introduce new attributes or event handlers. The resulting script executes in the origin of the Pimcore admin interface, giving the attacker access to the victim user's authenticated session.
Root Cause
The root cause is missing output encoding when the stored URL is interpolated into the version preview template. The affected rendering path is documented in the ExternalImage.php model source and in the Twig template that composes the preview output. Reliance on the originating field for URL validation, rather than context-aware escaping at render time, allows the stored payload to reach the DOM intact.
Attack Vector
Exploitation requires an authenticated backend account with permission to edit data objects that contain an ExternalImage field. The attacker stores a URL value crafted to terminate the surrounding HTML attribute and inject script-executing markup. A second user with access to the version history then opens the preview or diff view, triggering script execution in the admin origin. User interaction from the victim is required, and the attacker needs only low backend privileges to plant the payload.
For technical details on the vulnerable code path, see the GitHub ExternalImage PHP Code and the GitHub Template File Preview.
Detection Methods for CVE-2026-109392
Indicators of Compromise
- Stored ExternalImage field values containing characters such as ", <, >, or on<event>= sequences that are not valid URL syntax.
- Unexpected object versions authored by low-privilege editorial accounts shortly before a privileged user reports anomalous admin behavior.
- Browser console errors or unexpected network requests originating from the Pimcore admin origin when opening version preview or diff views.
Detection Strategies
- Query the Pimcore database for ExternalImage field entries whose stored URL does not match a strict URL grammar.
- Review web server access logs for admin backend requests to version preview endpoints that correlate with sessions of privileged users.
- Hunt for outbound requests from administrator browsers to unknown domains immediately after rendering a Pimcore data object version.
Monitoring Recommendations
- Enable audit logging on data object edits and track field-level changes for ExternalImage attributes.
- Alert on repeated version views by administrative accounts following edits made by lower-privilege editors.
- Monitor Content Security Policy (CSP) violation reports from the admin interface for inline script or event handler executions.
How to Mitigate CVE-2026-109392
Immediate Actions Required
- Upgrade Pimcore to a release that remediates CVE-2026-109392 once published by the vendor; refer to the VulnCheck Advisory on Pimcore for current fix status.
- Audit backend user permissions and remove data object edit rights from accounts that do not require them.
- Review recent ExternalImage field entries for suspicious payloads and roll back affected object versions.
Patch Information
At publication, Pimcore versions through 2026.3.1 are affected. Monitor the GitHub Pimcore Repository for the fixed release and apply updates to both the core and the admin-ui-classic-bundle component. After upgrading, invalidate active admin sessions to ensure any previously injected payloads cannot continue to abuse valid cookies.
Workarounds
- Restrict data object edit permissions to a minimal set of trusted backend users until a patched release is deployed.
- Deploy a strict Content Security Policy on the admin backend that disallows inline scripts and event handler attributes.
- Place the Pimcore admin interface behind network controls or VPN access to reduce exposure of the backend to untrusted editors.
# Example Content Security Policy header for the Pimcore admin backend
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

