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标签 ,不容使用通配符。正确设置步骤如下图所示:


宝运莱·(中国区)最新官方网站