概述
CVE-2025-48042是一个存在于Ash框架(Erlang)中的安全漏洞,被评定为高危(CVSS v4.0 评分为 7.1)。该漏洞在某些特定场景下,可能导致 before_transaction 钩子在请求因授权不足被禁止(Forbidden)之前就被执行。
受影响版本
- 受影响版本:
ash包版本 <= 3.5.38 - 已修复版本:
ash包版本 3.5.39
漏洞详情
漏洞发生条件: 当一个创建、更新或销毁操作同时满足以下两个条件时,此漏洞可能被触发:
- 该操作配置了
before_transaction钩子,但没有配置after_transaction钩子。 - 该操作通过
Ash.bulk_*回调(例如AshJsonApi和AshGraphql在处理更新/销毁操作时会使用)被调用。
根本原因:
在满足上述条件的批量操作调用流程中,授权检查(Authorization Check)发生在 before_transaction 钩子执行之后。因此,即使最终请求因授权失败返回“Forbidden”错误,before_transaction 钩子中的代码也已经被执行。
影响与风险
- 主要影响:恶意用户可能诱使
before_transaction钩子执行,即使他们无权执行整个操作。如果该钩子内包含敏感或高开销的操作(例如,访问外部服务、执行复杂计算、修改敏感状态等),则可能造成信息泄露、资源消耗或意外的副作用。 - 风险缓解因素:
before_transaction钩子并不常用。- 攻击者需要了解存在此类可利用的操作,并通常需要已通过身份验证。
- 攻击最终总会返回“Forbidden”错误,不会直接泄露数据。
- 严重性评估:鉴于无法预知开发者在
before_transaction钩子中放置的逻辑,该漏洞被标记为高危。
解决方案
1. 立即更新(推荐)
将 ash 包升级到已修复的版本 3.5.39 或更高版本。
2. 临时缓解措施(如果无法立即更新)
对于无法立即升级的系统,可以为受影响的 before_transaction 钩子添加额外的防护逻辑,确保其核心操作不会在不应该的时机执行。例如,可以手动在钩子开始时检查调用上下文或权限。
参考信息
- GitHub安全公告:GHSA-jj4j-x5ww-cwh9
- 国家漏洞数据库(NVD):https://nvd.nist.gov/vuln/detail/CVE-2025-48042
- 修复提交:ash-project/ash@5d1b6a5
技术指标
- CVSS v4.0 向量:
AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N - 相关弱点(CWE):CWE-863 - 不正确的授权
- EPSS 评分:0.058%(未来30天内被利用的概率估计)