PostgreSQL 安全漏洞集
2018-03-05 12:22:05 阿炯

本文收集了 PostgreSQL 的安全漏洞集合。

CVE-2018-1058

该漏洞的描述为,用户可在不同的 schema 中创建 like-named 对象,而这些 schema 会改变其他用户查询的行为并导致意外或恶意的行为发生,即我们常说的木马攻击。

对应的PostgreSQL发布版本为:10.3, 9.6.8, 9.5.12, 9.4.17 和 9.3.22。

PostgreSQL 10.4, 9.6.9, 9.5.13, 9.4.18 和 9.3.23 全系列更新发布!本次更新修复了一个安全问题以及过去三个月报告的一些错误。还修复了一个安全漏洞:
CVE-2018-1115: 函数 pg_logfile_rotate() 权限过高,使得可允许访问控制列表。

本次更新还修复了过去几个月报告的 50 多个错误。其中一些问题仅影响版本 10,但更多的是影响所有受支持的版本。更多详情请参考官方公告

PostgreSQL 11.1,10.6,9.6.11,9.5.15,9.4.20 和 9.3.25 发布,PostgreSQL 开发团队同时发布了对所有受支持版本的更新,包括 11.1、10.6、9.6.11、9.5.15、9.4.20 和 9.3.25 六个版本,修复了一个安全问题以及过去三个月报告的错误。

CVE-2018-16850: SQL injection in pg_upgrade and pg_dump, via CREATE TRIGGER ... REFERENCING.

Bug 修复和改进

其中有一些问题仅影响 PostgreSQL 11,但多数问题影响所有受支持的版本。值得注意的是,9.3.25 将是 PostgreSQL 9.3 的最终维护版本,该支线已 EOL ,将不再提供任何错误或安全修复。

CVE-2019-9193:乌龙漏洞

近期在互联网媒体上流传 PostgreSQL 存在任意代码执行的漏洞:拥有'pg_read_server_files'权限的攻击者可利用此漏洞获取超级用户权限,执行任意系统命令。

针对此言论,PostgreSQL 官方在2019年4月4日发表声明如下:互联网媒体上报导的有关 PostgreSQL 方面的安全漏洞 CVE-2019-9193,PostgreSQL 安全团队强调这不是一个安全漏洞, 我们认为创建这个 CVE-2019-9193 就是个错误,而且已经和 CVE-2019-9193 的报告者联系,调查为什么会创建这个条目。

COPY .. PROGRAM 功能明确规定,只能被授予超级用户权限、或是默认 pg_execute_server_program 角色的数据库用户来执行。根据设计,此功能允许被授予超级用户或 pg_execute_server_program 的用户作为 PostgreSQL 服务器运行的操作系统用户(通常是“postgres”)执行操作。CVE 中提到的默认角色 pg_read_server_files 和 pg_write_server_files 不会授予数据库用户使用 COPY .. PROGRAM 的权限。

根据设计,数据库超级用户与运行数据库服务所在的操作系统的用户之间不存在不同的安全边界,另外 PostgreSQL 服务器不允许作为操作系统超级用户(例如“root”)运行。PostgreSQL 9.3 中添加的 COPY .. PROGRAM 的功能并未改变上述设计原则,只是在现有的安全边界内添加了一个功能。

我们鼓励 PostgreSQL 的所有用户遵循最佳实践方案,即永远不要向远程用户或其他不受信任的用户授予超级用户的访问权限。这是系统管理中应遵循的安全操作标准,对于数据库管理也需要遵循。

社区公告链接:https://www.postgresql.org/about/news/1935/


CVE-2019-10164:通过设置密码,基于堆栈的缓冲区溢出

受影响版本:10, 11, 12 beta

经过身份验证的用户可以通过将自己的密码更改为特殊值来创建基于堆栈的缓冲区溢出。除了会导致 PostgreSQL 服务器崩溃之外,还可以利用他针对 PostgreSQL 系统帐户,以执行任意代码。

此外,恶意服务器可以在 SCRAM 身份验证过程中发送特制的消息,并导致启用 libpq 的客户端崩溃或针对客户端的操作系统帐户执行任意代码。官方建议所有运行 PostgreSQL 10,11 和 12 beta 的用户尽快升级。


2020年8月14日,曝出了两个漏洞:

CVE-2020-14349:逻辑复制中存在不受控制的搜索路径(search path)元素(受影响版本:10-12)

PostgreSQL 的search_path设置决定了搜索表、函数和运算符等的模式。CVE-2018-1058 修复程序导致大多数 PostgreSQL 提供的客户端应用程序被清除search_path,但逻辑复制继续让search_path保持不变。复制发布者或订阅者数据库的用户可以在public模式中创建对象,并利用它们在运行复制的身份下执行任意 SQL 函数(通常以超级用户的身份)。但如果采用了文档化的 secure schema 使用模式进行安装则不容易受到攻击。


CVE-2020-14350:CREATE EXTENSION中存在不受控制的搜索路径元素(受影响版本:9.5-12)

安全团队通常不会测试不支持的版本,但是这个问题已经非常陈旧。具体来说就是,当超级用户运行某些CREATE EXTENSION语句时,用户可能能够以该超级用户的身份执行任意 SQL 函数。