PostgreSQL 全球开发团队于 2024 年 11 月 14 日宣布,对所有受支持的 PostgreSQL 版本进行了更新,包括 17.1、16.5、15.9、14.14、13.17 和 12.21。此次更新修复了 4 个安全漏洞和过去几个月报告的超过 35 个错误。
目录
-
- 安全问题
- CVE-2024-10976:PostgreSQL 行安全策略未能正确处理用户 ID 更改
- CVE-2024-10977:PostgreSQL libpq 保留了中间人攻击的错误消息
- CVE-2024-10978:PostgreSQL SET ROLE 和 SET SESSION AUTHORIZATION 重置到错误的用户 ID
- CVE-2024-10979:PostgreSQL PL/Perl 环境变量更改执行任意代码
- 错误修复和改进
- 更新说明
- 相关链接
- 安全问题
安全问题
CVE-2024-10976:PostgreSQL 行安全策略未能正确处理用户 ID 更改
- CVSS v3.1 基础得分:4.2
- 受影响版本:12 至 17
PostgreSQL 在跟踪带有行安全策略的表时存在不完整的情况,这可能导致重用的查询查看或更改与预期不同的行。CVE-2023-2455 和 CVE-2016-2193 修复了行安全策略与用户 ID 更改之间的大部分交互问题,但遗漏了一些情况,例如子查询、WITH 查询、安全调用者视图或 SQL 语言函数引用了带有行级安全策略的表。这可能导致在应用角色特定策略时,错误地应用策略,从而允许用户完成原本禁止的读取和修改操作。
CVE-2024-10977:PostgreSQL libpq 保留了中间人攻击的错误消息
- CVSS v3.1 基础得分:3.1
- 受影响版本:12 至 17
PostgreSQL 客户端使用服务器错误消息时,可能允许不受信任的服务器在当前 SSL 或 GSS 设置下向 libpq 应用程序提供任意非空字节。例如,中间人攻击者可以发送一个长错误消息,使得人类或 psql 的屏幕抓取用户将其误认为是有效的查询结果。
CVE-2024-10978:PostgreSQL SET ROLE 和 SET SESSION AUTHORIZATION 重置到错误的用户 ID
- CVSS v3.1 基础得分:4.2
- 受影响版本:12 至 17
PostgreSQL 中不正确的权限分配可能导致权限较低的应用用户查看或更改与预期不同的行。攻击需要应用程序使用 SET ROLE
、SET SESSION AUTHORIZATION
或类似功能。问题出现在应用程序查询使用攻击者提供的参数或将查询结果传达给攻击者时,如果该查询响应 current_setting('role')
或当前用户 ID,它可能会修改或返回数据,就好像会话没有使用 SET ROLE
或 SET SESSION AUTHORIZATION
。
CVE-2024-10979:PostgreSQL PL/Perl 环境变量更改执行任意代码
- CVSS v3.1 基础得分:8.8
- 受影响版本:12 至 17
PostgreSQL PL/Perl 中对环境变量控制不当,允许无权限的数据库用户更改敏感进程环境变量(例如 PATH
)。这通常足以启用任意代码执行,即使攻击者缺乏数据库服务器操作系统用户权限。
错误修复和改进
此次更新修复了过去几个月报告的超过 35 个错误。以下是一些影响 PostgreSQL 17 的问题,这些问题可能也影响其他受支持的 PostgreSQL 版本:
- 修复了附加或分离带有外键约束的表分区时的问题。升级后,受此问题影响的用户需要执行手动步骤来完成修复。具体信息请参考“升级”部分和发布说明。
- 修复了在使用 libc 作为默认校对提供者时,当
LC_CTYPE
设置为C
而LC_COLLATE
设置为不同区域设置时可能导致查询结果不正确的问题。如果数据库中有这样的设置,请在更新后重新索引受影响的索引。此问题仅影响 17.0 版本。 - 多个查询计划器修复,包括不允许分区的校对不匹配时进行分区连接(partitionwise join)。
- 修复了
MERGE ... WHEN NOT MATCHED BY SOURCE
操作可能返回错误答案或wrong varnullingrels
计划错误的问题。 - 修复了
COPY
FORCE_NOT_NULL
和FORCE_NULL
的验证问题。 - 修复了当
json_objectagg()
调用包含易失函数时服务器崩溃的问题。 - 确保分区表和在
CREATE TABLE ... USING
中指定的非内置访问方法之间有注册依赖关系。此修复仅适用于此更新后创建的分区表。 - 修复了可序列化事务提交的竞态条件。
- 修复了
COMMIT PREPARED
的竞态条件,这可能需要在崩溃和恢复后手动删除文件。 - 修复了
pg_cursors
视图,以防止排除未完全设置的游标时出现错误。 - 减少逻辑解码内存消耗。
- 修复了当稳定函数在
CALL
语句的参数列表中被调用,并且CALL
在 PL/pgSQLEXCEPTION
块内时,可能会接收到过时的行值的问题。 - 修复了 ARM (aarch64) 系统上的 JIT 崩溃问题。
psql
的\watch
现在将小于 1ms 的值视为 0(执行之间不等待)。- 修复了在密码文件(
pgpass
)中使用复制用户的凭据失败的问题。 pg_combinebackup
现在如果在应该包含完整备份的目录中存在增量备份文件,则会抛出错误。- 修复了在
vacuumdb
和并行reindexdb
中避免重新索引临时表和索引的问题。
此次更新还更新了时区数据文件至 tzdata 2024b 版本。这个 tzdata 版本将旧的 System-V 兼容性时区名称更改为对应地理时区的别名;例如,PST8PDT
现在是 America/Los_Angeles
的别名。主要可见的后果是,对于标准化时区引入之前的的时间戳,该时区被认为代表命名地点的本地平均太阳时间。例如,在 PST8PDT
中,时间戳 tz 输入如 1801-01-01 00:00 以前会被渲染为 1801-01-01 00:00:00-08
,但现在被渲染为 1801-01-01 00:00:00-07:52:58
。
此外,还有对墨西哥、蒙古和葡萄牙的历史修正。特别是,Asia/Choibalsan
现在是 Asia/Ulaanbaatar
的别名,而不是一个单独的时区,主要是因为发现这两个时区之间的差异基于不可信的数据。
更新说明
所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade
来应用此更新版本;你只需关闭 PostgreSQL 并更新其二进制文件即可。
如果你有带有外键约束的分区表并运行了 ATTACH PARTITION
/DETACH PARTITION
命令,升级后你需要采取进一步的步骤。你可以通过对每个有缺陷的约束执行 ALTER TABLE ... DROP CONSTRAINT
来修复这个问题,然后重新添加约束。如果重新添加约束失败,你需要手动重新建立引用表和被引用表之间的一致性,然后重新添加约束。
此查询可用于识别破损的约束并构建重新创建它们所需的命令:
SELECT conrelid::pg_catalog.regclass AS "受限表",
conname AS 约束,
confrelid::pg_catalog.regclass AS "引用",
pg_catalog.format('ALTER TABLE %s DROP CONSTRAINT %I;',
conrelid::pg_catalog.regclass, conname) AS "删除",
pg_catalog.format('ALTER TABLE %s ADD CONSTRAINT %I %s;',
conrelid::pg_catalog.regclass, conname,
pg_catalog.pg_get_constraintdef(oid)) AS "添加"
FROM pg_catalog.pg_constraint c
WHERE contype = 'f' AND conparentid = 0 AND
(SELECT count(*) FROM pg_catalog.pg_constraint c2
WHERE c2.conparentid = c.oid) <>
(SELECT count(*) FROM pg_catalog.pg_inherits i
WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND
EXISTS (SELECT 1 FROM pg_catalog.pg_partitioned_table
WHERE partrelid = i.inhparent));
由于可能有一个或多个 ADD CONSTRAINT
步骤会失败,你应该将查询的输出保存在文件中,然后尝试执行每一步。
此外,如果你正在运行 PostgreSQL 17.0 并使用 libc 作为默认校对提供者,并且设置了 LC_CTYPE
为 C
而 LC_COLLATE
是不同的区域设置,你需要重建基于文本的索引。你可以使用 REINDEX INDEX CONCURRENTLY
命令来完成。
跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;请参考早期版本的发布说明以获取详细信息。
有关更多详细信息,请查看发布说明。
相关链接
想了解更多资讯
扫码关注👇
了解更多考试相关
扫码添加上智启元官方客服微信👇