由 PostgreSQL 全球开发组 发布于2024-05-09
PostgreSQL 全球开发组发布了所有受支持的 PostgreSQL 版本的更新,包括 16.3、15.7、14.12、13.15 和 12.19。此版本修复了一个安全漏洞以及过去几个月报告的超过 55 个错误。
在系统视图 pg_stats_ext 和中发现了一个安全漏洞pg_stats_ext_exprs,可能允许经过身份验证的数据库用户查看他们没有足够权限查看的数据。此漏洞的修复仅修复新的 PostgreSQL 安装,即 initdb应用此修复后使用该实用程序创建的安装。如果您当前安装了 PostgreSQL 并且担心此问题,请按照“更新”部分中的说明进行修复步骤。
有关更改的完整列表,请查看 发行说明: https://www.postgresql.org/docs/release/。
PostgreSQL 12 EOL 通知
PostgreSQL 12 将于 2024 年 11 月 14 日停止接收修复。如果您在生产环境中运行 PostgreSQL 12,我们建议您制定计划升级到更新的受支持版本的 PostgreSQL。请参阅我们的 版本控制政策以获取更多信息。
https://www.postgresql.org/support/versioning/
安全问题
CVE-2024-4317:限制pg_stats_ext和pg_stats_ext_exps表项对表所有者的可见性
CVSS v3.1 基本分数:3.1
支持的易受攻击的版本:14 - 16。
在PostgreSQL内置视图pg_stats_ext和pg_stats_ext_exprs中,缺少授权允许非特权数据库用户从其他用户的CREATE statistics命令中读取大多数常见值和其他统计数据。最常见的值可能会显示窃听者无法读取的列值或无法执行的函数的结果。
此修复仅修复新安装的PostgreSQL,即在应用此修复后使用initdb实用程序创建的PostgreSQL。如果你有一个当前的PostgreSQL安装,并且担心这个问题,请按照“更新”部分的说明进行修复步骤。
PostgreSQL项目感谢Lukas Fittl报告了这个问题。
Bug修复和改进
此更新修复了过去几个月报告的超过 55 个错误。下面列出的问题会影响 PostgreSQL 16。其中一些问题也可能会影响其他受支持的 PostgreSQL 版本。
-
修复了INSERT 多行VALUES 子句的问题,其中目标列是数组或复合类型上的域。
-
使用MERGE(MERGE ... DO NOTHING)时需要目标表的SELECT 权限。
-
根据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. 查找SQL脚本fix-CVE-2024-4317。在PostgreSQL安装的共享目录下(例如/usr/share/postgresql/),或者从PostgreSQL git存储库下载。你需要使用与主版本匹配的脚本:
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”的 URL 下载可复制和粘贴的版本。
请务必使用适合您的 PostgreSQL 主要版本的脚本。如果您没有看到此文件,则要么您的版本不易受到攻击(仅 PostgreSQL 14、15 和 16 受到影响),要么您的次要版本太旧而无法修复。
在集群的每个数据库中,以数据库超级用户身份运行fix-CVE-2024-4317.sql(文件位于 中/usr/share/postgresql/)脚本。例如,在 psql中,执行以下命令:
\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;
跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;有关详细信息,请参阅早期版本的发行说明。
有关更多详细信息,请参阅 发行说明:https://www.postgresql.org/docs/release/
链接
-
下载:https://www.postgresql.org/download/
-
发行说明:https://www.postgresql.org/docs/release/
-
安全:https://www.postgresql.org/support/security/
-
版本控制策略:https://www.postgresql.org/support/versioning/
-
PostgreSQL 16发布公告:https://www.postgresql.org/about/press/
-
在推特上关注@postgresql:https://twitter.com/postgresql
-
捐赠:https://www.postgresql.org/about/donate/
如果您对本发布公告有更正或建议,请将其发送到pgsql-www@lists.postgresql.org公共邮件列表。
本文分享自微信公众号 - 开源软件联盟PostgreSQL分会(kaiyuanlianmeng)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。