IVM Development Group 发布了 pg_ivm 1.5.1 来解决安全问题:CVE-2023-22847, CVE-2023-23554。
向未经授权的参与者暴露敏感信息 (CWE-200) - CVE-2023-22847 pg_ivm 创建的增量可维护物化视图 (IMMV) 可能会反映出具有行级安全策略 (Row-Level Security) 的行,而这些行是 IMMV 的所有者本不应访问的。
不受控制的搜索路径元素 (CWE-427) - CVE-2023-23554 在刷新 IMMV 时,pg_ivm 会在不指定模式名称的情况下执行函数。在某些条件下,pg_ivm 可能会被诱骗,以 IMMV 所有者的权限执行来自其他模式的意外函数。
在视图维护期间修复行级安全检查 (Yugo Nagata) (CVE-2023-22847)
视图维护是在视图所有者的权限下进行的。如果修改的表具有行级安全 (Row Level Security) RLS 策略,则在视图维护期间,必须使用 IMMV 所有者的权限访问该表中的行,因此视图所有者不可见的行不应出现在 IMMV 中。然而,安全检查未能得到妥善处理,当视图在包含多种命令的查询中进行增量刷新时,例如包含 INSERT 和 UPDATE 的修改 CTE,或者 MERGE 命令,原本不应从视图所有者处访问的行可能会出现在视图内容中。
修复在维护期间使用限定函数名 (Yugo Nagata) (CVE-2023-23554)
以前,在视图维护期间使用的 pg_catalog 模式中的函数名没有限定。这存在问题,因为可能会无意中引用其他模式中的函数。此外,如果存在能够创建函数的恶意用户,这可能导致权限提升,因为任意函数都可能以 IMMV 所有者的权限执行。
重新构建查询以在 search_path 更改后重新计算 min/max (Yugo Nagata) (CVE-2023-23554)
用于重新计算 min/max 值的缓存计划是从视图定义查询文本构建的。因此,当 search_path 更改时,查询文本会再次被解析,并且计划中可能会引用错误的模式中的表或函数。现已修复此问题,通过在 search_path 更改后,从新的查询字符串重建计划,其中使用根据最新 search_path 正确限定的表/函数名称。
完整变更日志:https://github.com/sraoss/pg_ivm/compare/v1.5...v1.5.1
pg_ivm 是一个扩展模块,提供增量视图维护 (IVM) 功能。
增量视图维护 (IVM) 是一种使物化视图保持最新的方法,其中只计算和应用对视图的增量更改,而不是重新计算。pg_ivm 提供了一种即时维护方式,物化视图在基础表被修改后会立即更新。