在 JDK 9+ 上运行的 Spring MVC 或 Spring WebFlux 应用程序可能容易受到通过数据绑定的远程代码执行 (RCE) 的攻击。具体的利用需要应用程序作为 WAR 部署在 Tomcat 上运行。如果应用程序被部署为 Spring Boot 可执行 jar,即默认值,则它不易受到漏洞利用。但是,该漏洞的性质更为普遍,可能还有其他方法可以利用它。
时间:2022-03-31
先决条件:
- JDK 9+
- Apache Tomcat 作为 Servlet 容器
- 打包为 WAR
- spring-webmvc 或 spring-webflux 依赖项
影响框架、版本:
- Spring Framework
- 5.3.0 to 5.3.17
- 5.2.0 to 5.2.19
- Older, unsupported versions are also affected
官方修复意见:
- Spring Framework
- 5.3.18+
- 5.2.20+
- 升级 Tomcat
- 10.0.20、9.0.62或8.5.78
- 降级到 Java 8
- 不允许的字段
@ControllerAdvice @Order(Ordered.LOWEST_PRECEDENCE) public class BinderControllerAdvice { @InitBinder public void setAllowedFields(WebDataBinder dataBinder) { String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"}; dataBinder.setDisallowedFields(denylist); } }