CVE-2026-40396CVE-2026-40396 是 Varnish Cache 9.0.0 版本中的工作区溢出漏洞。该漏洞允许远程攻击者通过发送 HTTP/1 请求并在特定时机恢复管道化流量,触发内存溢出。由于代码合并时遗漏了关键回滚路径,导致预取数据超出工作区限制,最终使守护进程崩溃并造成拒绝服务。
该漏洞的核心技术细节在于 Varnish Cache 9.0.0 在移植 Varnish Enterprise 的非阻塞架构代码时,未能正确处理 HTTP/1 管道化请求与新的工作区 API 之间的交互。具体而言,Varnish Enterprise 引入了针对 HTTP/2 的非阻塞架构,而在移植过程中,为了适配新的工作区 API,开发人员添加了代码来规范化管道操作。然而,由于合并冲突解决时遗漏了一个关键的代码路径,该路径本应配置管道操作以在请求转换期间执行完整的工作区回滚。攻击者首先发送一个 HTTP/1 请求,然后等待足够长的时间以触发 timeout_linger,此时服务端释放工作线程但保持会话。攻击者随后在 timeout_idle 到期前恢复流量,发送多个请求利用管道化机制。由于工作区回滚保证失效,预取的数据量超过了 workspace_client 的限制,导致工作区溢出,触发 panic 并导致服务器崩溃。