2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 16.1、15.5、14.10、13.13、12.17 和 11.22 发布!

发布于 2023-11-09,作者:PostgreSQL 全球开发组
PostgreSQL 项目 安全

PostgreSQL 全球开发组已发布对所有受支持的 PostgreSQL 版本(包括 16.1、15.5、14.10、13.13、12.17 和 11.22)的更新。此版本修复了三个安全漏洞以及过去几个月报告的 55 个以上错误。

此版本包括对索引的修复,在某些情况下,我们建议重新索引。请参阅“更新”部分了解更多详情。

有关更改的完整列表,请参阅 发行说明

PostgreSQL 11 EOL (生命周期结束) 通知

这是 PostgreSQL 11 的最后一个发布版本。PostgreSQL 11 已进入生命周期终点,将不再接收安全和错误修复。如果您在生产环境中使用 PostgreSQL 11,我们建议您计划升级到更新的支持版本。有关更多信息,请参阅我们的版本策略

安全问题

CVE-2023-5868:聚合函数调用中的内存泄露

CVSS v3 基本评分:4.3

受支持且存在漏洞的版本:11 - 16。安全团队通常不测试不受支持的版本,但这个问题非常陈旧。

接收“未知”类型参数的某些聚合函数调用,可能从“未知”类型值的末尾到下一个零字节泄露服务器内存。通常通过没有类型指定的字符串字面量获取“未知”类型的值。我们尚未确认或排除导致泄露字节中包含重要机密信息的攻击的可行性。

PostgreSQL 项目感谢 Jingzhou Fu 报告此问题。

CVE-2023-5869:数组修改中的整数溢出导致缓冲区溢出

CVSS v3 基本评分:8.8

受支持且存在漏洞的版本:11 - 16。安全团队通常不测试不受支持的版本,但这个问题非常陈旧。

在修改某些 SQL 数组值时,缺少溢出检查允许已认证的数据库用户将任意字节写入便于任意代码执行的内存区域。缺少溢出检查还允许已认证的数据库用户读取服务器内存的广泛区域。CVE-2021-32027 的修复覆盖了此类攻击中的一部分,但遗漏了其他攻击。

PostgreSQL 项目感谢 Pedro Gallegos 报告此问题。

CVE-2023-5870:角色 pg_signal_backend 可以向某些超级用户进程发送信号

CVSS v3 基本评分:2.2

受支持且存在漏洞的版本:11 - 16。安全团队通常不测试不受支持的版本,但这个问题非常陈旧。

文档说明 pg_signal_backend 角色不能向“超级用户拥有的后端”发送信号。相反,它可以向后台工作进程(包括逻辑复制启动器)发送信号。它可以向 autovacuum 工作进程和 autovacuum 启动器发送信号。向 autovacuum 工作进程和这两个启动器发送信号不会带来有意义的利用,因此利用此漏洞需要一个非核心的、具有不那么健壮的后台工作进程的扩展。例如,一个不会自动重启的非核心后台工作进程将面临相对于该特定后台工作进程的拒绝服务。

PostgreSQL 项目感谢 Hemanth Sandrana 和 Mahendrakar Srinivasarao 报告此问题。

错误修复和改进

本次更新修复了过去几个月报告的 55 个以上错误。以下列出的问题会影响 PostgreSQL 16。其中一些问题也可能影响 PostgreSQL 的其他受支持版本。

  • 修复了 GiST 索引在“页面拆分”操作期间行为不正确的问题,这可能导致后续索引搜索结果不正确。请在安装此更新后重新索引 GiST 索引。
  • 修复了 B 树索引错误地对 interval 列进行去重的问题。请在安装此更新后重新索引包含 interval 列的任何 B 树索引。
  • 在使用 minmax_multi opsclass 时,为 BRIN 索引中的 datetimestamptztimestamp 值提供更有效的索引。虽然不是必需的,但我们建议在安装此更新后重新索引包含这些数据类型的 BRIN 索引。
  • 修复了批量表插入到分区表的问题。
  • 修复了多分区键的哈希分区表在步骤生成和运行时剪枝中可能导致崩溃的问题。
  • 如果将 pgrowlocks() 应用于分区表,则抛出正确的错误。

  • 修复了在使用 READ COMMITTED 模式进行 MERGE 操作期间,并发更新行的不一致重校验问题。

  • 即使父表被约束排除,也能正确识别继承的 UPDATE/DELETE/MERGE 中的目标表。
  • 修复了构造的 tsvector 的超额分配问题。
  • 修复了 ALTER SUBSCRIPTION 以应用 run_as_owner 选项中的更改。
  • 修复了 COPY FROM 的若干问题,
  • 修复了使用 pg_control 处理撕裂读取的若干问题。
  • 修复了在规划带有 ORDER BYDISTINCT 选项的聚合函数时发生的“找不到用于排序的路径键项”错误。
  • 当启用 track_io_timing 时,将关系扩展操作所花费的时间计入写时间。
  • 跟踪缓存的 CALL 语句的依赖关系,并在需要时重新规划它们。
  • 在读取 WAL 时,将内存不足故障视为 FATAL
  • 修复了 pg_dump 以转储订阅的新 run_as_owner 选项。
  • 修复了 pg_restore,以便选择性还原会包含选定表的表级别和列级别 ACL。
  • pg_upgrade 添加了逻辑,以检查是否使用了过时的数据类型 abstimereltimetinterval
  • 修复了 vacuumdb,使其多个 -N 开关能够实际排除多个模式中的表。
  • amcheck 将不再报告中断的页面删除为损坏。
  • 修复了 btree_gin 索引在 interval 列上使用 <<= 运算符时正确返回数据的问题。

更新

所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。

我们建议您在应用此更新后重新索引某些类型的索引,包括

  • GiST 索引
  • 使用 interval 数据类型的 B 树索引
  • 使用 datetimestamptztimestamp 数据类型以及 minmax_multi opsclass 的 BRIN 索引

在 PostgreSQL 12 及以上版本中,您可以使用 REINDEX CONCURRENTLY 来避免阻塞受影响索引和表的写入,例如

REINDEX INDEX CONCURRENTLY your_index_name;

跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;请参阅早期版本的发行说明以获取详细信息。

有关更多详细信息,请参阅 发行说明

链接

如果您对此版本公告有任何更正或建议,请将其发送至 pgsql-www@lists.postgresql.org 公共 邮件列表