根据sonatype官方给出的 公告信息 ,Nexus Repository Manager 3存在一个任意EL表达式注入漏洞,攻击通过构造特殊请求可可实现远程任意代码执行。
关于sonatype Nexus Sonatype Nexus Repository Manager(又名NXRM)是一款maven仓库管理应用。
受影响Richfaces版本:
Nexus对于CVE-2018-16621的漏洞修复补丁对比:
nexus-public/EscapeHelper.java at f94f870eb4dbee30f82b9290e10a35658d4105f8 · sonatype/nexus-public · GitHub
在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 sonatype/nexus3
访问 http://localhost:8081 并使用默认账号密码admin:admin123登录Nexus,创建用户并修改用户角色参数roles,也可通过创建角色的roles 和 privileges参数触发如图:
官方已发布修复版本,升级版本至3.14.0即可,升级帮助: https://support.sonatype.com/hc/en-us/articles/115000350007