Struts2 S2-045 远程OGNL表达式执行漏洞
Struts2在解析请求的时候会主动把MULTIPART请求给解析成参数,这里的MULTIPART请求被解析了两遍。一遍是框架解析的,另一遍是那个自带的插件解析的。两个地方判断是否是文件上传请求的时候的代码不一致,导致了error。
Struts2的验证是否是MULTIPART的方式:
FileUploadBase验证方式:
简单的说就是Struts2的开发者判断是否是MULTIPART方式是如果字符串里面包含了multipart/form-data就认为是,而后面的FileUploadBase判断是字符串里面必须是以multipart/form-data开头的请求才认为是文件上传。如果把FileUploadBase的判断MULTIPART的时候方法换成Dispatcher类的content_type.contains("multipart/form-data")就不会触发这个error了。而这个error中的异常信息最终会被拿去当ognl表达式执行。这种神逻辑其实算起来跟上次的springboot的表达式注入漏洞差不多,因为异常导致的表达式注入。
官方的修复方式代码替换掉了LocalizedTextUtil.findText: