Loading...
Skip to main content

CVE-2026-45260 — Pimcore: Missing Authorization in pimcore/pimcore...

HIGH

Pimcore: Missing Authorization in WebDAV MOVE via unchecked asset move handling

Published May 27, 2026Updated July 10, 2026Source: osv

Summary

### Summary Pimcore's WebDAV asset endpoint exposes a `MOVE` operation through `/asset/webdav{path}` without adding an authentication plugin in the WebDAV controller. The `Tree::move()` implementation then performs asset mutation and deletion before checking a current Pimcore user or any asset permissions. An unauthenticated remote attacker who knows two existing asset paths in the same directory can send a WebDAV `MOVE` request that deletes the source asset. Authenticated low-privileged users may also be able to perform unauthorized asset move or overwrite operations because the move path does not enforce `rename`, `delete`, `create`, or `publish` permissions. ### Details The route for WebDAV is globally registered and accepts arbitrary trailing paths: ```yaml # bundles/CoreBundle/config/routing.yaml pimcore_webdav: path: /asset/webdav{path} defaults: { _controller: Pimcore\Bundle\CoreBundle\Controller\WebDavController::webdavAction } requirements: path: '.*' ``` The controller constructs a SabreDAV server but only attaches lock and browser plugins. It does not attach an authentication plugin or perform an explicit user/session check before starting the server: ```php # bundles/CoreBundle/src/Controller/WebDavController.php $publicDir = new Asset\WebDAV\Folder($homeDir); $objectTree = new Asset\WebDAV\Tree($publicDir); $server = new \Sabre\DAV\Server($objectTree); $server->setBaseUri($this->generateUrl('pimcore_webdav', ['path' => '/'])); $server->addPlugin($lockPlugin); $server->addPlugin(new \Sabre\DAV\Browser\Plugin()); $server->start(); ``` Most WebDAV file and folder operations perform permission checks through `isAllowed()`, but `Tree::move()` does not. In the overwrite path for a same-directory move, it deletes the source asset before resolving the current user: ```php # models/Asset/WebDAV/Tree.php if (dirname($sourcePath) == dirname($destinationPath)) { if ($asset = Asset::getByPath('/' . $destinationPath)) { $sourceAsset = Asset::getByPath('/' . $sourcePath); $asset->setData($sourceAsset->getData()); $sourceAsset->delete(); } ... } $user = \Pimcore\Tool\Admin::getCurrentUser(); $asset->setUserModification($user->getId()); $asset->save(); ``` `Asset::delete()` removes the asset without an internal permission gate: ```php # models/Asset.php public function delete(bool $isNested = false): void { ... $this->getDao()->delete(); ... $this->deletePhysicalFile(); } ``` Because the source asset deletion happens before `$user->getId()`, an unauthenticated request can still cause a deletion even if later execution fails when no current user is present. ### PoC Prerequisites: - Pimcore 2026.1.0 with the built-in WebDAV route enabled. - Two existing asset paths in the same directory, for example `/products/source.jpg` and `/products/existing.jpg`. - No valid session is required for the unauthenticated deletion path. PoC request: ```http MOVE /asset/webdav/products/source.jpg HTTP/1.1 Host: target.example Destination: http://target.example/asset/webdav/products/existing.jpg Overwrite: T ``` Result: The server will return an error after the deletion because `Tree::move()` later attempts to call `$user->getId()` when no current user exists. However, the source asset at `/products/source.jpg` has already been deleted by `$sourceAsset->delete()` before that failure point. For an authenticated low-privileged backend user without sufficient asset permissions, the same request can also reach the unchecked move path and may overwrite the destination asset or move an asset without the expected per-asset permission checks. ### Impact This issue allows remote unauthorized destruction of assets when paths are known or guessable. In Pimcore deployments where assets represent product images, documents, media, or DAM-managed business content, deletion or unauthorized overwrite can cause data loss, content integrity loss, and service disruption.

Advisory Timeline

  • First published May 27, 2026 (138 days ago).
  • Last revised July 10, 2026 — 44 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Composer
Update pimcore/pimcore to 11.5.17 or later
composer require "pimcore/pimcore:^11.5.17"
Composer
Update pimcore/pimcore to 2026.1.3 or later
composer require "pimcore/pimcore:^2026.1.3"
Composer
Update pimcore/pimcore to 12.3.7 or later
composer require "pimcore/pimcore:^12.3.7"

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (3)

Affects 1 ecosystem: packagist (1).

PackageEcosystemAffectedFixed In
pimcore/pimcore
packagist
10.0.8, 2.2.0, 2.2.1, 2.2.2 (+292 more)11.5.17
pimcore/pimcore
packagist
v2026.1.0, v2026.1.1, v2026.1.22026.1.3
pimcore/pimcore
packagist
v12.0.0, v12.0.0-RC1, v12.0.0-RC2, v12.0.1 (+22 more)12.3.7

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-862
    Missing AuthorizationMITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 8.1 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
High

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H

Frequently Asked Questions

What is CVE-2026-45260?
Pimcore: Missing Authorization in WebDAV MOVE via unchecked asset move handling This vulnerability has been assigned a severity rating of HIGH (CVSS score: 8.1/10).
How do I check if my project is affected by CVE-2026-45260?
CVE-2026-45260 affects pimcore/pimcore. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-45260 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
8.1

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-wc7j-g8wx-m2qx

Related CVEs

  • CVE-2026-55634
    CRITICAL

    Pimcore Vulnerable to Remote Code Execution via DataObject Class-Definition Field Name

  • CVE-2026-55220
    CRITICAL

    Pimcore Hotspotimage getDataFromResource() unrestricted Serialize::unserialize over object-store column (PHP Object Injection, CWE-502)

  • CVE-2026-55416
    HIGH

    Pimcore: SQL Injection in Custom Reports via Malicious Report Configuration

  • CVE-2026-55072
    HIGH

    Pimcore: ClassDefinition UID regex missing end anchor allows SQL injection via Block.php unquoted table name

  • CVE-2014-2921
    HIGH

    Pimcore Vulnerable to PHP Object Injection Attacks

  • CVE-2026-23493
    HIGH

    Pimcore ENV Variables and Cookie Informations are exposed in http_error_log

  • CVE-2026-23492
    HIGH

    Pimcore Has an Incomplete Patch for CVE-2023-30848

  • CVE-2025-27617
    MEDIUM

    Pimcore Vulnerable to SQL Injection in getRelationFilterCondition

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies