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

news/2025/11/29 6:05:52/文章来源:https://www.cnblogs.com/qife122/p/19284795

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.mzph.cn/news/980249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能之数据分析 Matplotlib:第四章 图形类型

人工智能之数据分析 Matplotlib:第四章 图形类型人工智能之数据分析 Matplotlib 第四章 图形类型@目录人工智能之数据分析 Matplotlib前言一、散点图(Scatter Plot)用途基本语法示例二、柱形图(Bar Chart)用途垂…

LRC阅读器更新公告

v1.0 介绍视频:用没有小说观看功能的学习机/MP3看小说!(倾听者学习机全系列破解) [新功能] 使用命令行与用户进行操作,仅编写了将TXT完整分割后放入软件的功能 [BUG] 1.由于FFmpeg不再支持Win7导致此版本仅支持Win10…

20232325 2025-2026-1 《网络与系统攻防技术》实验七实验报告

实验报告:网络欺诈与防范实践 1. 实验内容使用SET工具建立冒名网站; 使用Ettercap进行DNS欺骗; 将SET与Ettercap结合,对靶机进行钓鱼攻击; 提高防范意识,并提出具体防范方法。2. 实验目的 对DNS欺骗与冒名网站进…

XXL-JOB v3.3.0 | 分布式任务调度平台

XXL-JOB 正在角逐 “2025 年度Gitee最受欢迎的开源软件”,期待您投出宝贵一票,你的认可对我们很重要🌹~投票链接👉:https://gitee.com/activity/2025opensource?ident=ISLBOHRelease Notes1、【新增】执行器新…

为什么在Prompt优化中用CoT(思维链)

为什么在Prompt优化中用CoT(思维链)Posted on 2025-11-29 03:01 Java后端的Ai之路 阅读(0) 评论(0) 收藏 举报🌟 为啥要用CoT?——3个核心原因,简单到能喝奶茶时讲明白! 1️⃣ "别让AI跳着走,要它一…

打造专属知识大脑:个人电脑上的本地私有知识库全攻略

打造专属知识大脑:个人电脑上的本地私有知识库全攻略 为什么你需要一个本地私有知识库? 想象一下:当你突然需要查找半年前读过的那篇精彩文章,或者在会议中急需某个重要数据,却发现自己收藏的内容散落在微信、浏览…

uni-app - switchTab 跳转到 页面后不走onLoad,option无法更新 - MT

场景:tabbar页面是展示一个列表,页面中有一个搜索按钮,点击按钮进入搜索页面,输入字段以后返回tabbar页面展示相应的搜索结果,切换tabbar页面后搜索条件置空 方案1:使用 navigateTo跳转传值 坑1:因为搜索页要跳…

[1.1.1]b64steg

将文本复制到随波逐流里面,选择base64隐写解码flag为flag{Base_sixty_four_point_five}

[1.1.11]Shellcode

在https://www.a.tools/Tool.php?Id=230 解码16进制转成字符串

初学markdown,typora

MarkDown学习 "#号" 二级标题 "##" 黑体 "左右各有" 斜体 "左右一个" 斜体加粗 "左右" 删除线 "左右~~" 引用 ">号"天下英雄如过江之鲫,人…

.net core 2.1 mysql 8.0 迁移到 达梦8.4

数据准备:mysql 数据 已经成功迁移到达梦数据库里。如果用不习惯达梦管理工具,可以用 Navicat Premium 17 ,可以连接到达梦数据库。 1、达梦官网下载.net core 2.1 对应的驱动。本地尝试NuGet 包管理器 版本总是对不…

电脑中显存和内存区别?

电脑中显存和内存区别?Posted on 2025-11-29 01:38 Java后端的Ai之路 阅读(0) 评论(0) 收藏 举报显存 vs 内存:电脑里的"专属工作台"与"共享客厅" 🧠 一、最核心的区别:它们服务的对象不…

MySQL 存储过程事务和锁

MySQL的数据库数据DROP DATABASE IF EXISTS studentsdb; CREATE DATABASE IF NOT EXISTS studentsdb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; USE studentsdb; CREATE TABLE student_info…

你可能需要一部 Iphone

首先f12打开,选择用手机打开,悬着iphone,获得flag

LAUNCH X431 PRO3 V+ ELITE: 10.1 Touchscreen, SmartLink 2.0, Full CAN 2.0/CANFD/DoIP/J2534 Support

The Challenge: Outdated Diagnostics Can’t Keep Up with Modern Vehicles For European and American mechanics and car owners, diagnostic tools face a constant uphill battle. Today’s vehicles—from sleek…

2025 Yanhua Mini ACDP-2 Module 38: Efficient BMW G Series BDC2 Immobilizer Key Adding Tool

Simplify BMW G Series Key Programming with the Yanhua Mini ACDP-2 Module 38 For European and American automotive repair shops and BMW G Series owners, the process of immobilizer matching and key additi…

老六的字符串

首先16进制转成字符串然后base64解码之后栅栏解码发现栅栏为2时符合flag的样子,进行凯撒解码,得到flag

基于PSO粒子群优化的能源供应方,光伏发电,EV充电三方交易策略博弈算法matlab仿真

1.课题概述 基于PSO粒子群优化的能源供应方,光伏发电,EV充电三方交易策略博弈算法matlab仿真。建立综合能源园区模型与市场交易框架,构建三方非合作博弈模型,通过算例分析验证模型有效性,为综合能源园区市场运营提供…

神奇的字符

根据题目提示先进行base64解码然后16进制转成字符串最后进行凯撒解码

mysql 迁移 达梦8.4

1、首先安装达梦数据库, 下载链接:产品下载 - 武汉达梦数据库股份有限公司 2、使用达梦自带的迁移工具,可以看迁移工具的文档,很清楚。1)先在迁移管理模块右键新建工程,再点击新建的工程右键创建评估 2)选择需…