写点什么

Ash 框架授权绕过漏洞分析:当绕过策略条件评估为真时

作者:qife122
  • 2025-11-29
    福建
  • 本文字数:1468 字

    阅读完需:约 5 分钟

Ash 授权绕过漏洞分析(CVE-2025-48044)

漏洞概述

Ash 框架在特定条件下存在授权绕过漏洞,当绕过策略的条件评估为真但其授权检查失败,且没有其他适用策略时,系统会错误地授权请求。

受影响版本

  • 受影响版本:>= 3.6.3, <= 3.7.0

  • 已修复版本:3.7.1

漏洞详情

漏洞位置

lib/ash/policy/policy.ex:69

漏洞代码

{%{bypass?: true}, cond_expr, complete_expr}, {one_condition_matches, all_policies_match} ->  {    b(cond_expr or one_condition_matches),  # <- 漏洞:仅使用条件检查    b(complete_expr or all_policies_match)  }
复制代码

漏洞原理

最终的授权决策是:one_condition_matches AND all_policies_match


当绕过条件为真但绕过策略失败,且后续策略具有不匹配的条件时:


  • one_condition_matches = cond_expr(绕过条件)= true(漏洞 - 应检查绕过是否实际授权)

  • all_policies_match = (complete_expr OR NOT cond_expr) 对于每个策略


对于不匹配的策略:(false OR NOT false) = true(策略不适用)


最终结果:true AND true = true(错误授权)


绕过条件单独满足"至少一个策略适用",即使绕过未能成功授权。

修复方案

将第 69 行的cond_expr替换为complete_expr


{%{bypass?: true}, _cond_expr, complete_expr}, {one_condition_matches, all_policies_match} ->  {    b(complete_expr or one_condition_matches),  # <- 已修复    b(complete_expr or all_policies_match)  }
复制代码


第 52 行也应更新以保持一致性:


{%{bypass?: true}, _cond_expr, complete_expr}, {one_condition_matches, true} ->  {    b(complete_expr or one_condition_matches),  # <- 为保持一致性    complete_expr  }
复制代码

漏洞验证

策略配置示例

policies do  bypass always() do    authorize_if actor_attribute_equals(:is_admin, true)  end
policy action_type(:read) do authorize_if always() endend
复制代码


非管理员用户可以执行创建操作(本应被拒绝)。

测试用例

test "bypass policy bug" do  policies = [    %Ash.Policy.Policy{      bypass?: true,      condition: [{Ash.Policy.Check.Static, result: true}],  # 条件 = true      policies: [        %Ash.Policy.Check{          type: :authorize_if,          check: {Ash.Policy.Check.Static, result: false},  # 策略 = false          check_module: Ash.Policy.Check.Static,          check_opts: [result: false]        }      ]    },    %Ash.Policy.Policy{      bypass?: false,      condition: [{Ash.Policy.Check.Static, result: false}],      policies: [        %Ash.Policy.Check{          type: :authorize_if,          check: {Ash.Policy.Check.Static, result: true},          check_module: Ash.Policy.Check.Static,          check_opts: [result: true]        }      ]    }  ]
expression = Ash.Policy.Policy.expression(policies, %{}) assert expression == false # 期望:false(拒绝) # 主分支实际结果:true(错误授权)end
复制代码

安全评分

  • CVSS 总体评分:8.6(高危)

  • EPSS 评分:0.104%(第 29 百分位)

参考链接

  • GHSA-pcxq-fjp3-r752

  • https://nvd.nist.gov/vuln/detail/CVE-2025-48044

  • ash-project/ash@8b83efa

致谢

  • 报告者:jechol

  • 分析师:maennchen

  • 修复审查者:zachdaniel 更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)


公众号二维码


办公AI智能小助手


公众号二维码


网络安全技术点滴分享


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
Ash框架授权绕过漏洞分析:当绕过策略条件评估为真时_网络安全_qife122_InfoQ写作社区