2017年9月7日,Struts官方发布一个中危的安全漏洞,该漏洞编号为:S2-053,在一定条件下,当开发人员在Freemarker标签中使用错误的构造时,可能会导致远程代码执行漏洞
漏洞编号
CVE-2017-12611
漏洞名称
Freemarker标签远程代码执行漏洞
漏洞评级
中危
影响范围
Struts 2.0.1 - 2.3.33
Struts 2.5 - 2.5.10
s2-053 POC
|
|
注意:执行命令的地方在于(#cmd=’whoami’)
漏洞环境搭建
可以使用war包或docker复现
使用war包搭建环境
下载war包 链接:http://pan.baidu.com/s/1qXW3FPi 密码:9exb
下载后把它放到tomcat目录下的webapps目录下,重启tomcat后访问:http://127.0.0.1:8080/s2-053
使用docker搭建环境
快速搭建各种漏洞环境(Various vulnerability environment) https://github.com/Medicean/VulApps
搭建好后访问 http://127.0.0.1:8080/hello.action
漏洞复现
漏洞检测
打开页面,输入表达式%{33-1}进行测试,发现成功执行,返回32
说明漏洞存在
执行POC
输入POC提交
来个调用计算器(calc)
把(#cmd=’whoami’)里面的whoami缓存calc
漏洞分析
当在Freemarker标签中使用表达式文本或强制表达式时,使用以下请求值可能会导致远程代码执行
这两种情况下,值属性都使用可写属性,都会受到Freemarker表达式影响
修复方案
1.升级到Apache Struts 2.5.13或2.3.34
2.Freemarker标签内容不要通过Request方式获取
3.使用只读属性来初始化value属性(仅限getter属性)
4.不要使用如下结构
<@s.hidden name=”redirectUri” value=redirectUri />
<@s.hidden name=”redirectUri” value=”${redirectUri}” />