PostgreSQL 11.5、10.10、9.6.15、9.5.19、9.4.24 和 12 Beta 3 发布!

发布于 2019-08-08,作者:PostgreSQL 全球开发小组
PostgreSQL 项目 安全

PostgreSQL 全球开发小组发布了我们数据库系统所有受支持版本的更新,包括 11.5、10.10、9.6.15、9.5.19 和 9.4.24,以及 PostgreSQL 12 的第三个 Beta 版本。此版本修复了 PostgreSQL 服务器中的两个安全问题、PostgreSQL Windows 安装程序之一中发现的两个安全问题,以及自上次发布以来报告的 40 多个错误。

用户应尽快安装这些更新。

关于 PostgreSQL 12 Beta 的说明

本着开源 PostgreSQL 社区的精神,我们强烈建议您在数据库系统中测试 PostgreSQL 12 的新功能,以帮助我们消除可能存在的任何错误或其他问题。虽然我们不建议您在生产环境中运行 PostgreSQL 12 Beta 3,但我们鼓励您找到方法针对此 Beta 版本运行您典型的应用程序工作负载。

您的测试和反馈将帮助社区确保 PostgreSQL 12 版本维护我们提供世界上最先进的开源关系数据库的稳定、可靠版本的标准。

安全问题

此版本已修复四个安全漏洞

CVE-2019-10208: pg_temp 中的 TYPESECURITY DEFINER 执行期间执行任意 SQL

受影响版本:9.4 - 11

给定一个合适的 SECURITY DEFINER 函数,攻击者可以在函数所有者的身份下执行任意 SQL。攻击需要对函数具有 EXECUTE 权限,该函数本身必须包含一个具有不精确参数类型匹配的函数调用。例如,length('foo'::varchar)length('foo') 是不精确的,而 length('foo'::text) 是精确的。作为利用此漏洞的一部分,攻击者使用 CREATE DOMAINpg_temp 模式中创建类型。攻击模式和修复类似于 CVE-2007-2138 的模式和修复。

编写 SECURITY DEFINER 函数仍然需要
遵循文档中指出的注意事项

https://postgresql.ac.cn/docs/current/sql-createfunction.html#SQL-CREATEFUNCTION-SECURITY

PostgreSQL 项目感谢 Tom Lane 报告此问题。

CVE-2019-10209: 哈希子计划的跨类型比较中的内存泄露

受影响版本:11

在包含假设的用户定义哈希相等运算符的数据库中,攻击者可以读取服务器内存的任意字节。要使攻击成为可能,超级用户需要创建不寻常的运算符。对于并非专门为攻击而设计的运算符,有可能具有启用攻击的属性,但我们不知道具体的示例。

PostgreSQL 项目感谢 Andreas Seltenreich 报告此问题。

CVE-2019-10210: EnterpriseDB Windows 安装程序将 PostgreSQL 超级用户密码写入未受保护的临时文件

受影响版本:适用于 9.4 - 11 版本的 EnterpriseDB Windows 安装程序

EnterpriseDB Windows 安装程序将密码写入其安装目录中的临时文件,创建初始数据库,并删除该文件。在该文件存在的几秒钟内,本地攻击者可以从该文件中读取 PostgreSQL 超级用户密码。

PostgreSQL 项目感谢 Noah Misch 报告此问题。

CVE-2019-10211: EnterpriseDB Windows 安装程序捆绑的 OpenSSL 从未受保护的目录执行代码

受影响版本:适用于 9.4 - 11 版本的 EnterpriseDB Windows 安装程序

当数据库服务器或 libpq 客户端库初始化 SSL 时,libeay32.dll 尝试从硬编码目录读取配置。通常,该目录不存在,但任何本地用户都可以创建它并注入配置。此配置可以指示 OpenSSL 以运行 PostgreSQL 服务器或客户端的用户身份加载和执行任意代码。大多数 PostgreSQL 客户端工具和库都使用 libpq,并且使用其中任何一个都可能遇到此漏洞。此漏洞与 CVE-2019-5443 非常相似,但它是独立产生的。可以通过将环境变量 OPENSSL_CONF 设置为 "NUL:/openssl.cnf" 或任何其他不存在的文件名来解决此漏洞。

PostgreSQL 项目感谢 curl 安全团队的 Daniel Gustafsson 报告此问题。

错误修复和改进

此更新还修复了过去几个月报告的 40 多个错误。其中一些问题仅影响版本 11,但许多问题影响所有受支持的版本。

其中一些修复包括

  • 修复在单个命令中修改多个列类型时 ALTER TABLE ... ALTER COLUMN TYPE 的问题。此问题是在之前的累积更新(11.4、10.9、9.6.14、9.5.18、9.4.23 和 12 beta 2)中引入的。
  • 确保分区键列不会因“间接删除”而删除,例如从删除键列的数据类型(例如,自定义数据类型)的级联中删除。此修复仅应用于新创建的分区表:如果您认为您有受影响的分区表(例如,分区键使用自定义数据类型的表),则需要创建一个新表并将您的数据移动到其中,或者使用 pg_upgrade
  • 防止在子分区中存在挂起的触发器事件时删除分区表的触发器。这尤其会影响由触发器实现的外键约束。
  • 对分区的一些其他修复,包括修复可能导致查询效率低下的分区修剪。
  • 修复可能导致 EXISTS 查询中出现重复结果行的并行哈希连接。
  • 对查询计划器的一些修复。
  • 对导致查询死锁的问题的一些修复。
  • 修复重建外键约束时多列外键的问题。
  • 防止为继承表构建扩展统计信息。
  • 修复包含 -infinity/infinity 端点的日期范围的规范化,以确保行为与文档匹配。
  • 修复将非常大的 money 值转换为 numeric 时丢失小数位的问题。
  • 修复返回复合类型的 PL/pgSQL 函数的问题。
  • 使 libpq 忽略连接服务文件中的 \r 回车符,这在某些极端情况下会导致连接失败。
  • psql 的一些修复,包括避免在 SET variable = 之后出现不正确的制表符补全选项。
  • 提高 contrib/amcheck 的索引验证的可靠性。
  • initdb 设置为首选 C 库定义的时区行为,而不是 localtimeposixrules 定义的时区行为。这可确保 PostgreSQL 使用“真实”时区名称而不是人为的名称。
  • 修复 pg_dump 以确保自定义运算符类以正确的顺序转储,以防止创建不可恢复的转储。
  • 修复使用 -R 选项时 pgbench 中可能出现的死锁。
  • 修复 MIPS CPU 的自旋锁汇编代码,以便它可以在 MIPS r6 上工作。

此更新还包含 tzdata 版本 2019b,用于巴西的 DST 法律变更,以及香港、意大利和巴勒斯坦的历史修正。此更新还增加了对 zic 新的 -b slim 选项的支持,以减小已安装区域文件的大小,但 PostgreSQL 当前未使用它。

有关更多详细信息,您可以在此处阅读完整的发行说明副本

https://postgresql.ac.cn/docs/release/

更新

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

跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;有关详细信息,请参阅早期版本的发行说明。

PostgreSQL 9.4 将于 2020 年 2 月 13 日停止接收修复。有关更多信息,请参阅我们的 版本控制策略

测试错误和兼容性

每个 PostgreSQL 版本的稳定性在很大程度上取决于您,社区,使用您的工作负载和测试工具测试即将到来的版本,以便在 PostgreSQL 12 普遍可用之前发现错误和回归。由于这是一个 Beta 版本,数据库行为、功能细节和 API 仍可能发生细微变化。您的反馈和测试将有助于确定新功能的最终调整,因此请在近期进行测试。用户测试的质量有助于确定我们何时可以发布最终版本。

未解决的问题列表在 PostgreSQL wiki 中公开可用。您可以使用 PostgreSQL 网站上的此表单 报告错误

https://postgresql.ac.cn/account/submitbug/

Beta 计划

这是 12 版本的第三个 Beta 版本。PostgreSQL 项目将根据测试需要发布额外的 Beta 版本,然后发布一个或多个候选版本,直到 2019 年底的最终版本。有关更多信息,请参阅 Beta 测试 页面。

链接