参考来源:[绿盟科技](http://blog.nsfocus.net/apache-struts2-vulnerability-technical-analysis-protection-scheme-s2-033/)
#### 影响的版本
Struts 2.3.20 – Struts 2.3.28 (不包括 2.3.20.3和 2.3.24.3)。
#### 不受影响的版本
Struts 2.3.20.3、 2.3.24.3 或者 2.3.28.1。
(编者注: 2.3.28.1版本默认不启用"enableOGNLEvalExpression", 当存在以下配置时可触发该漏洞
```<constant name="struts.ognl.enableOGNLEvalExpression" value="true" />```
)
### 漏洞分析
经过对Apache Struts2版本进行回溯,发现修复S2-033的代码和S2-032的代码基本相同。
![](https://images.seebug.org/1464934824582)
根据官方描述修复S2-032漏洞是在Struts 2.3.20.2和2.3.24.2版本中修复,而官方的版本库中却少了这个版本,直接出现了可以修复S2-033漏洞的Struts 2.3.20.3、 2.3.24.3和2.3.28.1等版本,通过代码直接对比,只是在DefaultActionMapper.java文件中加入了对method成员变量的值的一次过滤,cleanupActionName这个方法是在对“action:”滥用的问题进行添加的,禁止了绝大多数的特殊字符。但是在后来的版本变更中忽略了之前的问题,将method也引入了OGNL表达式(Object Graph Navigation Library)。
![](https://images.seebug.org/1464934830605)
通过对OGNL表达式的过滤来进行漏洞的修补。
### 漏洞验证
检查Struts2的配置文件struts.xml,确认“struts.enable.DynamicMethodInvocation” 是否为“true”,如为“true”,且版本在受影响版本范围内,则说明受影响,否则不受影响。
### 防护方案
* 如果使用受影响的版本,在允许的情况下禁用动态方法调用(Dynamic Method Invocation),修改Struts2的配置文件struts.xml,将struts.enable.DynamicMethodInvocation设置为“false”。
升级到Struts 2.3.20.3、 2.3.24.3 或者 2.3.28.1。
暂无评论