
Laboratorio didattico che dimostra le tecniche di evasione dei sandbox per espressioni JavaScript e l'evoluzione delle patch attraverso più versioni vulnerabili di sandbox, con payload e analisi AST.
Un ambiente sperimentale minimale per dimostrare l'escape dei sandbox JavaScript e l'evoluzione delle patch.
Attraverso più versioni del sandbox, si passa da:
completamente aggirabile → patch su this → patch su destructuring
mantenendo al contempo nuovi modi di bypass, per comprendere il processo di confronto tra vulnerabilità e patch nel mondo reale.
.
├── payload.js # vari payload di attacco
├── sandbox_v0.js # versione originale vulnerabile
├── sandbox_v1.js # fix della catena this
├── sandbox_v2.js # fix di destructuring
Vogliamo simulare questa realtà:
In un ciclo continuo.
Questo progetto non mira a creare una VM realmente sicura. Ma a osservare:
come ogni patch "apparentemente ragionevole" venga infranta dalla tecnica successiva.
npm install vm2 acorn acorn-walk
node sandbox_vX.js
Sostituisci X con 0 / 1 / 2.
payload.js include quattro modalità di accesso:
| Nome | Tecnica |
|---|---|
| CVE-2025-68613 / this | ottenere process tramite this |
| CVE-2026-25049 / destructuring | ottenere constructor tramite destructuring |
| Reflect.get | usare l'API Reflect |
| Dynamic Reflect | accesso dinamico alle proprietà |
Caratteristiche:
Risultato: tutti i payload passano.
L'attaccante è felice come una pasqua.
Modifiche:
"use strict".call(undefined)Quindi:
this === undefined
L'attaccante annuisce e prosegue per un'altra strada.
Novità:
ObjectPatternconstructorLe patch basate su blacklist di solito hanno:
✔ correzione di percorsi specifici ✔ costo basso ✔ facile da distribuire
Ma allo stesso tempo:
❌ superficie difensiva limitata ❌ facilmente aggirabili da altre modalità di accesso semanticamente equivalenti
È proprio per questo che sandbox come vm2 hanno storicamente subito ripetuti escape.