【漏洞分析】Struts2 S2-062远程代码执行漏洞(CVE-2021-31805)分析
近日,Apache官方发布安全通告,披露了其Struts2框架存在远程代码执行漏洞,漏洞编号CVE-2021-31805 。
该漏洞的产生原因是一个更早漏洞CVE-2020-17530的修复不完全。CVE-2020-17530漏洞是由于Struts2会对某些标签属性(比如ID)的属性值进行二次表达式解析,因此当这些标签属性中使用了%{x}且x值用户可控时,用户再传入一个%{payload},就会造成OGNL表达式执行。
在CVE-2021-31805漏洞修复前,仍然有部分标签属性使得攻击者可以恶意构造OGNL表达式执行,导致远程代码执行。
危害等级
高危
影响范围
2.0.0≤Apache Struts≤2.5.29
漏洞复现
目标机器10.203.200.4使用的是Apache Struts 2.5.25版本,可以在提交的报文body部分写入指令pwd,从返回结果id=”/usr/src”可以看出,提交的指令被执行了。
排查方法
可通过排查struts-core-版本号.jar来判断是否受此漏洞影响:
若当前版本在受影响范围内,则可能存在安全风险。
如果没有版本号,可以在jar文件的META-INF/MANIFEST.MF中搜索Bundle-Version,若2.0.0≤Apache Struts≤2.5.29,则存在该漏洞。
处置建议
1、版本升级
目前官方已发布最新版本,建议受影响用户及时更新升级,下载链接:
https://struts.apache.org/download.cgi#struts-ga
2、临时防护措施
可通过设置所有标签中value=" "来缓解此漏洞。
将org.apache.commons.collection.BeanMap添加至excludedClasses黑名单中。
3、产品解决方案
安博通深度安全网关已支持该漏洞防护,需要将规则包升级到20220419及以上版本。升级位置为:系统维护→系统升级→自动升级,点击立即升级或下载离线特征库手动升级。
防护后效果:规则升级后,在策略中选用包含该特征的IPS模板,并配置记录日志和阻断。当攻击发生时,就会被安博通深度安全网关拦截并记录日志。