Ash框架授权漏洞CVE-2025-48042:特定场景下未授权仍可能触发钩子函数

本文分析了Ash框架中编号为CVE-2025-48042的安全漏洞,该漏洞在特定配置下可能导致授权检查前就执行敏感操作,影响了版本<=3.5.38,并已在新版本3.5.39中修复。

CVE-2025-48042:Ash框架中的授权绕过漏洞分析

概述

国家漏洞数据库(NVD)发布的CVE-2025-48042记录了一个存在于ash-project/ash框架中的“不正确的授权”漏洞。该漏洞的CVSS 4.0基础评分为7.1(高危)。漏洞源于特定场景下授权检查的逻辑缺陷,可能允许恶意用户在未被授权执行完整操作的情况下,触发本应在事务前执行的钩子函数。

漏洞描述

这是一个不正确的授权漏洞(CWE-863)。具体来说,当Ash框架处理特定的批量操作调用时,如果该操作配置了before_transaction钩子但未配置after_transaction钩子,框架可能会在检查用户授权并返回“禁止”错误之前,就先行调用before_transaction钩子。

受影响的版本:所有版本号小于等于3.5.38的ash包(Hex包管理器标识为pkg:hex/ash)。

已修复的版本:版本3.5.39。

影响与风险

  • 核心影响:恶意用户可能诱使before_transaction钩子执行,即使他们无权执行整个操作。这可能导致敏感的或消耗大量资源的操作被未授权触发。
  • 受影响的条件:您开发的create(创建)、update(更新)或destroy(销毁)操作需要满足:
    1. 配置了before_transaction钩子,且未配置after_transaction钩子。
    2. 通过Ash.bulk_*回调(AshJsonApi和AshGraphql在处理update/destroy操作时会使用此方式)被调用。
  • 风险程度:实际风险取决于before_transaction回调函数内部的具体逻辑。如果这些回调函数会产生副作用(例如修改外部状态)或执行如获取外部数据等操作,则风险较高。若API端点本身设有身份验证,风险则可部分缓解。
  • 攻击限制:攻击者需要已通过身份验证(因为此类查询很少允许匿名进行),并知晓存在此类可利用的端点。最终操作仍会返回“禁止”错误,不会泄露信息。

技术细节与修复

  • 涉及的文件与函数
    • 源文件:lib/ash/actions/create/bulk.ex, lib/ash/actions/destroy/bulk.ex, lib/ash/actions/update/bulk.ex
    • 相关函数:'Elixir.Ash.Actions.Create.Bulk':run/5, 'Elixir.Ash.Actions.Destroy.Bulk':run/6, 'Elixir.Ash.Actions.Update.Bulk:run'/6
  • 修复与建议
    1. 首要措施:立即将ash框架升级到3.5.39或更高版本。
    2. 临时缓解:如果无法立即升级,可以修改受影响的before_transaction钩子,添加逻辑以确保在正确的授权检查通过后才执行核心操作。
  • 漏洞编号
    • CVE ID: CVE-2025-48042
    • GHSA ID: GHSA-jj4j-x5ww-cwh9

漏洞评分(CVSS 4.0)

该漏洞的CVSS 4.0向量字符串为: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

  • 攻击路径:网络(AV:N)
  • 攻击复杂度:低(AC:L)
  • 所需权限:低(PR:L)
  • 对系统完整性的影响:高(VI:H)
  • 对系统可用性的影响:低(VA:L)
  • 对机密性的影响:无(VC:N)

时间线与参考

  • NVD发布日期:2025年9月7日
  • NVD最后修改日期:2025年9月8日
  • 漏洞信息来源:EEF
  • 参考链接:可通过GitHub Advisory Database等平台查询该CVE ID或GHSA ID以获取更多技术讨论和修复详情。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计