xiand.ai
2026年4月13日 · 更新于 UTC 13:37
网络安全

大小写敏感编码错误致数百万 Nuxt 应用面临请求走私风险

h3 HTTP 框架中存在一个漏洞,攻击者可通过在标头字段中使用不一致的大小写来绕过安全层。

Ryan Torres

1 分钟阅读

大小写敏感编码错误致数百万 Nuxt 应用面临请求走私风险
图片来源: javascript.plainenglish.io

安全研究员 Simon Koeck 在 h3 中发现了一个严重漏洞。h3 是热门 Web 框架 Nuxt.js 和 Nitro 服务器引擎底层的 HTTP 框架。该缺陷源于框架处理标头数据时存在大小写敏感性错误,攻击者可借此执行 HTTP 请求走私攻击。

问题的核心在于 h3 中一个用于解析请求体的函数。在检查分块传输编码(chunked transfer encoding)时,该代码对字符串 "chunked" 进行了大小写敏感的搜索。然而,根据 RFC 7230 标准,HTTP 标头值必须被视为大小写不敏感。通过发送类似 "Transfer-Encoding: ChunKed" 的标头,攻击者可以诱导 h3 框架完全忽略请求体。

走私攻击的原理

当应用程序部署在反向代理之后时,代理服务器与后端对请求解析方式的差异会产生安全缺口。标准的代理服务器会将 "ChunKed" 正确识别为有效的 chunked 编码并转发完整请求。但由于 h3 无法识别该编码,它会认为请求没有主体并立即返回响应。

这导致了代理与服务器之间的状态不同步。被 h3 忽略的数据会残留在连接缓冲区中,并被误认为是后续 HTTP 请求的开头。这使得攻击者能够向系统中注入或“走私”第二个未经授权的请求。

Koeck 通过对比 h3 与 Express 框架证实了这一行为。Express 能正确识别格式错误的请求并等待剩余数据,而 h3 则会立即处理请求,从而未能识别出请求体。

该漏洞对现代 Web 部署构成了重大风险。由于走私的请求在初始检查中被隐藏,它可以绕过 Web 应用防火墙(WAF)和身份验证代理。在共享的 keep-alive 连接环境中,这可能导致响应中毒,即本应发给某个用户的敏感数据或会话令牌被发送给了其他人。

Koeck 指出:“最糟糕的是,这一切都不会留下明显的痕迹。”由于走私的请求在后端看来是一笔新的、看起来合法的交易,因此该攻击往往能避开传统的日志记录和监控系统。建议使用 Nuxt 和 Nitro 的开发者确保其环境已更新,以降低同步错误带来的风险。

评论

评论存储在您的浏览器本地。