当前位置: 首页 > news >正文

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

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智能小助手)
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.jsqmd.com/news/54512/

相关文章:

  • 人工智能之数据分析 Matplotlib:第四章 图形类型
  • 20232325 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • XXL-JOB v3.3.0 | 分布式任务调度平台
  • 为什么在Prompt优化中用CoT(思维链)
  • 打造专属知识大脑:个人电脑上的本地私有知识库全攻略
  • uni-app - switchTab 跳转到 页面后不走onLoad,option无法更新 - MT
  • [1.1.1]b64steg
  • [1.1.11]Shellcode
  • 初学markdown,typora
  • .net core 2.1 mysql 8.0 迁移到 达梦8.4
  • 电脑中显存和内存区别?
  • MySQL 存储过程事务和锁
  • 你可能需要一部 Iphone
  • LAUNCH X431 PRO3 V+ ELITE: 10.1 Touchscreen, SmartLink 2.0, Full CAN 2.0/CANFD/DoIP/J2534 Support
  • 2025 Yanhua Mini ACDP-2 Module 38: Efficient BMW G Series BDC2 Immobilizer Key Adding Tool
  • 老六的字符串
  • 基于PSO粒子群优化的能源供应方,光伏发电,EV充电三方交易策略博弈算法matlab仿真
  • 神奇的字符
  • mysql 迁移 达梦8.4
  • 2025 CGDI A2 Key Programmer Premium: BMW G Series IMMO, WiFi, No Annual Fee
  • 基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真
  • HW
  • Day5-20251128
  • pycharm中运行自动化脚本时没有反应
  • 问卷发了1000份,收回全是正确的废话?你少了一个读心指令
  • 2025 Magic Motorsport Magic FLK02 ECU TCU Programmer: Lifetime Warranty Full HW Kit for New Users
  • 2025 New OBDSTAR MQB All Keys Lost Adapter Kit: Airbag Reset, IMMO, Dashboard, BCM, ELV
  • 图片隐写
  • elasticsearch数据同步到hive
  • 11.17-11.28综合练习