Skip to content

Design a real sandbox boundary for token script execution #742

@tcsenpai

Description

@tcsenpai

CodeRabbit inline: #695 (comment)

Prepared design note: history/token-script-sandbox-boundary.md

Current findings:

  • src/libs/scripting/index.ts still executes untrusted token scripts in-process via node:vm.
  • Existing hardening (Date.now/Math.random/process/require restrictions plus per-call timeouts) improves determinism but does not create a real security boundary.
  • The consensus process still shares the same runtime, event loop, and memory domain with token script execution.
  • Earlier remediations Implement L2PS Members E2E Encryption #133 and Add L2PS methods to the SDK once the other points are sufficiently mature #134 reduced state leakage and host-object mutation risk, but they did not solve the underlying sandbox/trust-boundary problem.
  • This remains an architectural hardening task, not a local autofix.

Future target:

  • Replace the in-process executor model with an isolated execution boundary and explicit message-passing ABI.
  • Enforce timeout, memory, and kill semantics at the executor boundary.
  • Accept only serialized, schema-validated inputs/outputs.
  • Keep consensus-critical failure handling fail-closed.

Acceptance criteria:

  • Token scripts no longer execute inside the main node process trust boundary.
  • Only serialized, validated data crosses the executor boundary.
  • Timeout and memory ceilings are enforced by the executor, not just by cooperative in-process controls.
  • Wedged executions can be terminated without depending on script cooperation.
  • Hooks and methods cannot mutate host state except through validated returned mutations or storage updates.
  • Executor outputs are schema-validated before application.
  • Regression coverage exists for timeout, malformed output, executor crash, and representative escape attempts.

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions