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