漏洞概述 该漏洞涉及HTTP/2协议中的一个安全问题,具体表现为恶意或受损的HTTP/2服务器可以通过发送没有 标志的 帧,并随后发送无限制的 帧链,来耗尽客户端内存。每个片段被追加到 中,没有对大小或计数的限制,而块仅在收到 时解码——如果恶意服务器从不发送 ,则永远不会解码。单个连接可以将客户端内存消耗到OOM(约1GB内存和4K 16 KB帧)。 影响范围 受影响组件:HTTP/2客户端 影响程度:可能导致客户端内存耗尽,进而导致服务不可用或崩溃 攻击条件:需要与恶意或受损的HTTP/2服务器建立连接 修复方案 1. 限制累积的头部块大小: - 客户端现在根据本地发布的 限制累积的头部块大小,该值默认为256 KB(之前为无限大,即无限制)。 - 限制在压缩累加器中检查,并在累加器增长时暂停连接。 - 如果超过限制,连接将使用 关闭。 - 默认值也发布给服务器,因此行为良好的对等方永远不会发送过大的块。 - 接收侧的压缩备份不会丢弃过大的块,因为压缩累加器永远不会大于头部列表解码后的大小,因此列表永远不会拒绝适合广告大小的块。 2. 跟踪运行字节计数: - 通过跟踪 中的运行字节计数来强制执行,因此每帧的强制执行为O(1),而不是重新计算累加器(在洪水情况下为O(n^2))。 POC代码 总结 该漏洞通过限制累积的头部块大小和跟踪运行字节计数来修复,以防止恶意服务器耗尽客户端内存。修复方案确保了客户端在处理头部块时的安全性和稳定性。