PostgreSQL 高危 RCE:CVE-2026-15742,装了 fuzzystrmatch 的先自查
一句话结论:2026 年 8 月 13 日 PostgreSQL 发布的安全更新里,CVE-2026-15742 是个 CVSS 8.8 的高危 RCE。触发条件很具体——装了 fuzzystrmatch 扩展,且版本低于修复线。先花 30 秒自查,再决定是升级还是直接 DROP EXTENSION。
1. 漏洞是怎么回事
问题出在 contrib 模块 fuzzystrmatch 的 levenshtein() / levenshtein_less_equal() 函数:整数回绕(integer wraparound)导致任意地址写入,最终能以 PostgreSQL 操作系统用户的身份执行任意代码。
翻译成 DBA 能听懂的话:
- 不需要操作系统账号,只要能连上数据库执行 SQL 就可能触发;
- 炸的是 postgres 这个 OS 用户,数据库服务器基本就交代了;
- 但前提是目标库装了
fuzzystrmatch——这个扩展很多人装完就忘了。
2. 影响版本
官方修复线(低于以下版本即受影响):
| 大版本 | 修复版本 |
|---|---|
| 18 | 18.6 |
| 17 | 17.11 |
| 16 | 16.15 |
| 15 | 15.19 |
| 14 | 14.24 |
| 13 及以下 | 已 EOL,全部视为受影响 |
注意 13 及以下已经 EOL,官方不会再出补丁,还在跑的要么升级要么自求多福。
3. 自查:两条 SQL + 一个 shell 循环
1 | -- 查版本 |
实例上库多的时候,一个个连太费劲,直接循环:
1 | for db in $(psql -tAc "SELECT datname FROM pg_database WHERE datistemplate = false"); do |
装了扩展 + 版本低于修复线 = 中招条件拉满。
4. 处置
- 首选升级:升到上面表格里的修复版本。小版本升级一般不需要 dump/restore,但升级前先看 release notes,备库先升、主库后升。
- 不能马上升级:评估业务是否真的在用
levenshtein()这类函数,不用就DROP EXTENSION fuzzystrmatch;——扩展删了,攻击面就没了。 - 纵深防御:复查数据库账号权限,别给业务账号超纲的权限;网络层限制能直连数据库的主机。
5. 顺手的事
我们在 DBAClaw 的 PG 巡检引擎里已经加了这条规则:装了 fuzzystrmatch 且版本低于修复线就报”高/安全”告警,版本解析不出来时不误报。巡检跑一遍,全实例有没有中招一目了然。
参考:
原文作者: liups.com
原文链接: http://liups.com/posts/3c95b736/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议