Sandboxjs · Sandboxjs · CVE-2026-34217
Nome do Software Vulnerável e Versões Afetadas
SandboxJS versões anteriores a 0.8.36
Descrição
Uma vulnerabilidade de modificação de escopo existe no SandboxJS, especificamente nas versões 0.8.35 e anteriores. Código sandboxed não confiável pode vazar objetos internos do interpretador através do operador `new`, expondo objetos de escopo do sandbox a código não confiável. Embora a avaliação de código e os protótipos permaneçam protegidos, isso permite a modificação de escopos dentro do sandbox. A causa raiz são etapas de sanitização ausentes no manipulador do operador `New` dentro do arquivo `src/executor.ts` (linhas 1275–1280). Especificamente, os argumentos do construtor não são higienizados usando `valueOrProp()`, e o valor de retorno não é higienizado usando `getGlobalProp()` ou `sanitizeArray()`. Isso contrasta com o manipulador `Call`, que higieniza corretamente tanto os argumentos quanto os valores de retorno. A vulnerabilidade permite que um invasor acesse objetos JavaScript host reais, como `globalThis`, `Function` e `eval`, através de um objeto `Prop` e, em seguida, armazene uma referência ao escopo do sandbox dentro de um objeto construído. Uma prova de conceito demonstra a capacidade de vazar o objeto de escopo criando um construtor que captura o contexto do objeto `isNaN`. O ataque não requer autenticação ou interação do usuário e funciona com a configuração padrão do sandbox.
Recomendações
Atualize para a versão 0.8.36 ou posterior do SandboxJS para resolver a vulnerabilidade. Como uma correção crítica, higienize os argumentos do construtor no manipulador do operador `New` adicionando `valueOrProp()` ao array de argumentos. Implemente a higienização profunda dos valores de retorno do sandbox para remover referências internas. Congele ou sele os objetos `options.globals` e `scope.allVars` após a construção para evitar mutação.