CVE-2026-25497

8.8 HIGH

📋 TL;DR

This CVE describes a privilege escalation vulnerability in Craft CMS's GraphQL API where authenticated users with write access to one asset volume can modify or transfer assets belonging to any other volume, including restricted or private volumes. The vulnerability occurs because authorization is validated against the schema-resolved volume but the target asset is fetched by ID without verifying it belongs to the authorized volume. This affects Craft CMS installations with authenticated users who have asset write permissions.

💻 Affected Systems

Products:
  • Craft CMS
Versions: 4.0.0-RC1 to before 4.17.0-beta.1 and 5.9.0-beta.1
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Requires GraphQL API to be enabled and authenticated users with write access to at least one asset volume.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

An authenticated attacker with minimal permissions could gain unauthorized access to sensitive assets in restricted volumes, potentially modifying or exfiltrating confidential data, intellectual property, or user-uploaded content.

🟠

Likely Case

Malicious or compromised users with legitimate asset write permissions could access and manipulate assets in volumes they shouldn't have access to, leading to data integrity issues and unauthorized data access.

🟢

If Mitigated

With proper access controls and monitoring, the impact is limited to authenticated users only, but could still result in unauthorized cross-volume data manipulation if exploited.

🌐 Internet-Facing: HIGH
🏢 Internal Only: HIGH

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated access and knowledge of asset IDs, but the vulnerability itself is straightforward to exploit once authenticated.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 4.17.0-beta.1 and 5.9.0-beta.1

Vendor Advisory: https://github.com/craftcms/cms/security/advisories/GHSA-fxp3-g6gw-4r4v

Restart Required: No

Instructions:

1. Update Craft CMS to version 4.17.0-beta.1 or later for Craft 4 installations
2. Update Craft CMS to version 5.9.0-beta.1 or later for Craft 5 installations
3. Verify the update was successful by checking the version

🔧 Temporary Workarounds

Disable GraphQL API

all

Temporarily disable the GraphQL API if not required for functionality

Set 'enableGraphql' to false in config/general.php

Restrict Asset Volume Access

all

Review and tighten user permissions to minimize users with asset write access

🧯 If You Can't Patch

  • Implement strict monitoring of GraphQL API requests for unusual cross-volume asset access patterns
  • Apply network segmentation to isolate Craft CMS instances and restrict access to authenticated users only

🔍 How to Verify

Check if Vulnerable:

Check Craft CMS version via admin panel or by examining the composer.json file. If version is between 4.0.0-RC1 and before 4.17.0-beta.1, or before 5.9.0-beta.1, the system is vulnerable.

Check Version:

php craft --version

Verify Fix Applied:

After updating, verify the version is 4.17.0-beta.1 or later for Craft 4, or 5.9.0-beta.1 or later for Craft 5. Test that authenticated users can no longer modify assets across unauthorized volumes.

📡 Detection & Monitoring

Log Indicators:

  • Unusual GraphQL saveAsset mutation requests targeting assets across different volumes
  • Failed authorization attempts for asset modifications
  • Asset modification logs showing cross-volume activity

Network Indicators:

  • GraphQL API requests with saveAsset mutations containing asset IDs from multiple volumes
  • Increased GraphQL traffic from authenticated users

SIEM Query:

source="craft_logs" AND ("saveAsset" OR "GraphQL") AND ("volume" OR "asset") AND status="success" | stats count by user, asset_volume

🔗 References

📤 Share & Export