Files
vulhub/pgadmin/CVE-2023-5002/README.zh-cn.md
Aaron 63285f61aa
Some checks failed
Vulhub Format Check and Lint / format-check (push) Has been cancelled
Vulhub Format Check and Lint / markdown-check (push) Has been cancelled
Vulhub Docker Image CI / longtime-images-test (push) Has been cancelled
Vulhub Docker Image CI / images-test (push) Has been cancelled
first commit
2025-09-06 16:08:15 +08:00

2.1 KiB
Raw Permalink Blame History

pgAdmin <= 7.6 后台远程命令执行漏洞CVE-2023-5002

pgAdmin是一个著名的PostgreSQL数据库管理平台。

pgAdmin包含一个HTTP API可以用来让用户选择并验证额外的PostgreSQL套件比如pg_dump和pg_restore。在CVE-2022-4223这个API可被用于执行任意命令官方对此进行了修复但在7.6版本及以前修复并不完全,导致后台用户仍然可以执行任意命令。

参考链接:

漏洞环境

执行如下命令启动一个pgAdmin 7.6服务器:

docker compose up -d

服务器启动后,访问http://your-ip:5050即可查看到pgAdmin默认的登录页面。

一些值得注意的事情

CVE-2023-5002是一个针对CVE-2022-4223漏洞的补丁绕过漏洞。官方发布了下面两个修复补丁修复漏洞:

  • validate_binary_path函数增加@login_required装饰器,限制未授权的用户访问相关接口
  • 使用os.path.exists()检查用户传入的路径是否有效

不幸地是,只有第二个修复补丁可以被绕过,所以该漏洞仅是一个后台命令执行漏洞。

漏洞复现

使用帐号vulhub@example.com和密码vulhub登录pgAdmin。

热爱后选择“Tools -> Storage Manager”打开文件管理器

创建一个新的目录名字是我们的Payload ";id;#

这个目录的完整路径是/var/lib/pgadmin/storage/vulhub_example.com/";id;#,我们后续就需要使用这个路径来利用漏洞。

选择“File -> Preferences”打开设置页面并来到“Paths -> Binary paths”面板。在任意一个“PostgreSQL Binary Path”文本框中填入/var/lib/pgadmin/storage/vulhub_example.com/";id;#,并点击右侧的“验证”按钮:

可见,id命令被成功执行: