CVE-2024-49756:AshPostgres空原子操作策略绕过漏洞
漏洞概述
在AshPostgres特定场景下,存在策略绕过漏洞,允许跳过更新操作的政策检查。该漏洞仅影响"空"更新操作(无字段变更),会导致本应受限的钩子(副作用)在不应执行时被执行。
影响范围
受影响版本
- ash_postgres 2.0.0 至 2.4.9
已修复版本
- ash_postgres 2.4.10
漏洞详情
触发条件
要触发此漏洞,必须满足以下所有条件:
- 更新操作位于没有包含"更新默认值"属性的资源上(例如updated_at时间戳)
- 操作可以原子方式执行
- 未设置
require_atomic? false - 至少有一个授权器(通常是Ash.Policy.Authorizer)
- 至少有一个变更(在资源的变更块或操作本身中)
影响分析
此漏洞不会允许用户读取本无权访问的新数据,但会使用户能够触发本不应触发的副作用。具体表现为:
- 当手动调用
Ash.update时可能触发 - AshGraphql和AshJsonApi操作调用不受影响(因为它们使用
Ash.bulk_update) - 在零输入且产生零变更字段的情况下可能产生副作用
修复方案
官方补丁
该问题已在ash_postgres 2.4.10版本中修复。
临时解决方案
- 使用提供的脚本确认无操作易受攻击
- 为任何可能受影响的更新操作添加
require_atomic? false - 将受影响操作的
Ash.update用法替换为Ash.bulk_update - 为操作添加更新时间戳
检测工具
GitHub Gist提供了检测脚本,可用于识别潜在漏洞: https://gist.github.com/zachdaniel/e49166b765978c48dfaf998d06df436e
该脚本可能存在误报,但不会有漏报。如果脚本显示"未发现潜在漏洞",则只需更新ash_postgres即可。
技术参考
- 原始报告:https://elixirforum.com/t/empty-update-action-with-policies/66954
- 修复提交:ash-project/ash_postgres@1228fcd
- GHSA ID:GHSA-hf59-7rwq-785m
- CWE分类:CWE-552 - 外部方可访问的文件或目录
安全评分
- CVSS v3.1评分:5.3(中危)
- 攻击向量:网络
- 权限要求:无
- 用户交互:无
- 影响范围:完整性影响低