HTTP/2 `CONTINUATION` 洪水:技术细节

主要观点:深入技术分析CONTINUATION洪水这一 HTTP/2 协议中的漏洞类,其威胁比快速重置更严重,单个机器(甚至单个 TCP 连接或少量帧)就能扰乱服务器可用性,导致服务器崩溃或性能严重下降,攻击请求在 HTTP 访问日志中不可见。
关键信息

  • HTTP/2 与 HTTP/1.1 的主要区别是二进制协议,客户端和服务器交换帧。
  • HEADERS帧用于发送请求和响应的 HTTP 头,CONTINUATION帧用于继续发送头。
  • CONTINUATION洪水漏洞是客户端发送无END_HEADERS标志的头帧,导致服务器无限解析和存储头,引发多种问题如 CPU 耗尽、内存溢出等。
  • 多个 HTTP/2 实现中存在该漏洞,如 Golang、Firefox、Node.js 等,各有不同表现和修复情况。
  • 与之前 HTTP/2 漏洞相比,CONTINUATION洪水攻击不发送请求,单个 TCP 连接就能使服务器崩溃,在野外利用时难以调试,对互联网安全构成重大风险,CERT/CC 已开启漏洞协调案例并发布漏洞说明。
    重要细节
  • Golang 中http2MetaHeadersFramereadMetaFrame函数处理头帧,解码器配置正确但会继续解码未发出的头,攻击者可控制解码时间。
  • Firefox 中在处理CONTINUATION洪水时,若头超过限制会返回错误。
  • Node.js 中存在与CONTINUATION帧相关的可达断言崩溃,是数据竞争导致current_nghttp2_memory_值更新出错。
  • CONTINUATION洪水与 CVE-2019-9516 和 CVE-2019-9518 漏洞不同,前者发送随机头,后者发送空帧。
  • HTTP/2 流量约占人类 HTTP 流量的 60%,若被利用影响范围大,如波兰在俄乌冲突中遭受的 DDoS 攻击增多。
阅读 30
0 条评论