Craft CMS GraphQL接口SSRF漏洞技术分析与修复方案

本文详细分析了Craft CMS中通过GraphQL资产上传突变导致的服务器端请求伪造漏洞的技术原理、利用条件、影响范围以及修复方案,为开发者和安全人员提供完整的技术参考。

漏洞概述

CVE-2025-68437是一个存在于Craft CMS中的服务器端请求伪造漏洞,影响版本包括5.0.0-RC1至5.8.20以及4.0.0-RC1至4.16.16。该漏洞通过GraphQL的save_<VolumeName>_Asset突变的_file输入参数的url字段,允许攻击者使服务器向任意远程位置获取内容,包括内部网络服务和云元数据端点。

技术细节

漏洞原理

当Craft CMS处理GraphQL的资产上传突变时,_file输入对象的url参数接收外部URL,服务器会主动向该URL发起请求获取内容,并将其保存为系统资产。由于缺乏对目标地址的有效验证和限制,攻击者可构造恶意请求:

  1. 内部服务探测:使用http://127.0.0.1:80/index.php等本地地址
  2. 云元数据窃取:针对AWS、GCP、Azure等云平台的元数据端点
  3. 任意外部资源:强制服务器访问攻击者控制的任意外部URL

利用条件

成功利用此漏洞需要满足以下权限配置:

  • 在目标卷中"编辑资产"的权限
  • 在目标卷中"创建资产"的权限
  • 使用的GraphQL架构中启用了上述权限

复现步骤

  1. 以管理员身份登录Craft CMS控制面板
  2. 创建或使用现有卷
  3. 在GraphQL架构中启用必要的资产管理权限
  4. 访问GraphiQL界面(如http://craft.local/admin/graphiql
  5. 执行以下GraphQL突变(将<VolumeName>替换为实际卷名):
1
2
3
4
5
6
7
8
mutation {
    save_<VolumeName>_Asset(_file: { 
        url: "http://127.0.0.1:80/index.php"
        filename: "poc.txt"
    }) {
        id
    }
}

影响分析

直接风险

  • 内部网络暴露:绕过防火墙访问内部服务,进行网络侦察
  • 云凭证泄露:从云元数据端点窃取IAM角色、服务账户令牌等敏感凭据
  • 数据外泄:获取的内容保存为资产后可通过预览/下载功能访问

潜在后果

  • 底层基础设施完全被攻陷
  • 敏感数据大规模外泄
  • 攻击链中的初始立足点

修复方案

官方补丁

Craft CMS团队已发布安全更新修复此漏洞:

  • Craft 5:升级至5.8.21或更高版本
  • Craft 4:升级至4.16.17或更高版本
  • Craft 3.5.0+:应升级至最新Craft 4.16.17或5.8.21版本

更新记录

根据Craft CMS 5.x的更新日志,5.8.21版本专门修复了此SSRF漏洞(GHSA-x27p-wfqw-hfcc)。同时修复的还包括:

  • 两个RCE漏洞(GHSA-255j-qw47-wjh5, GHSA-742x-x762-7383)
  • 一个DoS漏洞(GHSA-v64r-7wg9-23pr)
  • 一个信息泄露漏洞(GHSA-53vf-c43h-j2x9)

临时缓解措施

若无法立即更新,可考虑:

  1. 限制GraphQL接口的访问权限
  2. 在网络层限制出站连接
  3. 监控异常资产创建行为

漏洞分类

CVSS评分

  • CVSS 4.0向量:CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
  • 整体评分:5.0(中等严重性)

CWE分类

  • CWE-918:服务器端请求伪造

参考信息

  • GitHub安全公告:GHSA-x27p-wfqw-hfcc
  • 修复提交:craftcms/cms@013db63
  • NVD记录:CVE-2025-68437
  • Craft CMS 5.x更新日志:5.8.21版本详情

总结

CVE-2025-68437是一个典型的GraphQL接口SSRF漏洞,突显了现代Web应用中对用户提供URL缺乏充分验证的安全风险。建议所有Craft CMS用户立即检查版本并应用安全更新,同时审查GraphQL权限配置,最小化攻击面。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计