Apache Struts2远程代码执行误差(S2-057)

宣布时间 2018-08-22
一、误差形貌



        2018年8月22日,Apache Struts宣布最新清静通告,当Struts.xml文件将struts.mapper.alwaysSelectFullNamespace该选项设置为true,并且package标签页以及result的param标签页的namespace值的属性缺失时可造成namespace被控制,namespace被带入ognl语句执行,爆发远程代码执行误差。



相关链接如下:



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


二、误差剖析


        代码问题出在DefaultActionMapper这个类的parseNameAndNamespace要领里如下图所示:



尊龙凯时 - 人生就是搏!


        当alwaysSelectFullNamespace被设置为true时,namespace的值从uri中获取,我们知道uri是可控的,以是这就直接导致了namespace可控。最终会挪用TextParseUtil.translateVariables要领剖析Ognl语句。


        将namespace污染为$(100*100)。乐成使用后效果如下图所示:



尊龙凯时 - 人生就是搏!


        Ognl语句乐成剖析。


三、误差影响


        1、受影响版本:Apache Struts 2.3 - Struts 2.3.34, Apache Struts 2.5 - Struts 2.5.16


        2、不受影响版本:Apache Struts 2.3.35 or Apache Struts 2.5.17


四、规避计划


        1、升级到Struts 2.3.35 or Struts 2.5.17最新版本。


        2、修改struts设置文件,将alwaysSelectFullNamespace属性设置为false。如下所示:


               


        3、package标签以及result标签要设置牢靠namespace标签,榨取使用通配符。准确设置要领如下图所示:


尊龙凯时 - 人生就是搏!