一、漏洞概述
2022年4月13日监测到Struts官方发布安全通告,修复了一个远程代码执行漏洞S2-062(CVE-2021-31805)。该漏洞为S2-061的修复不完全,当开发人员使用了 %{…} 语法进行强制OGNL解析时,仍有一些特殊的TAG属性可被二次解析;攻击者可构造恶意的OGNL表达式触发漏洞,从而实现远程代码执行。
Apache Struts是用于创建Java Web应用程序的开源框架,应用非常广泛。该漏洞已在Struts 2.5.30版本中修复,建议相关用户尽快升级版本进行防护。
参考链接:https://cwiki.apache.org/confluence/display/WW/S2-062
二、影响范围
受影响版本
2.0.0 <= Apache Struts <= 2.5.29
不受影响版本
Apache Struts >= 2.5.30
三、 漏洞检测
3.1 人工检测
也可通过查看lib中的核心包查看struts版本

若当前版本在受影响范围内,则可能存在安全风险。
3.2 Windows平台
使用maven打包的项目可通过pom.xml查看当前使用的struts2版本:

3.3 Linux平台
可使用以下命令查找当前使用的struts2-core包,通过查看其文件名,判断当前版本:
find / -namestruts2-core-*.jar
若当前版本在受影响范围内,则可能存在安全风险。
四、漏洞防护
4.1 官方升级
目前官方已发布新版本修复了此漏洞,请受影响的用户尽快更新进行防护,下载链接:https://struts.apache.org/download.cgi#struts-ga
4.2 其他防护措施
若相关用户暂时无法进行升级操作,可使用以下措施进行临时缓解:
1. 将输入参数的值重新分配给某些Struts的标签属性时,始终对其进行验证,不要在值以外的标签属性中使用%{...} 语法引用用户可修改的输入。
2. 开启ONGL表达式注入保护
参阅官方指南:https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable