Spring 文件泄露是一个严重的安全漏洞,攻击者可能利用它读取服务器上的敏感文件(如配置文件、源代码、密钥、密码文件等)。这通常是由于错误的配置或特定功能的不安全使用导致的。
常见的 Spring 文件泄露场景及原因:
-
不安全的静态资源处理:
-
原因: 当使用
ResourceHttpRequestHandler(例如通过WebMvcConfigurer.addResourceHandlers配置)处理静态资源时,如果没有正确限制路径或未禁用目录遍历(setUseLastModified(false)),攻击者可能通过构造包含../的 URL 路径(如http://example.com/static/../../../../etc/passwd)尝试访问 Web 应用根目录之外的文件。 -
易发配置:
-
映射了过于宽泛的路径(如
/**)。 -
映射了指向文件系统敏感位置的路径(如
file:/var/log/)。 -
未显式禁用
org.springframework.web.servlet.resource.ResourceHttpRequestHandler的useLastModified属性(虽然新版本默认行为更安全,但显式设置更保险)。
-
-
-
Actuator 端点暴露敏感信息:
-
原因: Spring Boot Actuator 提供了强大的监控和管理端点(如
/env,/configprops,/heapdump,/trace,/mappings)。如果这些端点未加保护或认证不当,攻击者可以直接访问它们,获取:-
环境变量(可能包含密码、API密钥)。
-
配置属性(数据库密码、第三方服务凭证)。
-
线程堆栈跟踪(可能包含敏感信息或内部逻辑)。
-
内存堆转储(包含运行时所有数据,极其敏感)。
-
请求映射(暴露内部API结构)。
-
-
-
错误处理不当:
-
原因: 未处理的异常或配置不当的错误页面(如
Whitelabel Error Page)有时会将完整的堆栈跟踪信息返回给客户端。堆栈跟踪可能包含:-
服务器文件系统的绝对路径。
-
内部类名、方法名和包结构(泄露应用设计)。
-
部分代码片段或变量值。
-
-
-
特定库或功能的不安全使用:
-
原因: 例如,使用了存在目录遍历漏洞的第三方库处理文件上传或下载;或者开发者自定义的文件下载功能未对用户输入的文件路径进行严格校验和规范化,允许
../路径穿越。
-
-
服务器或容器配置问题:
-
原因: Tomcat、Jetty 等 Servlet 容器或 Nginx 等反向代理的默认配置或错误配置可能导致应用目录之外的文件被直接访问(如默认的目录列表功能开启、错误的 alias 配置)。
-
Spring 文件泄露修复方案 (综合防护):
修复需要从多个层面进行,遵循“纵深防御”原则:
1. 立即缓解措施 (针对已发现漏洞):
-
审查并修复静态资源映射:
- <

最低0.47元/天 解锁文章
1315

被折叠的 条评论
为什么被折叠?



