远程未经认证的客户端可以迫使HTTP/3服务器分配的内存比其发送的数据多出数十至数千倍。仅一个连接就足以耗尽服务器内存,或使默认配置的服务器陷入瘫痪。在测试的十个实现中,有七个存在漏洞,其中若干已经修复。
QPACK会压缩HTTP/3头部,以尽量减少在网络上传输的流量。在受影响的实现中,解码后头部的限制要么缺失、要么不完整,要么应用得太晚。因此,一个很小的HEADERS帧可能在内存中展开为数十万个头部对象。要阻止这种展开,需要在解码和保留各字段的过程中强制执行累计预算。
这项研究始于为TLS扫描器JA4Scan研究QUIC协议栈的过程,在多个HTTP/3实现中发现了同一类漏洞。RFC 9114定义了服务器应如何限制解码后的头部大小,但一些实现只检查压缩帧的大小,在检查之前就将所有内容解压,遗漏了每个字段32字节的开销,在未配置该设置时默认为无限制,或者根本从不执行该设置。
这种攻击可以双向进行。一个1,000,000字节的HEADERS帧可以容纳约160,000个不同的头部,而动态表变体会插入一个很大的条目,并以单字节索引将其引用数千次,在lsquic和Bun中产生4064:1的放大比。
quic-go、Cloudflare quiche、lsquic和Wireshark已有可用的修复方案。截至2026年10月20日,Bun、h3 crate和aioquic/mitmproxy仍未修补。缓解措施包括不对外暴露HTTP/3服务器、在mitmproxy中禁用HTTP/3,以及在h3中设置合理的max_field_section_size。IIS、Envoy和ngtcp2/nghttp3不受影响。
来源: Hacker News · 由HeadlinesBriefing整理摘要