PostgreSQL一次性修了20多个CVE:to\_char堆溢出可RCE,14-18全系列中招
零日手记
零日手记
随笔漫记安全路
2026年8月18日 08:46
北京
在小说阅读器读本章
去阅读
8月13日,PostgreSQL发了一波安全更新——18.6、17.11、16.15、15.19、14.24同步发布,19 Beta 3也跟着出了。
这一波修了20多个CVE,其中至少5个是堆缓冲区溢出,标注\"executes arbitrary code\"。最值得关注的是CVE-2026-14669——to_char()函数处理时区字符串时的堆溢出,14到18全系列版本受影响。
CVE-2026-14669:to\_char堆溢出
to_char()是PostgreSQL里格式化输出的函数,日常SQL里经常用。漏洞出在时区缩写的处理上。
源码位置:src/backend/utils/adt/formatting.c
有问题的代码:
strcpy(s, tmtcTzn(in));
直接用strcpy把时区缩写复制到输出缓冲区,没有长度校验。如果时区缩写超长,就会溢出堆缓冲区。
修复commit(3d724bf)做的事很简单:复制之前先检查长度,超长的截断。
利用条件:攻击者需要能控制to_char()的时区输入。在多租户数据库环境或允许用户自定义时区设置的场景下,这个条件可以满足。堆溢出理论上可达RCE,但实际利用难度取决于堆布局和缓解机制(ASLR等)。
不只是to\_char:5个可RCE的堆溢出
8月13日这批更新里,标注\"executes arbitrary code\"的CVE至少有5个:
| CVE | 函数/组件 | 类型 |
|---|---|---|
| CVE-2026-14669 | to\_char() 时区处理 | 堆溢出→RCE |
| CVE-2026-19385 | pg\_dump | 堆溢出→RCE |
| CVE-2026-14676 | pg\_stat\_statements | 堆溢出→RCE |
| CVE-2026-14670 | plperl tied object | 堆溢出→RCE |
| CVE-2026-14663 | regexp 正则引擎 | 堆溢出→RCE |
pg\_dump那个尤其值得注意——pg_dump是备份工具,通常由DBA或cron job以较高权限运行。如果备份了一个被植入恶意数据的数据库,pg\_dump在处理时触发堆溢出,就是权限提升。
还有几个没标RCE但同样危险的:
- CVE-2026-14678:pg\_trgm picksplit读取越界
- CVE-2026-14677:栈缓冲区溢出,写入0x0和0x1到服务器内存
- CVE-2026-18024:ascii()函数读取越界
影响范围
| 大版本 | 受影响 | 修复版本 |
|---|---|---|
| PostgreSQL 14 | < 14.24 | 14.24 |
| PostgreSQL 15 | < 15.19 | 15.19 |
| PostgreSQL 16 | < 16.15 | 16.15 |
| PostgreSQL 17 | < 17.11 | 17.11 |
| PostgreSQL 18 | < 18.5 | 18.5(注:18.6也已发布) |
14到18,五年的大版本全中。pg\_stat\_statements那个只影响14/15/16/18(17不在列表里),其余的基本全系列。
修复建议
- 立即升级到最新小版本:14.24、15.19、16.15、17.11、18.5+,小版本升级通常兼容
- pg\_dump要单独升级——即使数据库升级了,系统里残留的旧版pg\_dump仍是风险点
- 多租户环境限制用户自定义时区设置
- 检查pg\_stat\_statements扩展是否启用——很多生产环境默认装了但没人在意
- 关注基于PostgreSQL的衍生项目——Apache Cloudberry已确认受CVE-2026-14669影响,Greenplum、Citus、Amazon Aurora PostgreSQL、Azure Database for PostgreSQL等都需要跟进各自的补丁节奏
最后一条容易被忽略。PostgreSQL的衍生生态很大,上游修了不代表下游同步了。如果你的数据库是云托管版或衍生版,等厂商公告。
参考链接
- PostgreSQL安全页面:postgresql.org/support/security/
- CVE-2026-14669详情:postgresql.org/support/security/CVE-2026-14669/
- 修复commit:github.com/postgres/postgres/commit/3d724bf4fde67a2931733a5143b7d6c12b23990c
- 14.24发布说明:postgresql.org/docs/release/14.24/
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论