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,我们建议您制定计划升级到更新的、受支持的 PostgreSQL 版本。请参阅我们的版本控制策略以获取更多信息。

安全问题

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

CVSS v3 基本评分:4.3

受支持的易受攻击的版本:11 - 16。安全团队通常不测试不受支持的版本,但这个问题很早就存在。

接收“unknown”类型参数的某些聚合函数调用可能会从“unknown”类型值的末尾到下一个零字节处泄露服务器内存的字节。通常通过没有类型指定的字符串文字获得“unknown”类型的值。我们尚未确认或排除在泄露的字节中安排存在重要机密信息的可行攻击。

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 将不再将中断的页面删除报告为损坏。
  • 修复了使用 <<= 运算符时 interval 列上的 btree_gin 索引无法正确返回数据的问题。

更新

所有 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 公共邮件列表