Apache Struts2远程代码执行漏洞(S2-057)
发布时间 2018-08-22
二、漏洞分析
代码问题出在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标签,禁止使用通配符。正确设置方法如下图所示: