事件概述
pgAdmin 4 是 PostgreSQL 社区最广泛使用的开源 Web 管理控制台,超过 1500 万名开发者与 DBA 在日常使用。安全研究人员披露,在其 Import/Export Data 工具中存在一个高危远程代码执行漏洞,被分配为 CVE-2026-17566,CVSS 评分 9.4(严重)。
该漏洞出现在转换 SQL 为 psql copy 命令的 Jinja 模板中。由于反斜杠转义在传入 SQL 与 psql 之间不匹配,被授权用户可以跳出查询的 wrap 包裹,随后让 psql 执行任意系统命令。需要说明的是,该漏洞需要企业 pgAdmin 账号,不是公网未授权 RCE;但由于它是 DBA 上例行例行项目使用的管理控制台,被授权后可获得并式执行代码能力,难免成为后续侵入的跳板。
技术细节
pgAdmin 4 提供 Import/Export Data 功能帮助用户从客户端导入 / 导出 SQL 查询结果。为了将 SQL 串转换为后台 psql ... \copy ... FROM 语句,后端使用了 Jinja 模板进行拼接。原本设计中要保证用户传入的 SQL 不会跳出 \copy ... FROM STDIN 这个状态。但是在这个过程中,代码只处理了部分转义字符,对用户输入中的反斜杠转义不一致:
- pgAdmin 在输入阶段以 Python 字符串表达式进行转义;
- psql 采用了完全不同的语义解析,对多重转义、
$、双引号等处理逻辑不同。
这意味着被授权用户可以输入一个看似是查询但本质上可以跳出 \copy 的 SQL 串。例如,在查询中注入 \;、特殊转义字符、多行查询结枂,可让 psql 在序列里认为是另一条命令。该命令可以调用 psql 的系统辅助功能(例如 \! 执行 shell ),或者调用 \copy ... PROGRAM 执行任意系统代码。最后,该代码以 pgAdmin 服务进程权限运行。
需要人为外部命令注入这个过程才能被触发。但考虑到 pgAdmin 上例行调试、复现、数据导入场景与企业常见的“提交项目负责人查询项目”场景,该漏洞被利用的可能性不低。谏言口式报告评语指出,该漏洞为 2025 年 CVE-2025-13780 的同源同类问题,代表原本修复并未完全覆盖同样的转义模型。这说明只修复“报告点”是不够的,需要对所有转义路径进行系统性重构。
影响评估
- 严重性评分:9.4(严重)。需要授权、但不需要高权限用户。抵得上多数 DBA 账号。
- 跨服务链生效:企业内部 pgAdmin 多被部署在内网访问位置,一旦被打穿可作为跳板对后端 PostgreSQL 、存储、备份进行进一步动作。
- 代码重构意义:该漏洞与去年 CVE-2025-13780 共享同一个模板路径与转义逻辑。为避免类似问题重复出现,社区已推动将 psql 调用改为参数化表单而非 Jinja 拼接,但为亮点是仍需部署新版本才能拦截。
修复建议
- 立即升级 pgAdmin 4:升级到含该 CVE 修复的最新版本。为默认企业社区中仅源码部署的用户,可从 pgAdmin 官方 APT 源 / 官网 RPM 包中拿到。
- Import/Export 限制调用:在接下来依赖版本中禁用或限定导入工具,例如只允许超级管理员使用 Import 工具、限制文件上传、限制文件大小与内容资源。
- pgAdmin 服务隔离:在可能的情况下将 pgAdmin 限定在内网实际需要达到的位置,避免跨部门访问;推送 SSO / MFA 。
- 反斜杠转义法计全面走查:企业内部的你自己产品中任何“SQL 输入 – psql / psqlcopy 调用”的路径都需依赖转义全集检查,重新验证两者之间的一致性。
- 检测正向端点:在 EDR / 日志中监控
pgAdmin进程的转型:例如未知用户调用 psql 、接下来出现\copy ... PROGRAM调用;提前告警。