pgAdmin命令执行漏洞的三年

本文详细分析了pgAdmin在过去三年中出现的三个命令执行漏洞:CVE-2022-4223、CVE-2023-5002和CVE-2024-3116。这些漏洞涉及未授权命令执行,其中CVE-2022-4223是最严重的,允许任意用户在pgAdmin中执行任意命令。漏洞利用涉及命令注入,通过文件上传和路径构造来绕过安全措施。尽管pgAdmin尝试通过增加装饰器和路径有效性检查来修复,但仍有绕过方法。最后,文章指出最新漏洞CVE-2024-3116主要影响Windows环境,因为Linux系统中文件权限机制阻止了漏洞利用。
摘要由CSDN通过智能技术生成

前几天看到pgAdmin发布了新漏洞,《CVE-2024-3116 – Remote Code Execution Vulnerability in pgAdmin - PostgreSQL Tools (<=8.4): Detailed Analysis Report》。看了这个漏洞利用的过程,我总感觉有所不对,我也在『代码审计』知识星球里发表了相关疑问。随后,我研究了一下这个漏洞的来龙去脉,简单写下这篇短文。

9d2e762b9443744c80adc195d485f5b3.png

CVE-2022-4223:pgAdmin <= 6.16 未授权命令执行漏洞

最新的CVE-2024-3116漏洞,其利用到了/misc/validate_binary_path这个API。这个API出现问题不是第一次了,最远的追溯到几年前CVE-2022-4223这个未授权命令执行漏洞。

CVE-2022-4223是一个非常简单的漏洞,我甚至觉得有可能是一个后门。

pgAdmin支持在后台设置psql、pg_dump、pg_restore等PostgreSQL数据库工具所在的基础路径,在保存设置前,用户可以执行validate_binary_path这个API来检查路径是否合法。

检查的过程就是,用户传入路径,然后pgAdmin分别给这些路径拼接上“psql”、“pg_dump”等可执行文件名,并执行psql --version命令。如果返回结果是正常,则说明文件存在,用户路径合法;如果返回结果出错,则说明文件不存在,用户传入的路径不合法。

validate_binary_pathAPI代码如下:

c969f5c258326794574ae0eee5776cb4.png

可见,这里用户传入的utility_path拼接上可执行文件名后,直接拼接进subprocess.getoutput()方法执行。这是一个非常简单的命令注入漏洞。

而且这个API没有增加@login_required修饰器,任意用户均可调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值