给定一个合适的 SECURITY DEFINER 函数,攻击者可以在函数所有者的身份下执行任意 SQL。攻击需要对该函数具有 EXECUTE 权限,而该函数本身必须包含一个参数类型不精确匹配的函数调用。例如,length('foo'::varchar) 和 length('foo') 是不精确的,而 length('foo'::text) 是精确的。
作为利用此漏洞的一部分,攻击者使用 CREATE DOMAIN 在 pg_temp schema 中创建一个类型。攻击模式和修复方法与 CVE-2007-2138 类似。
编写 SECURITY DEFINER 函数仍然需要遵循文档中提到的注意事项
https://postgresql.ac.cn/docs/current/sql-createfunction.html#SQL-CREATEFUNCTION-SECURITY
PostgreSQL 项目感谢 Tom Lane 报告此问题。
| 受影响版本 | 已修复版本 | 修复发布日期 |
|---|---|---|
| 11 | 11.5 | 2019 年 8 月 8 日 |
| 10 | 10.10 | 2019 年 8 月 8 日 |
| 9.6 | 9.6.15 | 2019 年 8 月 8 日 |
| 9.5 | 9.5.19 | 2019 年 8 月 8 日 |
| 9.4 | 9.4.24 | 2019 年 8 月 8 日 |
有关 PostgreSQL 版本信息 的更多信息,请访问 版本信息页面。
| 总体得分 | 7.5 |
|---|---|
| 组件 | 核心服务器 |
| 向量 | AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
如果您希望报告 PostgreSQL 中的新安全漏洞,请发送电子邮件至 security@postgresql.org。
如需报告非安全相关错误,请参阅 报告错误 页面。