关于确认CVE-2025-24813是否适用于Spring Boot应用的技术咨询
先给大家明确一下:CVE-2025-24813是Apache Tomcat里的一个高危远程代码执行(RCE)漏洞,常规的检查思路是查看Tomcat的web.xml文件配置,但咱们Spring Boot应用打包成jar后确实没有这个文件,那该怎么排查呢?我给你梳理几个关键方向:
检查Spring Boot配置文件
Spring Boot默认会把Tomcat的DefaultServlet的readonly属性设为true(也就是禁止写入操作),这是安全的。但如果你手动修改过相关配置,就需要检查:- 在
application.properties里,看看有没有server.tomcat.default-servlet.readonly=false这样的配置; - 在
application.yml里,检查是否有如下配置:server: tomcat: default-servlet: readonly: false
如果存在上述配置,且你的Tomcat版本在受影响范围内,就有风险。
- 在
排查自定义Tomcat配置代码
要是你通过代码定制过Tomcat的行为,比如实现了WebServerFactoryCustomizer<TomcatServletWebServerFactory>,就得检查有没有修改DefaultServlet的readonly属性。比如下面这种代码就会把权限改成允许写入:@Bean public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() { return factory -> { factory.addContextCustomizers(context -> { DefaultServlet defaultServlet = new DefaultServlet(); defaultServlet.setReadonly(false); // 这里修改为false就存在风险 context.addServlet("default", defaultServlet).addMapping("/"); }); }; }确认依赖的Tomcat版本
这个漏洞影响的Tomcat版本范围是:8.5.0至8.5.109、9.0.0.M1至9.0.89、10.1.0.M1至10.1.20、11.0.0.M1至11.0.0-M20。
在Spring Boot里,你可以通过以下方式查看依赖的Tomcat版本:- Maven项目:运行
mvn dependency:tree命令,在输出里找org.apache.tomcat.embed相关的依赖版本; - Gradle项目:运行
gradle dependencies命令,查看对应的Tomcat依赖版本。
如果版本在上述范围内,再结合前面的配置检查,就能确定是否受影响。
- Maven项目:运行
总的来说,Spring Boot默认配置是不会触发这个漏洞的,只有当你手动开启了DefaultServlet的写入权限,同时依赖的Tomcat版本在受影响列表里,才需要警惕。
备注:内容来源于stack exchange,提问作者serv-inc

