PostgreSQL 全球开发组发布了对所有受支持的 PostgreSQL 版本(包括 16.3、15.7、14.12、13.15 和 12.19)的更新。此版本修复了一个安全漏洞和过去几个月报告的 55 个以上错误。
在系统视图 pg_stats_ext 和 pg_stats_ext_exprs 中发现了一个安全漏洞,可能允许已认证的数据库用户查看他们没有足够权限查看的数据。此漏洞的修复仅适用于新安装的 PostgreSQL,即在此修复应用后使用 initdb 工具创建的 PostgreSQL。如果您当前安装了 PostgreSQL 并担心此问题,请遵循“更新”部分中的说明进行补救。
有关更改的完整列表,请参阅 发行说明。
PostgreSQL 12 将于 2024 年 11 月 14 日停止接收修复。如果您在生产环境中使用 PostgreSQL 12,我们建议您计划升级到更新的、受支持的 PostgreSQL 版本。有关更多信息,请参阅我们的 版本策略。
pg_stats_ext 和 pg_stats_ext_exprs 条目的可见性给表所有者CVSS v3.1 基本得分:3.1
支持的、易受攻击的版本:14 - 16。
PostgreSQL 内置视图 pg_stats_ext 和 pg_stats_ext_exprs 缺少授权,允许未经授权的数据库用户读取其他用户通过 CREATE STATISTICS 命令创建的最常见值和其他统计信息。最常见的值可能会泄露窃听者无法读取的列值,或者他们无法执行的函数的结果。
此修复仅适用于新安装的 PostgreSQL,即在此修复应用后使用 initdb 工具创建的 PostgreSQL。如果您当前安装了 PostgreSQL 并担心此问题,请遵循“更新”部分中的说明进行补救。
PostgreSQL 项目感谢 Lukas Fittl 报告此问题。
本次更新修复了过去几个月报告的 55 个以上错误。以下列出的问题会影响 PostgreSQL 16。其中一些问题也可能影响 PostgreSQL 的其他受支持版本。
VALUES 子句的 INSERT 语句时出现的问题,其中目标列是数组或复合类型的域。MERGE 和 MERGE ... DO NOTHING 时,需要对目标表具有 SELECT 权限。MERGE 中的目标行在修改期间与多个源行匹配时,将引发错误。IS NOT 子句时,对 NULL 分区的错误修剪。ALTER FOREIGN TABLE ... SET SCHEMA 将任何拥有的序列移动到新模式。CREATE DATABASE 现在可以不区分大小写地识别 STRATEGY 关键字。VACUUM 进行多项修复,包括一项可以减少不必要 I/O 的修复。date_bin() 中的错误舍入和溢出风险。initdb -c 现在可以不区分大小写地匹配参数名称。-- 样式注释)的解析方式。所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。
对于受 CVE-2024-4317 影响且希望修复此问题的现有安装,您需要执行以下步骤:
在 PostgreSQL 安装的 share 目录中(例如 /usr/share/postgresql/)查找 SQL 脚本 fix-CVE-2024-4317.sql,或从下方任一 URL 从 PostgreSQL git 仓库下载。您需要使用与您的主版本匹配的脚本。
PostgreSQL 16:https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_16_STABLE
从以上 URL 中,您可以点击标有“raw”的 URL 下载可供复制粘贴的版本。
请务必使用适合您的 PostgreSQL 主版本的脚本。如果看不到此文件,则说明您的版本不受此漏洞影响(仅影响 PostgreSQL 14、15 和 16),或者您的次要版本太旧,还没有此修复。
fix-CVE-2024-4317.sql 脚本。例如,在 psql 中,如果文件位于 /usr/share/postgresql/,则命令将如下所示:\i /usr/share/postgresql/fix-CVE-2024-4317.sql
template0 和 template1 数据库中执行此脚本,否则漏洞将仍然存在于您稍后创建的数据库中。要修复 template0,您需要暂时允许它接受连接。您可以使用以下命令执行此操作:ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
在 template0 和 template1 中执行 fix-CVE-2024-4317.sql 脚本后,您应该撤销 template0 接受连接的能力。您可以使用以下命令执行此操作:
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;请参阅早期版本的发行说明以获取详细信息。
有关更多详细信息,请参阅 发行说明。
如果您对此版本公告有任何更正或建议,请将其发送至 pgsql-www@lists.postgresql.org 公共 邮件列表。