新发布:2025年SANS工业控制系统/运营技术网络安全报告现已上线

获取报告
我们利用人工智能进行网站翻译,虽然我们力求准确,但不一定总是 100%精确。感谢您的理解。

CVE-2025-32432:Craft CMS 存在未经身份验证的远程代码执行漏洞

OPSWAT
分享此贴
OPSWAT 网络安全研究生奖学金项目的两名研究员,背景为蓝色

2025年4月,Orange Cyberdefense在一次事件调查中发现Craft CMS存在关键漏洞,该漏洞现被追踪为CVE-2025-32432。此缺陷允许未经身份验证的远程代码执行(RCE),其严重性在国家漏洞数据库(NVD)的CVSS v3.1评分体系中达到最高等级10.0(危急)。

OPSWAT 基础设施网络安全研究生奖学金计划的一部分,我们的研究员对该漏洞进行了全面研究,包括复现漏洞利用过程、验证其影响范围、评估组织风险,并分析推荐的防护策略。

本博客对CVE-2025-32432漏洞进行了全面深入的剖析,不仅解析其根本原因、利用流程及更广泛的安全影响,更为组织机构提供了切实可行的防护指南以抵御此类威胁。

CVE-2025-32432 简介

CVE-2025-32432 影响 Craft CMS 3.0.0-RC1 至 3.9.14、4.0.0-RC1 至 4.14.14 以及 5.0.0-RC1 至 5.6.16 版本。 该漏洞被归类为CWE-94:代码注入,源于对不可信输入的不当处理,最终导致未经身份验证的远程代码执行(RCE)。  

CVE-2025-32432 Craft CMS远程代码执行漏洞的CVSS 3.x指标显示其基础评分为关键级别

Craft CMS 与 Yii 框架

Craft CMS 是一款现代内容管理系统,它使开发人员和内容团队能够构建灵活且完全定制的网站,而非依赖于僵化的预定义模板。该系统在全球超过 46,000 个网站中被采用,既被广泛使用,也常成为攻击者寻找高影响漏洞的目标。

Craft CMS 基于Yii 框架构建,该框架是一款专为现代网络开发打造的快速而强大的 PHP 框架。Yii 提供核心架构与工具,而 Craft CMS 则在此基础上进行扩展,从而打造出灵活的内容管理系统。

Craft CMS 与 Yii Framework 徽标并列,涉及 CVE-2025-32432 远程代码执行漏洞

Yii框架的核心特性之一是其依赖注入(DI)容器。依赖注入是一种设计模式,它为组件提供所需资源,而非要求组件自行构建这些资源。Yii的DI容器具有高度灵活性,能够通过相对简单的配置规则构建复杂对象。

然而,这种灵活性也伴随着风险。在CVE-2025-32432案例中,DI容器被滥用并结合不可信的用户输入,从而形成了远程代码执行的途径。该案例表明,即使是安全且强大的框架功能,若在未充分理解其安全影响的情况下进行集成,也可能演变为潜在威胁。

深入解析CVE-2025-32432漏洞

Craft CMS 包含一项名为“图像转换”的功能,旨在通过在服务器端直接生成调整尺寸的图像来优化性能。当需要显示 300×300 像素的缩略图时,系统不会传输原始的 4.5 MB 大图,而是自动创建并提供经过优化的较小版本。这种方法既能减少带宽消耗,又能显著提升页面加载速度。

为使该功能广泛可用,Craft CMS 公开了无需身份验证即可访问的actions/assets/generate-transform接口。虽然这确保了认证用户和匿名用户均能享受优化图像带来的益处,但也形成了一个公开可访问的攻击面——任何人都可向应用程序提交精心构造的输入。

Craft CMS AssetsController 代码片段,展示与 CVE-2025-32432 漏洞相关的 allowAnonymous 逻辑

通过对该工作流的详细分析,我们的研究员发现:每当向暴露的端点发送POST请求时,都会调用AssetsController::actionGenerateTransform方法。该函数直接从请求主体中获取handle参数,并将其转发至下游进行下一阶段的处理。

Craft CMS PHP代码截图(涉及CVE-2025-32432远程代码执行漏洞分析)

下一步将调用ImageTransforms::normalizeTransform()方法。该方法接收用户提供的句柄参数,并将其转换为ImageTransform对象。由于该对象直接由不可信输入创建,这构成了执行流程中的关键风险点。

与CVE-2025-32432远程代码执行漏洞分析相关的Craft CMS PHP代码片段

在此过程中,用户控制的$transform数组(源自 handle 参数)中的所有键值对都会合并到一个配置数组中。随后normalizeTransform方法将该数组传递给Craft::createObject(),该方法负责实例化新的ImageTransform对象。

展示与CVE-2025-32432远程代码执行漏洞相关的Craft CMS逻辑的代码片段

该漏洞源于Craft::createObject()封装Yii的Yii::createObject())处理配置数组的方式。由于该机制直接使用DI容器从未经验证的数组中实例化并配置对象,攻击者可能因此获得对对象构造过程的控制权。

高亮显示的PHP代码,展示与CVE-2025-32432 Craft CMS远程代码执行漏洞相关的createObject函数

当恶意有效负载被传递进来时,该对象的构造函数(继承自Model类)会调用App::configure()方法。

高亮显示的PHP代码,展示了与CVE-2025-32432远程代码执行漏洞相关的Craft CMS构造函数逻辑

该方法遍历攻击者控制的数组中的每个属性,并将它们赋值给新对象。

PHP代码片段展示了一个配置函数,该函数与CVE-2025-32432 Craft CMS远程代码执行漏洞相关。

When App::configure() assigns properties from the attacker-controlled configuration array, most keys are mapped directly onto the object. However, if a key begins with the prefix as, the assignment is routed through Component::__set, Yii’s magic setter. This method interprets as <name> as an instruction to attach a behavior (mixin) to the object.

其中一种恶意有效载荷可被构造为利用Component::__set处理以as 为前缀的属性的方式,例如as exploit

代码截图展示针对CVE-2025-32432 Craft CMS远程代码执行漏洞的利用有效载荷

根据我们的分析,Component::__set的实现包含一项安全机制:当通过此属性附加行为时,框架会验证配置数组中指定的类是否为yii\base\Behavior 的有效子类。此检查旨在防止任意类直接附加到组件上。

Craft CMS 中与 CVE-2025-32432 远程代码执行漏洞相关的逻辑高亮显示的 PHP 代码

然而,这种保护措施并不像表面看起来那样有效。其弱点源于Yii::createObject处理配置数组的方式。

在实例化对象时,Yii::createObject会优先处理特殊的 __class参数。若该键存在,则其值将作为实例化的目标类,而配置数组中的标准 class 键将被忽略。

PHP代码片段展示了与CVE-2025-32432 Craft CMS远程代码执行漏洞相关的对象创建逻辑

攻击者可为漏洞利用行为构造有效载荷,其中包含两个密钥:

  1. 'class' => '\craft\behaviors\FieldLayoutBehavior'- 合法的类,继承自 yii\base\Behavior。此值仅用于满足 Component::__set 中的 is_subclass_of 检查,确保执行流程继续进行而不抛出错误。
  2. '__class' => '\yii\rbac\PhpManager' - 攻击者的实际目标。这是他们想要实例化的“gadget”类。

当代码执行时,Component::__set通过了安全检查,因为它仅检查类键。然而,当框架后续调用Yii::createObject附加行为时,它优先处理 __class,导致实例化的是攻击者选择的\yii\rbac\PhpManager对象。

使用\yii\rbac\PhpManager是出于特定目的。仅创建对象不足以实现利用;要达成远程代码执行(RCE),需要具备可武器化副作用的gadget类。 由于其初始化流程,PhpManager常成为POI(PHP对象注入)攻击的目标。实例化时,其init()方法会调用load(),进而调用loadFromFile($this->itemFile)。攻击者若能控制$this->itemFile参数,即可迫使应用加载恶意文件,将对象创建转化为代码执行。

高亮显示的PHP代码流程,展示CVE-2025-32432 Craft CMS远程代码执行漏洞(含文件包含)

危险点在于loadFromFile方法。在PHP中,require会将目标文件作为代码执行,因此若攻击者控制了文件路径,便可触发任意代码执行。

攻击者通过利用PHP会话文件在服务器上植入恶意代码。当攻击者将PHP代码注入请求参数时,Craft CMS会在重定向过程中将有效载荷保存至会话文件。随后当PhpManager加载该文件时,攻击者的代码便可能被执行。

CVE-2025-32432 Craft CMS远程代码执行漏洞利用流程示意图

完整的攻击链分为三个阶段。首先,攻击者通过发送精心构造的URL植入恶意PHP代码,该代码会被Craft CMS保存至会话文件中。其次,攻击者利用图像转换端点的__class绕过漏洞加载PhpManager工具,并将其指向被植入恶意代码的会话文件。最后,当PhpManager加载该文件时,攻击者的有效载荷便会执行,从而获得远程代码执行权限并完全掌控服务器——通常通过Webshell或反向shell实现。

流程图展示CVE-2025-32432 Craft CMS远程代码执行漏洞,包含利用JSON及攻击步骤
终端输出显示CVE-2025-32432 Craft CMS远程代码执行漏洞的利用步骤
终端显示CVE-2025-32432漏洞:Craft CMS远程代码执行漏洞,可通过www-data用户获取shell访问权限

缓解和补救

为有效缓解CVE-2025-32432相关风险,组织需要对开源组件实现可视化管理与控制。若缺乏清晰的组件清单,补丁修复工作将沦为盲目猜测。

OPSWAT SBOM作为MetaDefender®平台内的专有技术,通过提供所有在用软件组件、库、Docker容器及依赖项的清单来满足这一需求。该技术使组织能够主动追踪、保护并更新其组件。

安全扫描界面显示被拦截的Craft CMS归档文件,该文件存在CVE-2025-32432关键漏洞,需进行缓解处理。
安全仪表盘显示CVE-2025-32432 Craft CMS远程代码执行漏洞及修复详情

在上例中,MetaDefender 的 SBOM 技术扫描了包含 CVE-2025-32432 漏洞的 nginx-ingress-controller 软件包。系统自动将该问题标记为"严重"级别,并提供了可用修复版本的指导,使团队能够在漏洞被利用前快速确定优先级并进行修补。

OPSWAT 现已提供于 MetaDefender CoreMetaDefender Software 中提供,使安全团队能够更快地识别漏洞并采取行动。借助OPSWAT 安全团队可以:

  • 快速定位易受攻击的组件——立即识别受反序列化攻击影响的开源组件。这确保能够迅速采取补丁修复或替换易受攻击库的措施。 
  • 确保主动打补丁和更新——OPSWAT 持续监控开源组件,以领先于反序列化漏洞。OPSWAT 能够检测过时或不安全的组件,从而实现及时更新并降低遭受攻击的风险。 
  • 确保合规与报告——随着监管框架日益要求软件供应链透明化OPSWAT 助力企业满足合规要求。

准备好加强您的软件供应链,抵御新兴威胁了吗?

标签

通过OPSWAT 了解最新信息!

立即注册,即可收到公司的最新动态、 故事、活动信息等。