HTTP2Shell 漏洞 CVE-2026-111497:5 分钟排查 Node.js/Python/Bun/Envoy 是否受影响
10 月 21 日,Node.js 项目发布安全更新,修复了一个 Brotli 解码器中的严重内存安全漏洞。这个漏洞(CVE-2026-111497,CVSS 9.2)的影响范围远超 Node.js:Python 的 brotli/brotlicffi 包、Bun、Envoy 代理、Istio 服务网格,以及任何内嵌受影响 Brotli 解码器的 HTTP 客户端或服务端,都可能被攻击者通过特制压缩数据触发越界写入,导致内存泄露、进程崩溃甚至任意代码执行。
TL;DR:运行第三节排查命令,5 分钟确认服务是否受影响;受影响就按第四节升级,无法立即升级先上 4.3 临时缓解。
一、30 秒了解漏洞
Google Brotli 压缩库(1.0.3 – 1.2.0)的解码器在 DecodeBlockTypeAndLength() 函数中存在返回值语义混淆:调用方无法区分「输入耗尽」与「数据流非法」。攻击者构造一条特制的 Brotli 压缩流,即可触发越界写入,破坏相邻内存数据。
由于 Brotli 是 HTTP/1.1 和 HTTP/2 的通用压缩标准(Content-Encoding: br),任何解压不可信 Brotli 数据的服务都可能受影响。
二、你的服务受影响吗?
| Google Brotli(C 库) | 1.0.3 – 1.2.0 | ≥ 1.2.1 | ⚠️ 高 |
| Node.js | 22.x / 24.x / 26.x 活跃发布线 | 10-21 安全更新后版本 | ⚠️ 高 |
| Bun | < 1.4.4 | ≥ 1.4.4 | ⚠️ 高 |
| Python brotli / brotlicffi | 内嵌受影响 Brotli 的版本 | 升级到最新版 | ⚠️ 中高 |
| Envoy / Istio | 启用 Brotli 压缩的受影响构建 | 升级 Envoy 修复版 | ⚠️ 中 |
判断逻辑:只要你的服务会解压外部传入的 Brotli 数据(作为服务端收请求、或作为客户端收响应),就按第三节排查。
三、5 分钟排查清单
3.1 Node.js
# 看运行时版本(22.x / 24.x / 26.x 都在影响范围内)
node -v
# 看 Node 内嵌的 Brotli 库版本
node -p "process.versions.brotli"
# 项目依赖里有没有直接用 brotli 的包
npm ls brotli 2>/dev/null
结论:Node.js 本体受影响,直接按 4.2 升级到 10 月 21 日安全版本,不要停留在旧活跃线。
3.2 Python
# 查是否安装了 Brotli 相关包
pip list | grep -i brotli
# 用 pip-audit 扫一遍(注意:自动工具可能不会标记此 CVE,别只信扫描器)
pip-audit
3.3 Bun
bun –version # < 1.4.4 即受影响
3.4 Envoy / Istio
# 看 Envoy 版本(对照 Envoy 官方修复公告)
envoy –version
# 检查 Istio sidecar 注入的 Envoy 版本
kubectl get pods -n istio-system -o jsonpath="{..image}" | tr ' ' '\\n' | grep proxyv2 | sort -u
# 检查是否启用了 Brotli 压缩配置
kubectl get configmap -n istio-system istio-sidecar-injector -o yaml | grep -i brotli
四、修复方案
4.1 升级系统 Brotli 库
# macOS
brew upgrade brotli
# Ubuntu / Debian
sudo apt update && sudo apt upgrade libbrotli1
# CentOS / RHEL
sudo yum update brotli
4.2 升级运行时
# Node.js:升级到 10-21 安全公告对应版本(各活跃线最新)
nvm install –lts && nvm use –lts
# Bun:≥ 1.4.4
bun upgrade
# Python:升级 Brotli 包(确认底层系统库也已更新)
pip install –upgrade brotli brotlicffi
4.3 临时缓解(无法立即升级时)
# Nginx:拒绝 Brotli 压缩的入站请求
if ($http_content_encoding ~* "br") {
return 406;
}
# 在反向代理层剥离压缩协商头
proxy_set_header Accept-Encoding "";
五、验证修复
# Brotli 库版本 ≥ 1.2.1
brew list –versions brotli # macOS
dpkg -l | grep brotli # Ubuntu
# Node.js / Bun 版本
node -v && node -p "process.versions.brotli"
bun –version
# 确认无 Brotli 解压配置暴露
grep -r "Content-Encoding: br" /etc/nginx/ 2>/dev/null
六、影响范围与背景
这个漏洞最初因 Node.js 利用路径被称为「Node2Shell」,后因影响面扩大(Python、Bun、Envoy、Istio 等)演变为「HTTP2Shell」。OpenAI Codex Security 团队的 Khai Tran 和 Sylvie Mayer 发现了根解析器缺陷,Node.js 维护者 Matteo Collina 和 Antoine du Hamel 完成了修复。
Google 将漏洞评为 CVSS 9.2(严重),Red Hat 评为 8.1,Node.js 标注 high。截至目前尚未报告在野利用——但安全社区已有 PoC,修复窗口有限。
七、给开发者的预防建议
- CI/CD 集成扫描:pipeline 里加入 pip-audit、npm audit、bun audit;但注意自动化工具可能不会标记此 CVE(PyPI 包映射缺失),不能只信扫描器
- SBOM 管理:维护软件物料清单,确保能快速定位所有使用 Brotli 解码器的服务
- 最小化压缩支持:非业务需要,服务端不主动协商 Content-Encoding: br
- 关注后续通报:CISA 目前评估在野利用为 none,但 PoC 已公开——修复窗口有限,别拖
网硕互联帮助中心






评论前必须登录!
注册