

专为隔离和保护 JavaScript 执行而设计的 SandboxJS 库近期曝出四个高危漏洞(CVE-2026-25520、CVE-2026-25586、CVE-2026-25587 和 CVE-2026-25641),这些漏洞均获得 CVSS 10.0 的最高风险评分。攻击者可借此完全突破沙箱限制,在宿主系统上执行任意代码。
对于依赖 SandboxJS 安全运行非受信代码的开发者而言,这些发现无异于拉响了最高级别的安全警报。该库所承诺的安全隔离机制,已被多种能够绕过核心防护的攻击途径彻底瓦解。
漏洞技术细节
函数返回值处理缺陷(CVE-2026-25520)
该漏洞利用库函数处理返回值时的逻辑缺陷。正常情况下,沙箱会对返回的对象进行封装,以防止其与外部环境交互。但此漏洞允许攻击者通过精心构造的方法调用链,访问宿主的 Function 构造函数。
安全公告明确指出:“函数返回值未被正确封装”。攻击者可以利用 Object.values 或 Object.entries 等方法,从一个看似无害的返回值中获取包含宿主构造函数的数组,从而获得 JavaScript 引擎的完整控制权,实现沙箱逃逸。
Map对象安全机制失效(CVE-2026-25587)
该漏洞针对通常被视为相对安全的 Map 对象。问题根源在于库的 let 实现存在缺陷,允许攻击者覆写 Map.prototype.has 这一关键方法。
公告强调:“由于 Map 被列入 SAFE_PROTOYPES,其原型可通过 Map.prototype 获取”。攻击者通过覆写 has 方法,能够操纵沙箱内部的属性存在性检查逻辑,进而破坏沙箱的隔离性,实现逃逸。
宿主原型污染漏洞(CVE-2026-25586)
这是此次披露的漏洞组中最危险的一个。它利用了 SandboxJS 使用 hasOwnProperty 进行属性检查的机制。攻击者可以对一个已被沙箱化的对象的 hasOwnProperty 方法进行“影子替换”或直接覆写。
公告警告:“当 hasOwnProperty 的返回值为真时,白名单检查将被跳过”。这一看似简单的技巧,即可绕过沙箱对 __proto__ 等敏感原型的访问限制,使攻击者能自由地污染宿主环境的原型链,最终执行任意代码。
检查时与使用时差漏洞(CVE-2026-25641)
这是一个典型的“检查时与使用时差”(TOCTOU)漏洞,源于库在验证属性键与实际使用该属性键之间存在微小的时间差。
公告解释:“攻击者可传入恶意对象,这些对象在使用时会强制转换为不同的字符串值”。这使得在安全检查阶段看起来完全无害的属性键,在实际被沙箱访问时,会动态转变为包含恶意载荷的字符串,从而绕过过滤规则。
影响范围与修复方案
所有四个高危漏洞均影响 SandboxJS 0.8.28 及更早的所有版本。库维护者已在最新的 0.8.29 版本中发布了完整的修复补丁。
对于广大开发者,尤其是那些在业务中涉及运行非受信 JavaScript 代码(如插件系统、在线代码编辑器、模板渲染等)的团队,当前最紧迫的行动就是立即将 SandboxJS 升级至 0.8.29 或更高版本。这不仅是简单的版本更新,更是一次关键的安全加固,直接关系到宿主应用乃至底层系统的安全。这类漏洞的挖掘与分析也是渗透测试与高级攻防演练中的核心课题。
参考来源:
Code Red: 4 Critical SandboxJS Flaws (CVSS 10.0) Allow Host Takeover
https://securityonline.info/code-red-4-critical-sandboxjs-flaws-cvss-10-0-allow-host-takeover/
|