Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:L/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Requires a valid asset-creation GraphQL token (PR:L); SSRF reaches systems beyond the CMS boundary (S:C); GET-only requests yield partial confidentiality and limited integrity impact with no availability effect.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Craft CMS versions >= 5.0.0-RC1 before 5.10.6 and >= 4.0.0-RC1 before 4.18.2 contain a server-side request forgery vulnerability in the GraphQL save<Volume>Asset mutation, which fetches an attacker-supplied URL server-side. The anti-SSRF validation is incomplete: validateIp() does not cover CGNAT (100.64.0.0/10) or NAT64 (64:ff9b::/96) ranges, and the only IP check runs after the request has already been issued. An attacker holding a GraphQL token scoped only to asset-creation permissions can disclose internal HTTP content from CGNAT/NAT64 targets, force outbound GET requests to internal hosts (including RFC1918, loopback, and metadata endpoints), and enumerate internal services.
AnalysisAI
Server-side request forgery in Craft CMS's GraphQL API exposes internal networks and cloud metadata endpoints to attackers holding asset-creation-scoped tokens. The save<Volume>Asset GraphQL mutation fetches caller-supplied URLs server-side, and the validateIp() guard omits CGNAT (100.64.0.0/10) and NAT64 (64:ff9b::/96) ranges while also executing after the HTTP request has already been dispatched - meaning the check cannot prevent the unauthorized outbound connection. Affected are all 5.x installations from 5.0.0-RC1 through 5.10.5 and all 4.x installations from 4.0.0-RC1 through 4.18.1; no public exploit has been identified at time of analysis and the vulnerability is not listed in CISA KEV.
Technical ContextAI
Craft CMS (CPE: cpe:2.3:a:craftcms:cms) is a PHP-based content management system exposing a GraphQL API through which assets can be created via the save<Volume>Asset mutation. CWE-918 (Server-Side Request Forgery) describes the root cause class: user-controlled input - here a URL - is passed to a server-side HTTP client without adequate destination validation. The anti-SSRF control, validateIp(), maintains a blocklist of private address ranges but fails to include the CGNAT range (100.64.0.0/10, standardized in RFC 6598 and commonly used by ISPs and cloud carrier-grade NAT environments) and the NAT64 well-known prefix (64:ff9b::/96, RFC 6052, used in IPv6-only environments to reach IPv4 services). Even the ranges that are blocked suffer from a race condition in validation logic: the IP check is applied post-request rather than as a pre-flight guard, so the outbound HTTP GET has already been issued before any rejection occurs. This design flaw means any address reachable from the CMS host - including cloud instance metadata services, RFC1918 hosts, and loopback - can be probed regardless of the incomplete blocklist.
RemediationAI
Upgrade Craft CMS to version 5.10.6 for 5.x installations or 4.18.2 for 4.x installations, as documented in the vendor advisory at https://github.com/craftcms/cms/security/advisories/GHSA-2mx8-9ww7-p27x. If immediate patching is not feasible, restrict asset-creation GraphQL permissions to only fully trusted internal identities and revoke or rotate any API tokens with asset-creation scope that are broadly distributed, including those used in CI/CD pipelines. At the network layer, implement egress firewall rules on the CMS host to block outbound HTTP connections to CGNAT space (100.64.0.0/10), NAT64 prefixes (64:ff9b::/96), RFC1918 ranges, loopback addresses, and cloud metadata endpoints (169.254.169.254, fd00:ec2::254); note that this may interfere with legitimate external asset-fetching workflows if those resolve to affected ranges, so test against production traffic patterns first. Audit the GraphQL schema permissions configuration for any guest or public token grants that may have reduced the effective authentication barrier below what the description assumes.
Cayin CMS suffers from an authenticated OS semi-blind command injection vulnerability using default credentials. Rated c
Multiple integer underflows in the icmLut_allocate function in International Color Consortium (ICC) Format library (iccl
phpKF CMS 3.00 Beta allows unauthenticated PHP file upload by disguising it as a PNG, then renaming it for execution. Po
Deserialization of Untrusted Data in the Sitecore.Security.AntiCSRF (aka anti CSRF) module in Sitecore CMS 7.0 to 7.2 an
Deserialization of Untrusted Data in the anti CSRF module in Sitecore through 9.1 allows an authenticated attacker to ex
SQL injection vulnerability in hava_post.php in Havalite CMS 1.1.0 and earlier allows remote attackers to execute arbitr
Unrestricted file upload vulnerability in hava_upload.php in Havalite CMS 1.1.0 and earlier allows remote attackers to e
Cross-site request forgery (CSRF) vulnerability in Ilch CMS allows remote attackers to hijack the authentication of admi
Multiple cross-site scripting (XSS) vulnerabilities in Havalite 1.0.4 and earlier allow remote attackers to inject arbit
A security vulnerability in juzaweb CMS (CVSS 6.3). Risk factors: public PoC available.
A security vulnerability in juzaweb CMS (CVSS 6.3). Risk factors: public PoC available.
A security vulnerability in juzaweb CMS (CVSS 6.3). Risk factors: public PoC available.
Same weakness CWE-918 – Server-Side Request Forgery (SSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-56108
GHSA-hvvw-h49x-4xmw