Ash框架高危漏洞:授权检查前执行Hook导致的安全风险

本文详细分析了CVE-2025-48042漏洞,该漏洞影响Ash框架(Erlang)。在特定条件下,即使用批量操作且配置了before_transaction钩子但无after_transaction钩子时,钩子会在授权检查前执行,可能导致未授权操作。文章阐述了漏洞原理、影响范围及修复方法。

CVE-2025-48042:Ash框架中某些情况下请求被禁止前仍可能执行Hook

概述 在某些包含before_transaction钩子但不包含after_transaction钩子的批量操作调用中,当作为批量操作调用时,before_transaction钩子会在授权检查之前被调用,然后返回“禁止”错误。

影响 恶意用户即使未被授权执行整个操作,也可能导致before_action钩子运行。该before_action钩子可能执行敏感/昂贵的操作。

如果您满足以下条件,则会受到影响:

  • 在某个创建、更新或销毁操作上设置了before_transaction钩子,且该操作没有after_transaction钩子。
  • 该操作通过Ash.bulk_*回调被使用(AshJsonApi和AshGraphql为更新/销毁操作执行此操作)。

其重要性或影响程度取决于这些before_transaction回调的性质,例如它们是否具有副作用,或者是否执行诸如查找某些外部数据等操作。另外,也取决于您的API端点是否启用了身份验证以及身份验证的类型。

严重性 此漏洞的严重性很难评估。before_transaction钩子并不常用。此外,攻击者必须知道哪些操作对他们可用,并且需要通过身份验证才能发出此类请求(即,很少有针对阻止匿名查询运行的政策),因此需要一定的权限和内部知识。另外,操作将始终返回禁止错误,因此不会泄露任何信息。我们将在接下来几天根据需要进行评估并调整严重性级别。

鉴于我们并不清楚开发人员在before_transaction钩子中放置了何种逻辑,理论上可能造成严重后果,因此目前标记为“高危”。

解决方法 您应尽快更新。但如果由于某种原因无法更新,可以向这些before_transaction钩子添加逻辑,以防止它们在不应执行的时候执行其逻辑。

参考文献

受影响版本 <= 3.5.38

已修复版本 3.5.39

严重性 高危 (CVSS 4.0 总分:7.1) CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N

弱点

  • CWE-863:不正确的授权 当参与者尝试访问资源或执行操作时,产品执行授权检查,但未能正确执行该检查。这允许攻击者绕过预期的访问限制。

EPSS 分数 0.058%(第18个百分位数)

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