10 月 29 日,pgAdmin 4 发布 9.19,一次修了 15 个安全漏洞(CVE-2026-116238 至 CVE-2026-116252)。最重的一条是 CVE-2026-116241,CVSS 9.9,导入/导出工具里的命令注入。而这条漏洞最值得写下来的地方,是它的来历:它是 7 月那条同为 9.9 分的 CVE-2026-17566 的绕过——上次的修复只堵了一半,这次从另一半绕了回来。

pgAdmin CVE-2026-116241,CVSS 9.9 命令注入:9.17 的修复被绕过,9.19 才补全

漏洞出在哪:双引号里的一个反斜杠

pgAdmin 的导入/导出数据工具在导出查询时,会把用户提交的查询包进 psql 的 \copy (...) TO 命令里。为了防止查询从这个包装里逃出去,它会检查查询的括号是否平衡。

7 月的 CVE-2026-17566 就是从这里逃出去的:单引号字符串里的反斜杠会改变引号的含义,检查器按一种理解算,psql 按另一种理解执行,藏在后面的 TO PROGRAM 子句就被 psql 当成命令执行了。9.17 修了它,办法是拒绝单引号字符串里的反斜杠。

CVE-2026-116241 走的是同一条路,只是换了引号:双引号标识符里的反斜杠没被拦住。检查器把 \" 后面的双引号当成标识符的结束,psql 在 standard_conforming_strings 关闭时却不这么认——两边对引用的理解一错位,藏起来的右括号就提前结束了 \copy (...) 包装,跟在后面的 TO PROGRAM 子句随即被执行,命令以运行 pgAdmin 的操作系统账号身份跑在 pgAdmin 主机上。

利用门槛不高:已认证的普通用户就够了。导入/导出数据权限默认就授予非管理员,而 standard_conforming_strings 普通数据库角色自己就能关掉,不需要管理员配合。

口径要说准:公开 exploit 与在野利用

这一条的公开 exploit 说法,目前两边对不上,需要写清楚:

  • Black Kite 的周报称,CVE-2026-116241 的公开 exploit 已于 11 月 1 日发布,并据此统计约 5,541 台主机仍跑着 80 个有漏洞的版本。
  • SecurityOnline(11 月 2 日)与 cve.now(11 月 6 日更新)则仍写未见公开 PoC、未确认在野利用;15 个漏洞无一列入 CISA KEV。

两边都没有再进一步的佐证。准确的说法是:补丁已经发布,默认权限就是入口,攻击窗口已经打开;在野利用与公开 exploit 是否落地,仍待确认。这不改变处理优先级——等确认了再打补丁,就晚了。

为什么 DBA 要格外在意

pgAdmin 以 server 模式部署时,是全队共用的数据库控制台。打穿它,拿到的不只是一台主机:

  • 同批的 CVE-2026-116242、116244、116245、116247,让普通用户能拿到 pgAdmin 服务账号自己的 SSH 身份、Kerberos 票据、密码文件与客户端证书——等于通向它所管理的每一台数据库。
  • CVE-2026-116239(8.5 分):LDAP 或 Kerberos 登录时只比对用户名,可能直接登进同名的内部账号,包括初始管理员。
  • CVE-2026-116238:未登录就能绕过失败登录次数限制,对管理员账号做密码猜测。

也就是说,这 15 个漏洞合起来看,pgAdmin 服务账号手里攒的东西——保存的服务器密码、SSH 密钥、Kerberos 票据、客户端证书——正在从”服务账号才有”变成”普通用户也能拿到”。对 DBA 来说,这比单条命令注入更值得警惕。

该干什么,照着做

  1. 立即升级到 pgAdmin 4 9.19,server 模式与桌面版都要升;升完确认版本号确实是 9.19
  2. 升之前先收权限:导入/导出数据权限只留给可信管理员——这是 CVE-2026-116241 的直接入口
  3. pgAdmin 的 Web 界面只放行可信网段;不需要的共享存储目录先停用
  4. 审计 pgAdmin 服务账号能触及的东西:~/.ssh、Kerberos 票据、~/.pgpass、客户端证书,确认没有多余的凭据躺在那里
  5. 查日志:导入/导出操作里有没有异常的 TO PROGRAM 用法;pgAdmin 服务账号有没有派生出非预期的进程

7 月那次 9.17 之后,很多人以为这条命令注入已经修好了。这次 9.19 证明只修了一半——双引号里的反斜杠还在。升到 9.19 之后,顺手确认一下版本,别只看”已经升过”就放心。

原文作者: liups.com

原文链接: https://liups.com/posts/34262b2c/

许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议