AshPostgres策略绕过漏洞分析:空原子操作中的安全风险

本文详细分析了AshPostgres数据库框架中的策略绕过漏洞CVE-2024-49756,该漏洞允许在特定条件下跳过更新操作策略检查,导致本应受限的副作用被错误执行。

CVE-2024-49756:AshPostgres空原子操作策略绕过漏洞

漏洞概述

在AshPostgres特定场景下,存在策略绕过漏洞,允许跳过更新操作的政策检查。该漏洞仅影响"空"更新操作(无字段变更),会导致本应受限的钩子(副作用)在不应执行时被执行。

影响范围

受影响版本

  • ash_postgres 2.0.0 至 2.4.9

已修复版本

  • ash_postgres 2.4.10

漏洞详情

触发条件

要触发此漏洞,必须满足以下所有条件:

  1. 更新操作位于没有包含"更新默认值"属性的资源上(例如updated_at时间戳)
  2. 操作可以原子方式执行
  3. 未设置require_atomic? false
  4. 至少有一个授权器(通常是Ash.Policy.Authorizer)
  5. 至少有一个变更(在资源的变更块或操作本身中)

影响分析

此漏洞不会允许用户读取本无权访问的新数据,但会使用户能够触发本不应触发的副作用。具体表现为:

  • 当手动调用Ash.update时可能触发
  • AshGraphql和AshJsonApi操作调用不受影响(因为它们使用Ash.bulk_update
  • 在零输入且产生零变更字段的情况下可能产生副作用

修复方案

官方补丁

该问题已在ash_postgres 2.4.10版本中修复。

临时解决方案

  1. 使用提供的脚本确认无操作易受攻击
  2. 为任何可能受影响的更新操作添加require_atomic? false
  3. 将受影响操作的Ash.update用法替换为Ash.bulk_update
  4. 为操作添加更新时间戳

检测工具

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(中危)
  • 攻击向量:网络
  • 权限要求:无
  • 用户交互:无
  • 影响范围:完整性影响低
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计