
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-25492 is a Server-Side Request Forgery (SSRF) vulnerability in Craft CMS affecting the save_images_Asset GraphQL mutation. It allows authenticated attackers to bypass hostname validation by supplying a domain name that resolves to an internal IP address (e.g., the AWS EC2 metadata endpoint 169.254.169.254), enabling exfiltration of sensitive internal data such as AWS IAM credentials. Affected versions are Craft CMS 3.5.0 through 4.16.17 and 5.0.0-RC1 through 5.8.21. The vulnerability was disclosed and patched on February 9, 2026. It carries a CVSS v3.1 base score of 6.5 (Medium) and a CVSS v4.0 base score of 5.3 (Medium) (GitHub Advisory).
The root cause is CWE-918 (Server-Side Request Forgery): the handleUpload() method in src/gql/resolvers/mutations/Asset.php validates that the supplied URL uses a hostname rather than a raw IP address, but does not resolve the hostname to check whether it maps to a private or cloud-metadata IP. An attacker registers a domain (e.g., attacker.domain) with a DNS A record pointing to 169.254.169.254 (AWS instance metadata service), bypassing the filter_var($hostname, FILTER_VALIDATE_IP) check. Additionally, specifying a non-image file extension such as .txt in the filename parameter bypasses downstream image-format validation, allowing arbitrary content (e.g., credential JSON) to be saved and retrieved as a static asset. Exploitation requires network access to the GraphQL endpoint, a valid bearer token with save_images_Asset mutation permissions, and .txt (or another non-image extension) being permitted for uploads — which is the default configuration (GitHub Advisory, Patch Commit).
Successful exploitation allows an authenticated attacker to retrieve sensitive data from the internal network of the host running Craft CMS, most critically AWS EC2 instance metadata credentials (IAM role access keys and session tokens) from 169.254.169.254. These credentials can be used to pivot into the broader AWS environment, enabling lateral movement, privilege escalation, or data exfiltration beyond the Craft CMS application itself. There is no integrity or availability impact; the vulnerability is purely a confidentiality breach, but the potential for cloud infrastructure compromise significantly elevates its real-world severity (GitHub Advisory).
A proof-of-concept (PoC) Python script is publicly available in the official GitHub Security Advisory, demonstrating the full attack chain. There is no evidence of active in-the-wild exploitation at this time, and no threat actor attribution has been reported. The EPSS score is approximately 0.012% (4th percentile), indicating low current exploitation probability. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog (GitHub Advisory).
169.254.169.254.save_images_Asset mutation — either through a compromised account, a stolen token, or as a malicious insider.attacker.domain) and configure its DNS A record to resolve to the target internal IP, such as 169.254.169.254 (AWS metadata) or another sensitive internal address./actions/graphql/api) with the save_images_Asset mutation, setting url to http://attacker.domain/latest/meta-data/iam/security-credentials and filename to foo.txt.attacker.domain to 169.254.169.254, fetches the AWS metadata credentials on the attacker's behalf, and saves the response as /assets/images/foo.txt.http://<target>/assets/volumes/images/foo.txt to download the AWS IAM role credentials (access key ID, secret access key, session token).169.254.169.254 or other cloud metadata IPs (169.254.170.2, 100.100.100.200, 192.0.0.192); DNS lookups for attacker-controlled domains resolving to RFC 1918 or link-local addresses./actions/graphql/api with save_images_Asset mutation payloads containing unusual url parameters (external domains) and non-image filename values (e.g., .txt, .json); subsequent GET requests to /assets/volumes/images/*.txt shortly after..txt, .json) appearing in the Craft CMS assets/images directory, particularly with names like foo.txt or containing AWS credential-like content (JSON with AccessKeyId, SecretAccessKey, Token fields).save_images_Asset calls with external URL parameters pointing to domains not associated with legitimate content sources (GitHub Advisory).Upgrade Craft CMS to version 4.16.18 (for the 4.x branch) or 5.8.22 (for the 5.x branch), which resolve the SSRF by adding DNS-resolution-based validation that checks whether a hostname resolves to known cloud metadata IPs, and by blocklisting known internal metadata hostnames such as metadata.google.internal and kubernetes.default (Patch Commit, Release 5.8.22). If immediate upgrade is not possible, restrict GraphQL save_images_Asset mutation permissions to only highly trusted users, disable .txt and other non-image file extensions in upload settings, and implement network-level controls (e.g., firewall rules or IMDSv2 enforcement on AWS) to block server-side access to 169.254.169.254 from the web application host (GitHub Advisory).
The vulnerability was reported by researcher LeftenantZero and published by angrybrad via the Craft CMS GitHub Security Advisory on February 9, 2026. No significant broader media coverage or notable public researcher commentary beyond the official advisory has been identified at this time (GitHub Advisory).
Asset.phpSource: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."