CVE-2018-16621 Nexus Repository Manager3 EL Injection
- Auth:Cryin’
介绍
根据sonatype官方给出的公告信息,Nexus Repository Manager 3存在一个任意EL表达式注入漏洞,攻击通过构造特殊请求可可实现远程任意代码执行。
- 关于sonatype Nexus Sonatype Nexus Repository Manager(又名NXRM)是一款maven仓库管理应用。
-
受影响Richfaces版本:
- All previous Nexus Repository Manager 3 OSS/Pro versions up to and including 3.13.0
补丁分析
Nexus对于CVE-2018-16621的漏洞修复补丁对比:
在3.14.0版本中最,新增了EscapeHelper.stripJavaEl方法对用户输入roles参数进行过滤,正则匹配的结果是将‘${’替换为‘{ ’,从而防止EL表达式注入。
其中EscapeHelper.stripJavaEl的实现如下:
/**
* Strip java el start token from a string
* @since 3.14
*/
public String stripJavaEl(final String value) {
if (value != null) {
return value.replaceAll("\\$+\\{", "{");
}
return null;
}
}
漏洞成因
在 org.sonatype.nexus.security.privilege.PrivilegesExistValidator 和 org.sonatype.nexus.security.role.RolesExistValidator 类中,会将没有找到的 privilege 或 role 放入错误模板中,而在错误模板在渲染的时候会提取其中的EL表达式并执行
漏洞复现
拉取一个版本低于3.14.0的Nexus docker镜像,这里随便找一个shifudao/nexus3:
docker pull shifudao/nexus3
使用如下命令运行:
docker run -d -p 8081:8081 --name nexus shifudao/nexus3
访问http://localhost:8081 并使用默认账号密码admin:admin123登录Nexus,创建用户并修改用户角色参数roles,也可通过创建角色的roles 和 privileges参数触发如图:
修复建议
官方已发布修复版本,升级版本至3.14.0即可,升级帮助:https://support.sonatype.com/hc/en-us/articles/115000350007