近日,国家信息安全漏洞共享平台(CNVD)收录了Apache Struts2 S2-037远程代码执行漏洞(CNVD-2016-04040,对应 CVE-2016-4438 )。远程攻击者利用漏洞在安装部署了REST插件的Struts 2服务器上远程执行指令,取得服务器控制权限。由于利用代码已经公开,建议用户紧急升级最新的Apache 2.3.29版本防范潜在的攻击。
一、漏洞情况分析
Struts2是第二代基于Model-View-Controller (MVC)模型的java企业级web应用框架,并成为当时国内外较为流行的容器软件中间件。
根据CNVD技术组成员单位——杭州安恒公司提供的分析情况,服务器部署使用Rest插件之后,当客户端请求url符合如下格式“actionName/id/methodName”时会获取methodName作为ActionMapping类的method属性,但 method属性未进行严格过滤,导致漏洞产生。从已披露的利用代码看,CNVD认为攻击者利用发起漏洞攻击的原理与S2-032、S2-033漏洞基本一致,都是通过method属性带入到OGNL表达式中,静态调用ognl.OgnlContext的DEFAULT_MEMBER_ACCESS属性并覆盖_memberAccess的方式进行,进而在服务器端执行任意代码。
该漏洞与6月初披露的S2-033漏洞相比,虽然也是安装部署REST插件的条件下触发,但与是否启用动态方法调用无关,CNVD评估认为该漏洞影响要大于S2-033漏洞的影响范围,也有可能比S2-032漏洞影响范围更大(取决于REST插件应用比例,CNVD暂无准确评估值)。
CNVD对该漏洞的综合评级为“高危”。
二、漏洞影响范围
漏洞影响部署使用REST插件的Struts 2.3.20 - 2.3.28.1版本。
三、漏洞修复建议
目前,互联网上已披露了该漏洞的利用代码。Apache Struts官方已发布了升级程序修复该漏洞,CNVD建议用户将程序升级至Struts 2.3.29版本。更新地址:
https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.3.29
附:参考链接:
https://cwiki.apache.org/confluence/display/WW/S2-037
http://www.cnvd.org.cn/flaw/show/CNVD-2016-04040 (s2-037漏洞)
http://www.cnvd.org.cn/flaw/show/CNVD-2016-03754(S2-033漏洞)
http://www.cnvd.org.cn/flaw/show/CNVD-2016-02506(S2-032漏洞)
http://seclab.dbappsecurity.com.cn/?p=1101 (杭州安恒公司关于S2-033漏洞补丁修复无效的分析,目前Apache官方尚无直接回应)