CVE-2024-38809:旧版Spring框架DoS防护过滤器配置咨询
CVE-2024-38809 过滤器限制方案答疑
1. "If-Match"和"If-None-Match"请求头的合理大小限制值是多少?
- 正常业务场景中,这两个请求头用于ETag校验,单个ETag长度通常在几十字节以内(比如MD5哈希值加引号仅34字节)。就算支持多ETag用逗号分隔的场景,**1KB(1024字节)**的上限完全能覆盖绝大多数需求,同时有效阻断恶意的超大请求头。
- 如果你的业务有特殊ETag使用场景,建议先统计现有流量中这两个头的实际大小,再在此基础上上浮20%-50%作为限制值,避免误拦截正常请求。
2. 限制请求头大小为何能解决此漏洞?
- 该漏洞的核心是旧版Spring Framework处理这两个条件请求头时,会对ETag值执行复杂的解析、匹配逻辑。当请求头包含大量超长或构造特殊的ETag内容时,会持续占用大量CPU和内存资源,导致服务端资源耗尽引发DoS。
- 限制请求头大小相当于直接截断了攻击者构造的恶意超大内容,从根源上避免服务端执行高消耗的解析逻辑,从而阻断DoS攻击的触发条件。
3. 攻击者如何通过这两个请求头发起攻击?
- 攻击者会构造包含成千上万个随机哈希值的"If-Match"或"If-None-Match"请求头,用逗号拼接成几MB甚至几十MB的内容。
- 当Spring框架处理这类请求时,需要逐个解析每个ETag,执行字符串匹配、哈希计算等操作,CPU会被持续占满,同时大量字符串对象会耗尽内存,导致服务端无法处理正常请求,最终陷入拒绝服务状态。
- 部分攻击者还会构造格式异常的ETag内容,触发框架解析逻辑中的低效分支,进一步放大资源消耗。
内容的提问来源于stack exchange,提问作者PragmaticProgrammer
相关产品推荐
相关产品推荐

