Folia
← 返回头版

HTTP/3服务器QPACK放大攻击漏洞被曝光

研究人员发现HTTP/3服务器在QPACK头部压缩实现中存在严重放大攻击漏洞1。远程未认证客户端可通过精心构造的请求强制服务器分配数十到数千倍于发送流量的内存,单个连接足以导致默认配置下服务器内存溢出或服务挂起1。在调查的十个HTTP/3实现中,七个存在此漏洞1。

漏洞的根本原因在于服务器在解码头部时未正确强制执行累积大小限制1。以1,000,000字节的HEADERS帧为例,该漏洞允许攻击者在其中包含约160,000个唯一头部1。不同实现存在各异的具体表现:quic-go(被Caddy、Traefik和cloudflared所采用的Go库)将1 MiB限制应用于压缩负载而非解码输出,导致15倍扩大1;Cloudflare的quiche库在计算开销时漏算RFC规定的32字节头部开销,允许33倍更多的头部通过1;采用lsquic的动态表参考产生4064:1的放大率1。Bun移除了64 KiB的累积限制,使单个连接可导致2GiB容器内存溢出,同时存在整数溢出漏洞——ncap超过2^31后变为0,导致永久无限循环和CPU占用率100%的服务挂起1。aioquic与mitmproxy定义了MAX_FIELD_SECTION_SIZE参数但从未在解码时进行检查1,而h3 crate在HeaderMap容量超出时触发程序崩溃1。

nghttp3、IIS、Envoy和ngtcp2不受影响1。研究人员指出,修复方案要求在解码时逐条检查头部大小,计入RFC规定的32字节开销,并应用累积预算限制1。多个受影响实现已发布补丁1。


评论