Ash框架授权漏洞:before_transaction钩子可在请求被禁止前执行

本文详细分析了CVE-2025-48042漏洞,该漏洞影响了Ash框架(Erlang)。在特定条件下,即使用户请求因授权检查被禁止,before_transaction钩子仍可能被执行,可能导致敏感或高开销操作被非授权触发。

概述

CVE-2025-48042是一个存在于Ash框架(Erlang)中的安全漏洞,被评定为高危(CVSS v4.0 评分为 7.1)。该漏洞在某些特定场景下,可能导致 before_transaction 钩子在请求因授权不足被禁止(Forbidden之前就被执行。

受影响版本

  • 受影响版本ash 包版本 <= 3.5.38
  • 已修复版本ash 包版本 3.5.39

漏洞详情

漏洞发生条件: 当一个创建、更新或销毁操作同时满足以下两个条件时,此漏洞可能被触发:

  1. 该操作配置了 before_transaction 钩子,但没有配置 after_transaction 钩子。
  2. 该操作通过 Ash.bulk_* 回调(例如 AshJsonApiAshGraphql 在处理更新/销毁操作时会使用)被调用。

根本原因: 在满足上述条件的批量操作调用流程中,授权检查(Authorization Check)发生在 before_transaction 钩子执行之后。因此,即使最终请求因授权失败返回“Forbidden”错误,before_transaction 钩子中的代码也已经被执行。

影响与风险

  • 主要影响:恶意用户可能诱使 before_transaction 钩子执行,即使他们无权执行整个操作。如果该钩子内包含敏感或高开销的操作(例如,访问外部服务、执行复杂计算、修改敏感状态等),则可能造成信息泄露、资源消耗或意外的副作用。
  • 风险缓解因素
    • before_transaction 钩子并不常用。
    • 攻击者需要了解存在此类可利用的操作,并通常需要已通过身份验证。
    • 攻击最终总会返回“Forbidden”错误,不会直接泄露数据。
  • 严重性评估:鉴于无法预知开发者在 before_transaction 钩子中放置的逻辑,该漏洞被标记为高危

解决方案

1. 立即更新(推荐)ash 包升级到已修复的版本 3.5.39 或更高版本。

2. 临时缓解措施(如果无法立即更新) 对于无法立即升级的系统,可以为受影响的 before_transaction 钩子添加额外的防护逻辑,确保其核心操作不会在不应该的时机执行。例如,可以手动在钩子开始时检查调用上下文或权限。

参考信息

技术指标

  • 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天内被利用的概率估计)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计