Sonatype Nexus Repository Manager
1 漏洞概述1.1 漏洞概述目前针对该漏洞的利用代码已在网络公开流传,对使用含有该漏洞软件的服务器造成严重危害。攻击者无需登录认证即可发动攻击;如果成功,可以在目标服务器中、以运行Nexus Repository Manager的账户的权限执行任意代码。 1.2 受影响产品- Nexus Repository Manager OSS/Pro 3.6.2 到 3.14.0 版本(包含3.14.0)。 1.3 漏洞影响
Nexus Repository Manager 3是一款应用较为广泛的开源管理框架。目前该漏洞细节已公开披露,因此影响较大,建议使用存在漏洞框架的用户及时升级产品到3.15.0或3.15.0以上的版本。 2 漏洞原理2.1 漏洞原理概述CVE-2019-7238是由于对CSEL(Content Selector Expression Language)表达式没有进行适当的处理,导致的表达式注入漏洞。 previewAssets()函数将提取特制参数中的表达式值,随后调用checkJexlExpression()函数,在未对表达式作任何处理的情况下,传入ContentExpressionFunction.java中的execute()函数进行执行,最终导致攻击者可注入任意java代码并执行。 2.2 漏洞细节分析本章节以nexus-public-release-3.14.0-04源码为例,分析漏洞触发的细节。 plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/ComponentComponent.groovy:
previewAssets()对参数进行有效性验证后,传入browseService.previewAssets()处理。 components/nexus-repository/src/main/java/org/sonatype/nexus/repository/browse/internal/BrowseServiceImpl.java: 参数在构建后,传入builder.buildWhereClause()处理。 components/nexus-repository/src/main/java/org/sonatype/nexus/repository/browse/internal/PreviewAssetsSqlBuilder.java: 这里引入了contentExpression()。
components/nexus-repository/src/main/java/org/sonatype/nexus/repository/selector/internal/ContentExpressionFunction.java: 当contentExpression执行时,会调用execute()函数: 根据上一步代码 "contentExpression(@this, :jexlExpression, :repositorySelector",可以映射到iParams数组: · iParams [0] = @this · iParams [1] = jexlExpression · iParams [2] = repositorySelector 在筛选出asset后,最后会调用checkJexlExpression()函数: components/nexus-repository/src/main/java/org/sonatype/nexus/repository/selector/internal/ContentExpressionFunction.java 对表达式config配置后,调用selectorManager.evaluate()。 components/nexus-core/src/main/java/org/sonatype/nexus/internal/selector/SelectorManagerImpl.java 最终调用selector.evaluate()执行表达式,在整个过程未对表达式进行任何处理。 2.3 补丁分析对比3.14.0-04和3.15.0-01版本原代码的差异,我们发现在修复版本中,调用previewAssets()函数之前校验了 nexus:selectors:* 权限: 2.4 本地验证poc使用3.14.0-04版本搭建漏洞环境,向目标发送带有Java代码的表达式的特制HTTP请求: 服务器处理请求后,执行了注入的Java代码: 3 漏洞攻击防护3.1 漏洞自检方法1:访问首页后,会显示版本,确认是否在受影响范围: 方法2:登录后台地址,若联网,受影响版本会有如下提示: 3.2 漏洞修复若使用受影响的版本,需要立即对Nexus Repository Manager进行升级: 修复版本:3.15.0以及之后的版本 下载地址:https://help.sonatype.com/repomanager3/download 3.3 华为应急响应华为在监控到漏洞信息以后,安全研究人员立即启动应急流程,并搭建环境对漏洞进行重现。在漏洞被分析人员重现确认后,开发IPS防护签名。目前IPS签名库已推送到升级网站,可供全球客户升级使用。
4 参考链接https://github.com/sonatype/nexus-public/commit/c2f0829b87243e3135ad904814055cce80d1f199 |