
Laboratorio educativo que demuestra técnicas de evasión de sandbox de expresiones JavaScript y la evolución de parches a través de múltiples versiones vulnerables de sandbox, con payloads y análisis de AST.
Un entorno experimental mínimo para demostrar la evasión de sandbox de expresiones JavaScript y la evolución de parches.
A través de múltiples versiones del sandbox, se implementa la transición de:
Totalmente evadible → parchear this → parchear destructuring
Mientras se conservan nuevas vías de evasión, para ayudar a comprender el proceso de confrontación entre vulnerabilidades y parches en el mundo real.
.
├── payload.js # Diversos payloads de ataque
├── sandbox_v0.js # Versión original vulnerable
├── sandbox_v1.js # Corrige la cadena this
├── sandbox_v2.js # Corrige destructuring
Queremos simular esta realidad:
En un ciclo continuo.
Este proyecto no pretende ser una VM realmente segura. Sino para observar:
Cómo cada parche "aparentemente razonable" es vulnerado por la siguiente técnica.
npm install vm2 acorn acorn-walk
node sandbox_vX.js
Reemplaza X por 0 / 1 / 2.
payload.js incluye cuatro métodos de acceso:
| Nombre | Técnica |
|---|---|
| CVE-2025-68613 / this | Obtener process mediante this |
| CVE-2026-25049 / destructuring | Obtener constructor mediante desestructuración de objetos |
| Reflect.get | Usar la API Reflect |
| Dynamic Reflect | Acceso dinámico a propiedades |
Características:
Resultado: Todos los payloads pasan.
El atacante está feliz como en Año Nuevo.
Cambios:
"use strict".call(undefined)Por lo tanto:
this === undefined
El atacante asiente y continúa por otro camino.
Nuevo:
ObjectPatternconstructorEl parcheo basado en listas negras suele tener:
✔ Corrige rutas específicas ✔ Bajo costo ✔ Fácil de implementar
Pero al mismo tiempo:
❌ Superficie de defensa limitada ❌ Fácil de evadir mediante otros métodos de acceso semánticamente equivalentes
Esta es precisamente la razón por la que sandboxes como vm2 han sufrido evasiones recurrentes a lo largo de su historia.