由于该漏洞影响范围较广(Struts 2.3.5 - Struts 2.3.31, Struts 2.5 - Struts 2.5.10),漏洞危害程度严重,可造成直接获取应用系统所在服务器的控制权限。在得知 Struts2 官方已经确认漏洞(漏洞编号S2-045,CVE编号:cve-2017-5638),并定级为高危风险后,对负责的相关服务做了相关的升级。
本人负责的服务恰好采用了struts2框架,使用了Struts 2.3.15。按官方的指示,直接升级了struts版本,将原来的struts 2.3.15升级到了2.3.32版本。
1. 官方下载struts2 2.3.32相关jar包
2. 本地修改工程pom依赖,(当时还没有2.3.32的相关的maven依赖,所以暂时拿了jar包部署自己的私服上了)
本地更新jar包依赖之后发现, struts 2.3.32并没有依赖commons-lang3.jar,所以导致工程很多地方报错,所以再次修改pom引入commons-lang3.jar。
3. 替换灰度环境或者测试环境服务lib中相关的struts jar包,记得备份。
4. 启动,测试
5. 灰度或者测试环境测试没有问题后,现网施工,替换struts 相关jar包。如果现网机器较多的话,最好找一台机器先施工观测下,再全面施工。
在升级struts的过程中,也遇到些问题,比如缺少commons-lang3.jar包,部署成功之后,服务无响应缺少ognl及freemaker包。所以一定要在灰度或者测试环境下验证无误后方可现网施工。