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 dobypass always() doauthorize_if actor_attribute_equals(:is_admin, true)endpolicy action_type(:read) doauthorize_if always()end
end
非管理员用户可以执行创建操作(本应被拒绝)。
测试用例
test "bypass policy bug" dopolicies = [%Ash.Policy.Policy{bypass?: true,condition: [{Ash.Policy.Check.Static, result: true}], # 条件 = truepolicies: [%Ash.Policy.Check{type: :authorize_if,check: {Ash.Policy.Check.Static, result: false}, # 策略 = falsecheck_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智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码
