p0's blog | 破 关注网络安全
CVE-2019-5475:Nexus 2 yum插件RCE
发表于: | 分类: 默认分类 | 评论:0 | 阅读: 177

一、影响版本

Nexus Repository Manager OSS <= 2.14.13
Nexus Repository Manager Pro <= 2.14.13

实际影响为<= 2.14.14

目前2.x安全版本为2.14.15

二、漏洞复现

下载漏洞版本:
https://help.sonatype.com/repomanager2/download/download-archives---repository-manager-oss

bin/nexus start
启动

createrepo和mergerepol两个参数均可RCE。

三、代码分析

org.sonatype.nexus.yum.internal.capabilities.YumCapability

最后使用Runtime.getRuntime().exec执行命令

输入的命令会拼接" --version",一定程度上限制了执行任意命令, 可使用以下方法执行任意命令的方法。

bash -c {echo,base64_cmd}|{base64,-D}|bash #

四、补丁

2.14.14加入以下补丁


加入了getCleanCommand函数进行过滤

allowedExecutables的内容为{"createrepo","mergerepo"}

第一种情况,只有allowedExecutables.contains(command)为true之后,才能返回<user_controlled_command> --version。即用户指定的命令必须createrepo、mergerepo为两个字符串中的其中一个。

第二种情况,如果用户指定的命令在this.applicationDirectories.getWorkDirectory().getAbsolutePath():即/xxx/sonatype-work/nexus(这个是nexus配置所在目录)之下(即试图执行这个目录下的脚本),也返回null。!this.allowedExecutables.contains(file.getName())判断提供的命令的文件名是否在allowedExecutables,即以/createrepo或者/mergerepo结尾,最后获取绝对路径拼接命令。

五、绕过补丁

补丁的第一种情况无法绕过,对第二种情况进行绕过。

../../../../../../../../../../bin/bash -c {echo,b3BlbiAtYSBDYWxjdWxhdG9yCg==}|{base64,-D}|bash # aaa/mergerepo

六、安全版本

2019-10-15官方发布2.14.15版本,更新补丁

验证文件是否存在,目前无法绕过。


著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:p0
链接:https://p0sec.net/index.php/archives/137/
来源:https://p0sec.net/

添加新评论

TOP