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

CVE-2024-4317

限制 "pg_stats_ext" 和 "pg_stats_ext_exprs" 条目对表的可见性,仅限于表所有者

PostgreSQL 内置视图 pg_stats_ext 和 pg_stats_ext_exprs 中存在的授权缺失问题,允许未经授权的数据库用户读取其他用户通过 CREATE STATISTICS 命令创建的最常见值和其他统计信息。最常见的值可能会泄露窃听者无法读取的列值,或者泄露他们无法执行的函数的结果。仅安装不受影响的版本可以修复全新的 PostgreSQL 安装,即在安装该版本后使用 initdb 工具创建的安装。当前的 PostgreSQL 安装将继续存在漏洞,除非按照发行说明中的说明进行操作,发行说明在下方部分中提供。在 14-16 的主要版本中,PostgreSQL 16.3、15.7 和 14.12 之前的次要版本受到影响。PostgreSQL 14 之前的版本不受影响。

此修复程序仅修复全新的 PostgreSQL 安装,即在应用此修复程序后使用 initdb 工具创建的安装。如果您使用的是当前 PostgreSQL 安装并对此问题感到担忧,请按照以下补救步骤解决该问题。

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

  2. 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

  3. PostgreSQL 15: https://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 14: https://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”的链接下载可以复制粘贴的版本。

请确保使用适合您的 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;

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

版本信息

受影响版本 已修复版本 修复发布日期
16 16.3 2024 年 5 月 9 日
15 15.7 2024 年 5 月 9 日
14 14.12 2024 年 5 月 9 日

有关 PostgreSQL 版本信息 的更多信息,请访问 版本信息页面

CVSS 3.0

总体得分 3.1
组件 核心服务器
向量 AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N

报告安全漏洞

如果您希望报告 PostgreSQL 中的新安全漏洞,请发送电子邮件至 security@postgresql.org

如需报告非安全相关错误,请参阅 报告错误 页面。