一.背景介绍
通过jar包扫描安全漏洞发现了CVE-2024-38819 (官方说明:https://spring.io/security/cve-2024-38819)/CVE-2024-38816(https://spring.io/security/cve-2024-38816)
然后因为要满足
当以下两个条件都成立时,应用程序就容易受到攻击:
- Web 应用程序用于
RouterFunctions
提供静态资源 - 资源处理明确配置了
FileSystemResource
位置
影响范围
Spring Framework 5.3.0 - 5.3.39
Spring Framework 6.0.0 - 6.0.23
Spring Framework 6.1.0 - 6.1.12
其他更老或者官方已不支持的版本
安全版本
Spring Framework 5.3.40
Spring Framework 6.0.24
Spring Framework 6.1.13
二.解决建议:
1.建议更新安全版本或最新版本
2.排查查代码中是否有类似使用,结合实际情况可确认是否实际受影响。
若以下条件均满足,可证明漏洞代码未实际使用:
(1)项目中未显式配置静态资源处理逻辑。
1.静态资源路由扫描
检查代码中是否包含以下典型漏洞触发代码:
// WebMvc.fn静态资源配置(漏洞触发点)
RouterFunction<ServerResponse> staticRoutes = RouterFunctions.resources(
"/static/**", new FileSystemResource("src/main/resources/static/"));
全局搜索关键字:
**1.RouterFunctions.resources
(WebMvc.fn/WebFlux.fn 的核心方法)
**2.Resource
+ ServerResponse
(处理静态资源的常见组合)
**3.ClassPathResource
或 FileSystemResource
(资源加载方式)
若项目中未使用RouterFunctions.resources
或FileSystemResource
处理静态资源,则不符合漏洞触发条件;
2.组件扫描
检查@Configuration
类中是否存在自动注册静态资源路由的配置,特别是通过WebFluxConfigurer
或WebMvcConfigurer
间接配置的情况
(2)动态测试无法触发敏感文件读取。
1.发送测试请求,尝试触发目录遍历:
-v
:启用详细信息模式,显示完整的请求头和响应头,便于调试路径解析过程
"http://localhost:8080/../敏感文件路径"
:尝试通过路径遍历访问敏感文件
curl -v "http://localhost:8080/../../application.properties"
路径中的..
可编码为%2E%2E
以绕过基础过滤逻辑
观察响应:
-
安全配置表现:正常情况应返回
404 Not Found
或403 Forbidden
-
漏洞存在标志:若响应状态码为
200
且返回了敏感文件内容,则确认存在路径遍历风险
(3.禁用或限制静态资源暴露:
若应用程序使用WebMvc.fn或WebFlux.fn提供静态资源,可暂时禁用相关功能,或通过配置限制允许访问的文件路径范围,避免路径遍历攻击?
输入验证与过滤:
在请求处理逻辑中增加路径规范化检查,拒绝包含../等恶意字符的请求?)