New objects created without an explicit security descriptor take their DACL from the token's default DACL, which CreateRestrictedToken builds from the user's ambient SIDs — none of them a restricting SID. Confined children therefore failed the write pass-2 check when creating anonymous pipes (CreatePipe: ERROR_ACCESS_DENIED, surfaced as Node EPERM), breaking PowerShell pipelines and other CreatePipe consumers. Merge a full-access write-SID ACE (Everyone under read-only) into the token default DACL at init via SetTokenInformation(TokenDefaultDacl). Named pipes are EXEMPT: their default security descriptor is the kernel's PUBLIC template (owner/SYSTEM/Admins full, Everyone read-only), which no token change influences, so libuv's piped stdio capture stays denied for confined grandchildren — the POC-documented boundary, now pinned by the runner suite (inherit/ignore OK, pipe DENIED) and documented in the README pair. The NUL paragraph is corrected to the measured matrix (Everyone has 0x1201BF on the device: cmd/node writes land; Set-Content fails at the PS layer).
sandbox/ — process-sandbox capability family
English | 中文
This family applies per-session confinement policy to process execution. It covers same-world subprocesses; isolated environments replace complete capability implementations instead of registering here.
| Package | Role | ctx key |
|---|---|---|
sandbox/ |
Defines the process-sandbox service and shared escalation vocabulary | ctx.sandbox |
sandbox-local/ |
Provides local platform confinement backends | registers on ctx.sandbox |
sandbox-policy/ |
Resolves durable per-session sandbox policy | ctx.sandboxPolicy |
See the sandbox decision for the capability boundary and the filesystem integration decision for cross-family policy use.
The subsystem reference — modes and enforcement, per-call policy, wrapped-argv dialects, fail-closed errors — is docs/subsystems/sandbox.md; the boundary and the cross-family phase live in the sandbox and cross-family fs sandbox Agent Notes.