vm2 沙箱逃逸(GHSA-cfcw-xp6x-25gj)迁移实战
迁移背景
vm2 的沙箱逃逸漏洞(CVSS 9.8)+ 项目停止维护,意味着这不是打补丁,而是换方案。本篇给出可操作的迁移路线。
第一步:盘点
找出所有使用 vm2 的位置(含间接依赖):
npm ls vm2
rg -l "require('vm2')|from 'vm2'" .
第二步:按场景选替代方案
场景 A:执行可信代码,只需隔离命名空间
- 用 Node 内置
vm模块即可,但注意它不是安全沙箱。
场景 B:执行不可信代码,需要强隔离
- 独立子进程 + seccomp/AppArmor 限制系统调用;
- 或容器(Docker 单次执行模式);
- 或 Firecracker/gVisor 微虚拟机(多租户场景)。
场景 C:纯数据计算、无 I/O
- 用受限表达式求值器(如 expr-eval)替代完整 JS 运行时。
第三步:渐进替换
- 对每个调用点先加"请求级隔离"兜底(独立进程);
- 按风险从高到低迁移,回归测试;
- 在依赖审计工具中 ban 掉 vm2,防止回潮。
小结
沙箱迁移的关键是先兜底、再替换。在彻底迁走之前,先用进程级隔离挡住最坏情况,是每个生产团队都该做的过渡动作。
评论