☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Pimcore logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 7.5 CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H 🐛 CWE-502
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-55220

CVE-2026-55220 Code Execution in Pimcore
📅 PUBLISHED: 2026-08-28 00:00 UTC 🔄 UPDATED: 2026-10-02 19:31 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.68%
👁️
0.68% probability
17.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1203
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Austria License: Open Source
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 7.5
AV: N Attack Vector Network
AC: H Attack Complexity High
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: H Integrity High
A: H Availability High
7.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

THREAT INTELLIGENCE REPORT — CVE-2026-55220

Executive Summary

CVE-2026-55220 is an unsafe deserialization vulnerability (CWE-502) in Pimcore's Hotspotimage data type, affecting all versions prior to 11.5.19, 12.3.10, and 2026.1.6. The flaw resides in Pimcore\Model\DataObject\ClassDefinition\Data\Hotspotimage::getDataFromResource() in models/DataObject/ClassDefinition/Data/Hotspotimage.php, where the __hotspots object-store column is passed to Pimcore\Tool\Serialize::unserialize() without an allowed-classes restriction when JSON decoding fails. This enables an attacker with write access to that column to achieve arbitrary file writes or code execution via PHP object injection and gadget chains. The vulnerability requires a secondary capability to write crafted serialized bytes, but the resulting impact — remote code execution on the Pimcore application server — is severe.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

Vulnerability Class

This is a deserialization of untrusted data vulnerability (CWE-502). The core defect is the use of PHP's unserialize() function on data originating from a database column without enforcing an allowed-classes allowlist. When PHP's unserialize() is called with user-controllable bytes, it can instantiate arbitrary classes defined in the application or its dependencies. Chaining multiple classes' magic methods (e.g., __destruct, __wakeup, __toString) allows an attacker to build "gadget chains" that reach dangerous sink functions such as file_put_contents(), eval(), or system().

Affected Code Path

The NVD description identifies the following specific components:

  • Class: Pimcore\Model\DataObject\ClassDefinition\Data\Hotspotimage
  • Method: getDataFromResource()
  • File: models/DataObject/ClassDefinition/Data/Hotspotimage.php
  • Serialization utility: Pimcore\Tool\Serialize::unserialize()
  • Database column: __hotspots (object-store column)

The vulnerability is triggered as follows:

  1. A Pimcore DataObject containing a Hotspotimage field is loaded from the database.
  2. The getDataFromResource() method attempts to parse the __hotspots column value.
  3. The method first attempts JSON decoding; if that fails, it falls back to Pimcore\Tool\Serialize::unserialize().
  4. The fallback call is made without an allowed-classes restriction, meaning any class loaded in the application's runtime can be instantiated.
  5. If an attacker has planted a malicious serialized payload in the __hotspots column, PHP object injection occurs, triggering magic methods and potentially leading to code execution.

The NVD description notes that the related ImageGallery, Block, and Video callers use the same fallback pattern, but the June fix only addresses the Hotspotimage caller. This leaves the other three data types potentially vulnerable to the same class of attack.

Attack Surface

  • Precondition: The attacker needs the ability to write crafted PHP serialized bytes into the __hotspots column of a Pimcore DataObject. This implies a separate vulnerability (e.g., SQL injection, a flaw in the admin file upload facility, a plugin vulnerability, or an exposed API endpoint) that allows arbitrary database writes.
  • Trigger: Any user or process that loads the affected DataObject triggers the vulnerable deserialization. This includes:
    • Admin panel previews
    • Frontend pages displaying hotspot image data
    • API responses
    • Background jobs (cron/system commands) that read DataObjects
  • Exploitability Severity: Requires low privileges to achieve the prerequisite write, but the attack vector can be network-based if the write primitive is available via HTTP requests.

Technical Root Cause

The unsafe fallback from JSON decoding to PHP serialization creates a dual-format parsing path. While JSON is a strict, safe format, PHP serialized strings can encode object graphs with class references. By not restricting classes during unserialize(), the application effectively accepts a serialized object graph from the database and materializes it as native PHP objects — a textbook PHP Object Injection (POI) scenario.


Exploitation Scenarios

Attack Chain Overview: The attack chain for CVE-2026-55220 involves two stages: (1) planting a malicious payload in the __hotspots column, and (2) triggering the unsafe deserialization.

Step 1: Reconnaissance and Target Identification

  • The attacker identifies a Pimcore instance running a vulnerable version (any version prior to 11.5.19, 12.3.10, or 2026.1.6). Discovery can be performed via:
    • Version disclosure in HTTP response headers
    • Fingerprinting of /admin login pages, static asset paths, or the Pimcore vendor directory
    • CMS fingerprinting tools that recognize Pimcore's distinctive asset paths (e.g., /bundles/pimcoreadmin/js/)
  • The attacker then probes for a write primitive into the database. Common targets include:
    • Public-facing forms that write to DataObjects (e.g., user-submitted content with image hotspot metadata)
    • API endpoints of Pimcore's REST/GraphQL interfaces that accept unsanitized input
    • Admin-panel functionality exposed through weak credentials or CSRF
    • Plugin or extension vulnerabilities that provide SQL injection or file write capabilities

Step 2: Triggering the Vulnerability Class

  • The attacker crafts a PHP serialized payload that, when deserialized, initializes a gadget chain. Since the serialized data is stored in the __hotspots column, the attacker must ensure the payload survives database storage and retrieval without corruption.
  • The payload is written to the column via the discovered write primitive.
  • When any code path loads the affected DataObject, getDataFromResource() is invoked. The method attempts JSON decoding first; because the payload is PHP serialized format (not JSON), the JSON decode fails, and execution falls through to the unsafe unserialize() call.

Step 3: Payload Execution Mechanism (Class-Level)

  • At the vulnerability-class level, PHP object injection occurs. The attacker's serialized string contains a specifier for one or more instantiable classes. When unserialize() processes it, PHP:
    1. Instantiates the specified objects
    2. Invokes magic methods (__wakeup(), __destruct(), __toString(), __call()) during object construction or destruction
  • Bundled gadget chains in Pimcore's dependency tree (e.g., Symfony components, Guzzle, Monolog) provide a path from magic-method invocation to dangerous sink functions. Common chains lead to:
    • file_put_contents() — arbitrary file write (e.g., writing a webshell into the web root)
    • call_user_func() / assert() — direct code execution
    • system() / exec() — OS command execution
  • Because the NVD description states "arbitrary file writes or code execution through bundled gadget chains," the exact chain depends on the application's dependency versions.

Step 4: Post-Exploitation Impact

  • Once code execution is achieved, the attacker typically escalates to:
    • Establishing a persistent backdoor (webshell or scheduled task)
    • Dumping database credentials and sensitive Pimcore data (assets, users, PII)
    • Pivoting to the underlying host and other internal network assets
    • Exfiltrating intellectual property (e.g., unpublished content, customer data)
  • The Pimcore application server frequently has access to shared storage, message queues, and database clusters, expanding the blast radius beyond the web tier.

Note on PoC Availability

No public proof-of-concept is available at the time of writing. The attack chain above is inferred strictly from the vulnerability class (CWE-502) and the data flow described in the NVD entry. Specific gadget chains would depend on the exact dependency versions bundled with the Pimcore installation and are not enumerated here.


Proof of Concept Intelligence

PoC Status: None public. There are no known exploit code releases, Nuclei templates, or Metasploit modules for CVE-2026-55220 as of the report date.

Why Exploitation May Still Be Possible

  1. Write Primitive Availability: The prerequisite write capability to the __hotspots column is not patched by the CVE-2026-55220 fix. Any separate vulnerability that allows database writes remains exploitable, and the unsafe deserialization then becomes the post-write trigger.
  2. Incomplete Patch Coverage: The NVD description explicitly states that the June fix addresses the Hotspotimage caller only, while the related ImageGallery, Block, and Video callers use identical fallback patterns. If these are not also fixed, attackers can pivot to these other data types.
  3. Pre-existing Payloads: Serialized payloads already planted in the database before the patch is applied will still deserialize on load even after the application code is updated, unless the patch adds validation at the point of data retrieval.
  4. Dependency Gadgets: Gadget chains depend on third-party libraries, which are frequently shared across Pimcore versions. Even if a specific Pimcore patch restricts classes, the underlying libraries may offer new chains after dependency updates, keeping the deserialization risk alive.

Resources to Monitor for Future PoC Disclosure

  • Pimcore GitHub Advisories: Monitor the Pimcore security advisory page and GitHub repository for issue comments and pull requests referencing CVE-2026-55220.
  • Exploit-DB and Packet Storm: Check for mirror posts of any exploit code or blog write-ups.
  • Nuclei Template Repositories: ProjectDiscovery's public template repository and third-party mirrors may gain a template when a PoC is weaponized.
  • Security Research Blogs: Watch for analysis by researchers who map PHP gadget chains in Symfony and other Pimcore dependencies.
  • VulnDB and OSV: Monitor alerts for updates to CVE-2026-55220 entries as new details emerge.

Impact Assessment

Aspect Assessment
CVSS Score N/A (vendor has not assigned a public score)
Local vs. Remote Requires prior write primitive (local or authenticated remote)
Privileges Required Low (write to a database column)
Confidentiality Impact High (database compromise, PII exposure)
Integrity Impact High (arbitrary file write, data tampering)
Availability Impact High (server compromise, potential DoS via system calls)
Blast Radius Application server, database server, interconnected services
Affected Systems All Pimcore versions < 11.5.19, < 12.3.10, < 2026.1.6

Business Impact

  • Data Breach Risk: Pimcore stores customer data, product catalogs, digital assets, and content in its object store. Successful exploitation grants the attacker full database read/write access.
  • Reputational Damage: Compromise of a CMS/experience management platform commonly leads to website defacement, malware injection into customer-facing pages, or data leaks that attract regulatory attention (GDPR, CCPA).
  • Financial Loss: Incident response, forensic investigation, notification costs, and potential ransomware-related downtime can be substantial.

OWASP Impact Mapping

  • Injection: This is a form of injection where serialized data is injected into the application's object instantiation logic.
  • Insecure Deserialization: CWE-502 is a top-10 OWASP risk class; this CVE maps directly to OWASP A08:2021 — Software and Data Integrity Failures.

Who Should Care

  • Pimcore-Hosting Enterprises: Any organization using Pimcore as their CMS/DXP.
  • Managed Service Providers: MSPs operating multi-tenant Pimcore deployments.
  • E-commerce Operators: Pimcore's product information management (PIM) and digital asset management (DAM) features make it attractive to retailers, for whom compromise means lost revenue and customer trust.
  • Government/Healthcare: Entities in regulated industries face heightened compliance consequences.

Detection Guidance

This section provides detection rules for the five primary detection categories. These rules are derived from the vulnerability mechanics described in the NVD entry and are intended to detect the write of malicious serialized payloads and subsequent exploitation attempts.

Sigma Rule

title: Pimcore Hotspotimage Unsafe Deserialization - Database Payload Write
id: 7f3a9c1e-8d42-4b6a-9d18-9c2d11d43a9e
status: experimental
description: Detects attempts to write PHP serialized payloads into Pimcore DataObject hotspot fields, indicating potential CVE-2026-55220 exploitation.
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2026-55220
author: Valtersit Threat Intelligence
date: 2026/06/15
tags:
    - attack.t1203
    - attack.t1211
    - cve.2026.55220
logsource:
    category: application
    product: pimcore
    definition: 'Requires Pimcore application logs and/or database audit logs'
detection:
    selection_json_fail:
        # Pimcore may log failed JSON decode attempts for hotspot data
        event.category: deserialization
        log.message|contains: 'json_decode'
        log.message|contains: 'Hotspotimage'
        log.message|contains: 'getDataFromResource'
    selection_serialize_calls:
        # Detect unserialize calls with non-JSON payload on hotspot column
        log.message|contains: 'unserialize'
        log.message|contains: '__hotspots'
        log.message|contains: 'O:'          # PHP object serialization signature
    condition: selection_json_fail or selection_serialize_calls
    level: high
falsepositives:
    - Legitimate legacy data stored in Pimcore's dual-format hotspot columns
    - Admin operations migrating old data formats
fields:
    - source.ip
    - user.name
    - pimcore.object_id
    - pimcore.class_name

YARA Rule

rule Pimcore_Hotspotimage_Unsafe_Deserialize_Payload
{
    meta:
        author = "Valtersit Threat Intelligence"
        description = "Detect PHP serialized payloads targeting Pimcore Hotspotimage __hotspots column (CVE-2026-55220)"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-55220"
        date = "2026-06-15"
        cve_id = "CVE-2026-55220"
        severity = "high"

    strings:
        // PHP object serialization signature: O:<length>:"ClassName"
        $php_obj = /O:\d+:"/
        
        // Pimcore class references commonly in gadget chains
        $pimcore_class_a = "Pimcore\\Model\\DataObject"
        $pimcore_class_b = "Pimcore\\Tool\\Serialize"
        $pimcore_class_c = "Pimcore\\File"
        
        // Common gadget chain sink classes
        $gadget_sink_a = "Symfony\\Component\\Process"
        $gadget_sink_b = "GuzzleHttp\\Psr7"
        $gadget_sink_c = "Monolog\\Handler"
        
        // Hotspot column identifier
        $hotspot_field = "__hotspots"

    condition:
        // Look for serialized object bytes in database dumps, HTTP payloads, or log captures
        $php_obj and any of ($pimcore_class*) and 2 of ($gadget_sink*)
        or
        $php_obj and $hotspot_field and 3 of ($gadget_sink*)
        or
        // Network capture of the write request
        $hotspot_field and any of ($gadget_sink*) and $php_obj
}

Suricata IDS Rule

alert http any any -> any any (
    msg:"Pimcore CVE-2026-55220 Unsafe Deserialization Attempt - Hotspot Payload Write";
    sid:2026552201;
    rev:1;
    metadata:attack_target_server, deployment_dmz, cve CVE-2026-55220, tag_pimcore;
    reference:url,nvd.nist.gov/vuln/detail/CVE-2026-55220;
    flow:established,to_server;
    content:"__hotspots";
    http_client_body;
    pcre:/O:\d+:"/;
    pcre:/(?:Pimcore|Symfony|Guzzle|Monolog)/;
    classtype:attempted-admin;
    priority:1;
)

Elastic Detection

// Elastic EQL rule — Detect serialized payload writes to Pimcore hotspot fields
sequence by host.name, process.entity_id
  [ network where event.outcome == "success" and
    event.category == "network" and
    network.protocol == "http"
  ]
  [ process where event.category == "process" and
    process.command_line.keyword : ("*__hotspots*", "*unserialize*", "*O:*")
  ]
  [ file where event.category == "file" and
    file.name : "*Hotspotimage*" and
    file.path : "*DataObject*"
  ]

Splunk SPL Query

index=* OR sourcetype="pimcore:app"
| earliest=-24h
| search (
    ("unserialize" OR "Pimcore\\Tool\\Serialize" OR "getDataFromResource")
    AND ("__hotspots" OR "Hotspotimage")
    AND ("O:" OR "PHP Object" OR "serialize")
)
| eval cve_id = "CVE-2026-55220"
| eval severity = "high"
| table _time, host, source, sourcetype, user, message
| sort - _time

Wazuh OSSEC Rule

<group name="pimcore,deserialization,">
  <rule id="495903" level="12" frequency="5" timeframe="60">
    <decoded_as>json</decoded_as>
    <match>Hotspotimage</match>
    <match>getDataFromResource</match>
    <match>json_decode</match>
    <match>unserialize</match>
    <description>Pimcore CVE-2026-55220: Unsafe deserialization detected in Hotspotimage data loading. Potential code execution attempt.</description>
    <group>cve-2026-55220,attack.t1203,</group>
    <info type="cve">https://nvd.nist.gov/vuln/detail/CVE-2026-55220</info>
  </rule>

  <rule id="495904" level="8">
    <decoded_as>http</decoded_as>
    <match>__hotspots</match>
    <regex>O:\d+:"</regex>
    <description>Pimcore CVE-2026-55220: Network request carrying PHP serialized hotspot payload.</description>
    <group>cve-2026-55220,attack.t1203,</group>
  </rule>
</group>

Mitigation & Patch Guidance

Patch Confidence: 0/4 — UNPATCHED. No patch evidence exists in tracked sources at report time. The NVD description references a "June fix" but provides no verifiable patch commit, advisory ID, or official vendor post. This means the fix may be unreleased, partially applied, or not yet publicly confirmed through standard channels.

1. Immediate Mitigations (No Patch Available)

  • Restrict Database Write Access: Audit and minimize any user roles, API endpoints, or plugin functionality that can write to DataObject columns, especially __hotspots. Implement least-privilege access controls.
  • Input Validation/Rejection: Deploy a web application firewall (WAF) rule to block HTTP requests containing O:<digit>:" (PHP object serialization signature) in any body parameter that Pimcore forwards to its DataObject layer.
  • Database-Level Protection: Add a database trigger or application-layer validation that rejects inserts/updates to the __hotspots column where the value does not conform to valid JSON format. Because the vulnerability triggers when JSON decoding fails, enforcing JSON-only storage eliminates the attack path.
  • Disable Affected Data Types: If feasible, remove or disable Hotspotimage (and the related ImageGallery, Block, Video) data types from active Pimcore classes. This breaks the vulnerable code path.

2. Patch/Upgrade Steps

  • Confirm Fix Availability: Regularely check the Pimcore GitHub repository (https://github.com/pimcore/pimcore) for tagged releases and security commits. The NVD description references versions 11.5.19, 12.3.10, and 2026.1.6 as containing the fix for the Hotspotimage caller.
  • Upgrade Path:
    • For users on the 11.x branch: Upgrade to 11.5.19 or later.
    • For users on the 12.x branch: Upgrade to 12.3.10 or later.
    • For users on the 2026 branch: Upgrade to 2026.1.6 or later.
  • Before Upgrading:
    • Back up the application, database, and all assets.
    • Review PHP version compatibility (Pimcore requires PHP 8.1+ for recent versions).
    • Test the upgrade in a staging environment with the class definitions that use Hotspotimage.
  • After Upgrading:
    • Verify that the patch fully addresses all affected callers. The NVD description explicitly states that ImageGallery, Block, and Video use the same fallback pattern but that the June fix only changes the Hotspotimage caller. If those data types remain vulnerable, plan for additional defensive measures or vendor escalation.

3. Long-Term Hardening

  • Runtime Deserialization Protection: Implement a PHP autoloader or polyfill that enforces an allowed-classes allowlist for all unserialize() calls across the application. Tools like phpggc can generate payloads, but defensive wrappers (e.g., AllowedClassesEnforcer) can prevent object instantiation for non-whitelisted classes.
  • Dependency Management: Maintain a Software Bill of Materials (SBOM) for all Pimcore dependencies. Track versions of Symfony components, Guzzle, Monolog, and other libraries that commonly provide gadget chains in PHP deserialization attacks.
  • Application Logging and Monitoring: Enable audit logging for all database writes to DataObject columns. Monitor for anomalies such as writes to __hotspots that do not come from the admin panel.
  • Network Segmentation: Ensure the Pimcore application server is isolated from critical infrastructure. If compromised, the attacker should not be able to reach database clusters, CI/CD systems, or internal file shares.
  • Frequent Security Scans: Run vulnerability scans with tools that check for CWE-502 in Pimcore and its plugin ecosystem. Subscribe to Pimcore security mailing lists and GitHub security advisories.
  • Incident Response Readiness: Develop a playbook specific to Pimcore compromise. Include procedures for database forensic capture, webshell hunting, and user credential resets.

Workaround Compensating Control

Because the vulnerability requires the attacker to write serialized bytes to the database column, implementing a strict JSON-only validation at the ORM layer (or a custom DataObject class definition) can fully neutralize the attack vector without a vendor patch. This should be considered a high-priority compensating control until the vendor fix is publicly confirmed.


References

  1. NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-55220 — Official NVD record with the CNA description parsed above.

  2. Pimcore GitHub Repository: https://github.com/pimcore/pimcore — Monitor this repository for security-related commits, especially those touching models/DataObject/ClassDefinition/Data/Hotspotimage.php after the June 2026 timeframe.

  3. Pimcore Security Advisory Page: https://github.com/pimcore/pimcore/security/advisories — Check for a formal advisory for CVE-2026-55220, including version-specific release notes.

  4. CWE-502 Reference: https://cwe.mitre.org/data/definitions/502.html — MITRE's authoritative description of Deserialization of Untrusted Data, the weakness class for this CVE.

  5. OWASP A08:2021 — Software and Data Integrity Failures: https://owasp.org/Top10/A08_2021-Software_and_Data_Integrity_Failures/ — Industry context for the risk category this CVE falls under.


Known Threat Actor Activity

No known threat actor campaigns, exploit-in-the-wild evidence, or ransomware group activity is associated with CVE-2026-55220 as of this report date. EPSS scoring is not yet available from FIRST.org. The CISA KEV catalog has not listed this CVE.


Report generated by Valtersit Threat Intelligence — v1.0 | Classification: TLP:CLEAR | Date: 2026-06-15

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-55220/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.