PostgreSQL 16.3、15.7、14.12、13.15 和 12.19 发布!

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

PostgreSQL 全球开发组已发布所有受支持的 PostgreSQL 版本(包括 16.3、15.7、14.12、13.15 和 12.19)的更新。此版本修复了一个安全漏洞以及过去几个月报告的 55 多个错误。

在系统视图 pg_stats_extpg_stats_ext_exprs 中发现了一个安全漏洞,这可能会允许经过身份验证的数据库用户查看他们没有足够权限查看的数据。此漏洞的修复仅修复新的 PostgreSQL 安装,即在应用此修复后使用 initdb 实用程序创建的安装。如果您有当前的 PostgreSQL 安装并且担心此问题,请按照“更新”部分中的说明进行补救。

有关更改的完整列表,请查看发行说明

PostgreSQL 12 EOL 通知

PostgreSQL 12 将于 2024 年 11 月 14 日停止接收修复。如果您在生产环境中运行 PostgreSQL 12,我们建议您制定计划升级到较新、受支持的 PostgreSQL 版本。有关更多信息,请参阅我们的版本控制策略

安全问题

CVE-2024-4317:限制 pg_stats_extpg_stats_ext_exprs 条目的可见性,仅限表所有者可见

CVSS v3.1 基本评分:3.1

受支持的易受攻击的版本:14 - 16。

PostgreSQL 内置视图 pg_stats_extpg_stats_ext_exprs 中缺少授权,允许无特权的数据库用户读取其他用户的 CREATE STATISTICS 命令中最常用的值和其他统计信息。最常用的值可能会泄露窃听者无法读取的列值或他们无法执行的函数的结果。

此修复仅修复新的 PostgreSQL 安装,即在应用此修复后使用 initdb 实用程序创建的安装。如果您有当前的 PostgreSQL 安装并且担心此问题,请按照“更新”部分中的说明进行补救。

PostgreSQL 项目感谢 Lukas Fittl 报告此问题。

错误修复和改进

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

  • 修复使用多行 VALUES 子句的 INSERT 问题,其中目标列是数组或复合类型的域。
  • 在使用 MERGE ... DO NOTHING 时,需要目标表上的 SELECT 权限才能使用 MERGE
  • 根据 SQL 标准,如果 MERGE 中的目标行在修改期间连接到多个源行,则会引发错误。
  • 修复表在布尔列上分区且查询具有布尔 IS NOT 子句时错误地修剪 NULL 分区的问题。
  • 使 ALTER FOREIGN TABLE ... SET SCHEMA 将任何拥有的序列移动到新的模式中。
  • CREATE DATABASE 现在以不区分大小写的方式识别 STRATEGY 关键字。
  • 修复 EXPLAIN 在位图堆扫描期间如何计数堆页面,以显示所有计数的页面,而不仅仅是具有可见元组的页面。
  • 避免在删除孤立的临时表期间发生死锁。
  • 修复了 VACUUM 的几个问题,包括一个可以减少不必要的 I/O 的问题。
  • 几个查询计划器修复。
  • 为安装具有数千个角色的某些操作添加优化。
  • 修复返回单个复合类型列的 SQL 语言过程的混乱问题。
  • 修复 date_bin() 中的不正确舍入和溢出风险。
  • 检测将间隔加到/减去时间戳时是否发生整数溢出。
  • 修复逻辑复制的几个竞争条件,包括确定是否需要表同步操作。
  • 如果无法将新服务器会话的客户端套接字置于非阻塞模式,则断开连接。
  • initdb -c 现在以不区分大小写的方式匹配参数名称。
  • 修复 PL/pgSQL 如何解析表达式后的单行注释-- 样式注释)。

更新

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

对于受 CVE-2024-4317 影响并希望补救该问题的现有安装,您将必须执行以下步骤

  1. 在 PostgreSQL 安装的 share 目录(例如,在 /usr/share/postgresql/ 中)查找 SQL 脚本 fix-CVE-2024-4317.sql,或从以下 URL 之一的 PostgreSQL git 存储库下载它。您需要使用与您的主要版本匹配的脚本

  2. PostgreSQL 16https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_16_STABLE

  3. PostgreSQL 15https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_15_STABLE
  4. PostgreSQL 14https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_14_STABLE

从上面的 URL 中,您可以单击显示“raw”的 URL 以下载您可以复制和粘贴的版本。

请务必使用适合您的 PostgreSQL 主要版本的脚本。如果您没有看到此文件,则表示您的版本没有漏洞(仅 PostgreSQL 14、15 和 16 受影响)或您的次要版本太旧而没有修复。

  1. 在集群的每个数据库中,以数据库超级用户的身份运行 fix-CVE-2024-4317.sql 脚本。例如,在 psql 中,如果该文件位于 /usr/share/postgresql/ 中,则此命令如下所示

\i /usr/share/postgresql/fix-CVE-2024-4317.sql

  1. 您还必须在 template0template1 数据库中执行此脚本,否则您稍后创建的数据库中仍将存在该漏洞。要修复 template0,您需要临时允许它接受连接。您可以使用以下命令执行此操作

ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;

template0template1 中执行 fix-CVE-2024-4317.sql 脚本后,您应该撤销 template0 接受连接的能力。您可以使用以下命令执行此操作

ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;

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

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

链接

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