
Laboratório educacional que demonstra técnicas de escape de sandbox de expressões JavaScript e a evolução de patches por meio de múltiplas versões vulneráveis de sandbox, com payloads e análise de AST.
Um ambiente experimental minimalista para demonstrar escape de sandbox de expressões JavaScript e a evolução de patches.
Através de múltiplas versões do sandbox, implementando desde:
Totalmente escapável → corrigindo this → corrigindo destructuring
Ao mesmo tempo em que preserva novas formas de bypass, ajudando a entender o processo de disputa entre vulnerabilidades e patches no mundo real.
.
├── payload.js # Vários payloads de ataque
├── sandbox_v0.js # Versão original vulnerável
├── sandbox_v1.js # Corrige a cadeia this
├── sandbox_v2.js # Corrige destructuring
Queremos simular essa realidade:
Em um ciclo contínuo.
Este projeto não tem como objetivo ser uma VM realmente segura. Mas sim observar:
Como cada patch "aparentemente razoável" é quebrado pela próxima técnica.
npm install vm2 acorn acorn-walk
node sandbox_vX.js
Substitua X por 0 / 1 / 2.
payload.js inclui quatro formas de acesso:
| Nome | Técnica |
|---|---|
| CVE-2025-68613 / this | Obtém process via this |
| CVE-2026-25049 / destructuring | Obtém constructor via desestruturação de objetos |
| Reflect.get | Usa a API Reflect |
| Dynamic Reflect | Acesso dinâmico a propriedades |
Características:
Resultado: Todos os payloads passam.
O atacante fica feliz como se fosse Ano Novo.
Mudanças:
"use strict".call(undefined)Portanto:
this === undefined
O atacante acena com a cabeça e segue por outro caminho.
Novidades:
ObjectPatternconstructorCorreções baseadas em lista negra geralmente têm:
✔ Corrigem caminhos específicos ✔ Custo baixo ✔ Fácil de implantar
Mas ao mesmo tempo:
❌ Superfície de defesa limitada ❌ Facilmente contornadas por outras formas de acesso semanticamente equivalentes
É exatamente por isso que sandboxes como o vm2 historicamente sofreram escapes recorrentes.