【威胁预警】Apache Struts2(S2-048)远程代码执行高危漏洞

2017-07-08 08:07:02 启明星辰 ADLab

更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)

0x01 漏洞描述

2017年7月7日,Apache Struts发布最新安全公告,Apache Struts2的struts1插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9791(S2-048)。Struts2的struts1在处理messages时,直接将messages带入ognl语句执行,造成远程代码执行漏洞。

相关链接如下:

https://cwiki.apache.org/confluence/display/WW/S2-048

0x02 漏洞分析

Showcase示例程序即存在该漏洞,可通过向表单填写ognl语句,Struts2在处理表单时可将提交的语句作为ognl执行,造成远程代码执行漏洞。如下图所示:

integration包下的SaveGangsterAction这个类,直接将form表单提交的“Gangster Name”传到ActionMessage构造类中,如下图所示:

Action messages 会通过 getText 方法最终进入 com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage(String, Locale, ValueStack, Object[], String) ,如下:

成功利用payload获取当前web路径。

0x03 受影响版本

Apache Struts Version:2.3.x

0x04 不受影响版本

Apache Struts Version:2.5.10.1

0x05 规避方案

  • 升级Struts到2.5.10.1最新版本。

  • 避免使用struts2-struts1-plugin这个插件。非必要的情况下可以将struts2-struts1-plugin-2.3.x.jar文件从 “/WEB-INF/lib”目录中直接删除。如果使用该插件时避免使用拼接的方式将原始消息直接传递给ActionMessage。

    如下所示:

messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName()));

不要使用如下的方式:

messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"));

  • Showcase 该展示包存在安全隐患,请勿将其部署在不安全的网络环境中,避免服务器遭受攻击。





启明星辰积极防御实验室(ADLab)



ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员。截止目前,ADLab通过CVE发布Windows、Linux、Unix等操作系统安全或软件漏洞近300个,持续保持亚洲领先并确立了其在国际网络安全领域的核心地位。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。