这是我对 CVE-2025-2945 的研究。本仓库包含一个带有 PostgreSQL 和存在漏洞的 pgAdmin 的测试环境,以及漏洞利用程序。
有用链接:
在由 Python 编写的 pgAdmin 后端中,有两个端点缺乏适当的清理(sanitization)。端点分别是:
/sqleditor/query_tool/download - query_commited 参数/cloud/deploy - high_availability 参数我们来看一下 sqleditor 的代码:
for key, value in data.items():
if key == 'query':
sql = value
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
这里我们可以看到,query_commited 的值被直接传递给了 eval() 函数。你可以查看 eval 文档。
还可以看看 pgacloud 的代码:
def _create_google_postgresql_instance(self, args):
credentials = self._get_credentials(self._scopes)
service = discovery.build('sqladmin', 'v1beta4',
credentials=credentials)
high_availability = \
'REGIONAL' if eval(args.high_availability) else 'ZONAL'
这里存在同样的问题。
要访问这些端点,仍然需要有效的凭证以及对 pgAdmin 的访问权限。但任何能够访问它的攻击者,都可以向 eval 传递任意值。这等同于执行任意 Python 单行命令。
漏洞利用非常简单直接。请查看 exploit/src/main.py。别忘了更新配置以获取反弹 shell。
要搭建测试环境,请运行以下命令:
cd stand
docker compose up -d
就这样。pgAdmin 现在可以通过 http://localhost:8080 访问。默认凭证为:
[email protected]
admin
可以随意编辑 .env 文件和 stand/init-db/01-init.sql。
由 I3r1h0n 制作。