
Bildungslabor, das Techniken zur Umgehung von JavaScript-Expression-Sandboxes und die Entwicklung von Patches über mehrere verwundbare Sandbox-Versionen demonstriert, mit Payloads und AST-Analyse.
Eine minimale Experimentierumgebung zur Demonstration von JavaScript-Expression-Sandbox-Escapes und Patch-Evolution.
Über mehrere Sandbox-Versionen wird der Weg von:
Vollständig entkommbar →
thisgepatcht → Destructuring gepatcht
umgesetzt, während gleichzeitig neue Umgehungswege erhalten bleiben – um den realen Wettlauf zwischen Schwachstellen und Patches zu veranschaulichen.
.
├── payload.js # Verschiedene Angriffs-Payloads
├── sandbox_v0.js # Ursprüngliche verwundbare Version
├── sandbox_v1.js # this-Kette gepatcht
├── sandbox_v2.js # Destructuring zusätzlich gepatcht
Wir möchten eine solche Realität simulieren:
Eine Endlosschleife.
Dieses Projekt dient nicht dazu, eine wirklich sichere VM zu bauen. Sondern dazu, zu beobachten:
Wie jeder „scheinbar vernünftige“ Patch von der nächsten Technik durchbrochen wird.
npm install vm2 acorn acorn-walk
node sandbox_vX.js
Ersetze X durch 0 / 1 / 2.
payload.js enthält vier Zugriffsarten:
| Name | Technik |
|---|---|
| CVE-2025-68613 / this | Zugriff auf process über this |
| CVE-2026-25049 / destructuring | constructor über Objekt-Destructuring |
| Reflect.get | Nutzung der Reflect-API |
| Dynamic Reflect | Dynamischer Eigenschaftszugriff |
Eigenschaften:
Ergebnis: Alle Payloads sind erfolgreich.
Der Angreifer freut sich wie ein Schneekönig.
Änderungen:
"use strict".call(undefined)Daher:
this === undefined
Der Angreifer nickt und wählt einen anderen Weg.
Neu hinzugekommen:
ObjectPatternconstructorBlacklist-basiertes Patchen hat in der Regel:
✔ Behebt einen klaren Pfad ✔ Geringe Kosten ✔ Schnell einsatzbereit
Aber gleichzeitig:
❌ Begrenzte Verteidigungsfläche ❌ Leicht durch semantisch äquivalente andere Zugriffsarten zu umgehen
Genau das ist der Grund, warum Sandboxes wie vm2 in der Vergangenheit wiederholt Escape-Schwachstellen aufwiesen.