HTTP/2 帧大小限制绕过导致 Bandit 内存耗尽漏洞总结 漏洞概述 Bandit 的 HTTP/2 解析器在已经缓冲了完整帧体后才检查帧大小,而不是在解析 9 字节的帧头时进行检查。攻击者可以发送一个 16 MB 的帧,而服务器(已协商 16 KB 帧大小)会静默地缓冲超过 1024 倍协商大小的数据。这导致跨多个连接的内存压力拒绝服务(DoS)。 影响范围 受影响版本: > 0.3.5 且 < 1.11.0 修复版本: 1.11.0 严重程度: 中等 (CVSS v4 基础评分 6.9/10) 影响: 任何使用 HTTP/2 (h2 或 h2c) 的 Bandit 服务器,无需认证或特定路由。攻击者通过持有数千个并发连接,可以耗尽服务器内存,远超协商的 限制。 修复方案 在解析帧头时立即检查帧大小限制,而不是在缓冲帧体之后。具体做法是添加一个仅在帧头字段上检查长度的子句,以便在 9 字节帧头到达时立即执行大小检查,而不是在帧体到达之后。 POC 代码 利用日志示例