news 2026/1/9 11:46:07

AshPostgres 政策绕过漏洞:空原子更新操作可能触发副作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AshPostgres 政策绕过漏洞:空原子更新操作可能触发副作用

CVE-2024-49756:AshPostgres 中空、原子、非批量操作的副作用策略绕过漏洞

概述

在特定且非常具体的情况下,更新操作的策略可能会被跳过。这种情况仅发生在“空”更新操作(无更改字段)上,并且会导致其钩子(副作用)在不应执行时被执行。请注意,这不允许读取用户本不应有权访问的新数据,仅允许触发用户本不应能够触发的副作用。

受影响条件

您的更新操作必须满足以下所有条件:

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

如何判断是否受影响

是否存在您手动调用此操作的情况,即使用Ash.update
请注意,AshGraphqlAshJsonApi的操作调用不受影响,因为它们使用Ash.bulk_update

如果是,是否存在您以零输入调用该操作,并且它产生零更改字段的情况。
如果是,它是否会产生副作用?这意味着您有一个after_action钩子来调用其他资源。
如果是,该副作用是否会绕过另一个资源的策略?例如,使用authorize?: false,或未提供相同的参与者(actor)。

分隔线以上的内容可以使用提供的脚本检查。分隔线以下的内容必须手动检查。用于检查此问题的脚本可在“我可能受影响吗”部分获取。
该脚本可能存在误报,但不会有任何漏报。因此,如果您运行脚本,并且它显示“未发现潜在漏洞”,那么您只需更新ash_postgres即可。

受影响的版本

  • 受影响版本>= 2.0.0, < 2.4.10
  • 已修复版本2.4.10

补丁

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

变通方案

您可以:

  1. 使用脚本确定您的任何操作都不易受攻击。
  2. 为任何可能受影响的更新操作添加require_atomic? false
  3. 将受影响操作的任何Ash.update用法替换为Ash.bulk_update
  4. 为您的操作添加一个更新时间戳。

我可能受影响吗?

此 Gist 提供了一个您可以运行的脚本来检测是否存在潜在漏洞:
https://gist.github.com/zachdaniel/e49166b765978c48dfaf998d06df436e

参考资料

  • 原始报告/发现:https://elixirforum.com/t/empty-update-action-with-policies/66954
  • 修复提交:ash-project/ash_postgres@1228fcd
  • 参考链接:
    • GHSA-hf59-7rwq-785m
    • ash-project/ash_postgres@1228fcd
    • https://elixirforum.com/t/empty-update-action-with-policies/66954
    • https://gist.github.com/zachdaniel/e49166b765978c48dfaf998d06df436e
    • https://nvd.nist.gov/vuln/detail/CVE-2024-49756

安全详情

  • 严重等级:中危(Moderate)
  • CVSS 总分:5.3
  • CVSS v3 向量:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
  • 弱点类型:CWE-552 - 外部各方可访问的文件或目录
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!