CVE-2026-34211SandboxJS 是一个用于 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 往往会导致整个进程意外退出,从而实现拒绝服务攻击。攻击者无需用户交互或认证,仅需通过网络发送特制的恶意数据包即可触发。