
Учебная лаборатория, демонстрирующая техники обхода песочниц JavaScript-выражений и эволюцию патчей через несколько уязвимых версий песочниц, с полезными нагрузками и анализом AST.
Минимальная экспериментальная среда для демонстрации побега из JavaScript-песочницы выражений и эволюции исправлений.
Через несколько версий sandbox реализуется путь от:
Полностью эксплуатируемый → исправление this → затем исправление destructuring
При этом сохраняются новые способы обхода, что помогает понять реальный процесс противостояния уязвимостей и патчей.
.
├── payload.js # различные атакующие payload
├── sandbox_v0.js # исходная уязвимая версия
├── sandbox_v1.js # исправление цепочки this
├── sandbox_v2.js # дополнительное исправление destructuring
Мы хотим смоделировать такую реальность:
И так по кругу.
Этот проект не предназначен для создания по-настоящему безопасной VM. А для наблюдения за тем:
как каждый «внешне разумный» патч пробивается следующей техникой.
npm install vm2 acorn acorn-walk
node sandbox_vX.js
Замените X на 0 / 1 / 2.
payload.js содержит четыре способа доступа:
| Название | Техника |
|---|---|
| CVE-2025-68613 / this | получение process через this |
| CVE-2026-25049 / destructuring | получение constructor через деструктуризацию объекта |
| Reflect.get | использование Reflect API |
| Dynamic Reflect | динамический доступ к свойствам |
Особенности:
Результат: все payload проходят.
Атакующий счастлив как ребёнок.
Изменения:
"use strict".call(undefined)В результате:
this === undefined
Атакующий кивает и продолжает идти другим путём.
Добавлено:
ObjectPatternconstructorИсправления по принципу чёрного списка обычно обладают:
✔ исправляют явный путь ✔ низкая стоимость ✔ легко внедрить
Но при этом:
❌ ограниченная поверхность защиты ❌ легко обходятся другими семантически эквивалентными способами доступа
Именно поэтому песочницы вроде vm2 исторически неоднократно подвергались побегу.