http2shell:Node 与 Python 的新 RCE 威胁
Evolving Threat: http2shell is an RCE in node, Python, and more
一个名为 http2shell 的新漏洞正在威胁 Node、Python 等多种语言环境,它利用 brotli 压缩库中的内存错误实现远程代码执行(RCE)。讨论中有人指出,brotli <= 1.2.0 版本存在风险,而 Python 包已更新至 1.2.1 修复。有趣的是,该漏洞的修复提交早在今年二月就已存在,但直到 OpenAI 的 Agent 意识到其安全性影响后才被重视。社区建议的临时缓解措施包括在客户端和服务端禁用 brotli 编码。此外,Rust 服务器因未绑定 C 库可能暂时安全,但也有人提醒 Rust 同样存在缓冲区溢出风险。
修复这个漏洞的提交早在二月就完成了,但当时并未被视为安全相关,直到他们的 Agent 意识到其严重性。
HN 评论区
85- mirashii
我觉得这应该叫 googlebrotli2shell,而不是 http2shell。谷歌理应为此承受一些声誉损失。这是一个基础的内存安全违规,来自同一个既搞 wuffs、又推崇 Rust 以保障内存安全、还搞 Carbon 的组织。zstd 拥有高质量的 Rust 实现,且发布时间大致相同。
此外,brotli 库几乎整整一年没有发布新版本,而修复该漏洞的代码早在二月就已提交。谷歌所有项目都基于 main 分支构建,因此未受影响,但开源发布完全被当成了事后补救。超过 100 个包含各种修复的提交被搁置,直到发生安全事件才被迫发布。
- anonymous908213
说实话,我实在受够了每个内存漏洞都被起个可爱的轰动性名字并大搞营销。
- ataraxia937
这次事件感觉又被夸大了,至少对服务器端而言。我刚检查了一个拥有超过 200 个 GitHub 仓库的组织,涉及 Node、Python 和 C#。它们都不受影响……因为它们实际上根本没有调用 Brotli 解码器。服务器端平台上默认并未启用它。这很像 PHP 的那些漏洞,必须满足特定条件才会真正面临风险。
至于客户端?没错,那风险更大。赶紧修补吧。但除非你的客户端主动连接攻击者,否则坏人不会攻击你的客户端。别为了这事熬夜。
- rvanlaar
看起来 brotli <= 1.2.0 存在漏洞。
Python 包已经更新到了 1.2.1。https://pypi.org/project/brotli/1.2.1/
- iracigt
周三我玩了这个漏洞挺开心。Node 发布后,修复后的 brotli 包在 pypi 上又过了一天多才出现。
在 Python 中用单行 httpx.get(URL) 就能轻松复现,但我没能从那个上下文中找到绕过 ASLR 的方法。导致崩溃很容易,我(借助 LLM)能搞到一些读写原语,但无法串联起来获取我所需的那个函数指针。可能需要堆操作,但那时我就失去兴趣了。
真希望能看到一个实际的 RCE PoC。另外,开源权重模型可以轻松提供一个“回归测试”,把大多数爬虫吓跑。