approval-md 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -24
- package/SPEC.md +57 -11
- package/dist/src/channels/contract.d.ts +34 -1
- package/dist/src/channels/contract.js +200 -7
- package/dist/src/channels/contract.js.map +1 -1
- package/dist/src/channels/telegram.d.ts +123 -11
- package/dist/src/channels/telegram.js +218 -23
- package/dist/src/channels/telegram.js.map +1 -1
- package/dist/src/channels/web.d.ts +9 -0
- package/dist/src/channels/web.js +17 -0
- package/dist/src/channels/web.js.map +1 -1
- package/dist/src/cli/amend.js +214 -30
- package/dist/src/cli/amend.js.map +1 -1
- package/dist/src/cli/attest.d.ts +9 -0
- package/dist/src/cli/attest.js +134 -7
- package/dist/src/cli/attest.js.map +1 -1
- package/dist/src/cli/channel-telegram.d.ts +99 -26
- package/dist/src/cli/channel-telegram.js +311 -13
- package/dist/src/cli/channel-telegram.js.map +1 -1
- package/dist/src/cli/channel.d.ts +9 -0
- package/dist/src/cli/channel.js +9 -0
- package/dist/src/cli/channel.js.map +1 -1
- package/dist/src/cli/codex-bridge.d.ts +819 -0
- package/dist/src/cli/codex-bridge.js +1607 -0
- package/dist/src/cli/codex-bridge.js.map +1 -0
- package/dist/src/cli/codex.d.ts +1 -1
- package/dist/src/cli/codex.js +304 -7
- package/dist/src/cli/codex.js.map +1 -1
- package/dist/src/cli/daemon.js +4 -1
- package/dist/src/cli/daemon.js.map +1 -1
- package/dist/src/cli/doctor.js +467 -12
- package/dist/src/cli/doctor.js.map +1 -1
- package/dist/src/cli/execute.js +25 -2
- package/dist/src/cli/execute.js.map +1 -1
- package/dist/src/cli/help.d.ts +6 -2
- package/dist/src/cli/help.js +165 -60
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/hook-codex.d.ts +49 -1
- package/dist/src/cli/hook-codex.js +60 -1
- package/dist/src/cli/hook-codex.js.map +1 -1
- package/dist/src/cli/hook.d.ts +459 -3
- package/dist/src/cli/hook.js +1062 -114
- package/dist/src/cli/hook.js.map +1 -1
- package/dist/src/cli/import.js +1 -1
- package/dist/src/cli/import.js.map +1 -1
- package/dist/src/cli/main.js +5 -3
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/policy-apply.d.ts +195 -0
- package/dist/src/cli/policy-apply.js +573 -0
- package/dist/src/cli/policy-apply.js.map +1 -0
- package/dist/src/cli/policy.js +14 -1
- package/dist/src/cli/policy.js.map +1 -1
- package/dist/src/cli/preflight.d.ts +151 -13
- package/dist/src/cli/preflight.js +398 -41
- package/dist/src/cli/preflight.js.map +1 -1
- package/dist/src/cli/sandbox.js +17 -1
- package/dist/src/cli/sandbox.js.map +1 -1
- package/dist/src/cli/scaffold.d.ts +1 -1
- package/dist/src/cli/scaffold.js +1 -1
- package/dist/src/cli/setup-channel.d.ts +9 -0
- package/dist/src/cli/setup-channel.js +28 -1
- package/dist/src/cli/setup-channel.js.map +1 -1
- package/dist/src/cli/setup-common.d.ts +3 -1
- package/dist/src/cli/setup-common.js +3 -2
- package/dist/src/cli/setup-common.js.map +1 -1
- package/dist/src/cli/setup.d.ts +2 -0
- package/dist/src/cli/setup.js +94 -2
- package/dist/src/cli/setup.js.map +1 -1
- package/dist/src/cli/up.js +115 -51
- package/dist/src/cli/up.js.map +1 -1
- package/dist/src/cli/values.js +3 -4
- package/dist/src/cli/values.js.map +1 -1
- package/dist/src/cli/verb-registry.js +174 -9
- package/dist/src/cli/verb-registry.js.map +1 -1
- package/dist/src/cli/wordmark.d.ts +2 -2
- package/dist/src/cli/wordmark.js +2 -2
- package/dist/src/codex/broker.d.ts +229 -0
- package/dist/src/codex/broker.js +548 -0
- package/dist/src/codex/broker.js.map +1 -0
- package/dist/src/codex/runner.d.ts +178 -0
- package/dist/src/codex/runner.js +231 -0
- package/dist/src/codex/runner.js.map +1 -0
- package/dist/src/codex/serve.d.ts +56 -0
- package/dist/src/codex/serve.js +98 -0
- package/dist/src/codex/serve.js.map +1 -0
- package/dist/src/codex/workspace-commit.d.ts +219 -0
- package/dist/src/codex/workspace-commit.js +549 -0
- package/dist/src/codex/workspace-commit.js.map +1 -0
- package/dist/src/core/advance-cycle.d.ts +51 -0
- package/dist/src/core/advance-cycle.js +66 -2
- package/dist/src/core/advance-cycle.js.map +1 -1
- package/dist/src/core/agents-md.d.ts +20 -18
- package/dist/src/core/agents-md.js +33 -31
- package/dist/src/core/agents-md.js.map +1 -1
- package/dist/src/core/attest.d.ts +215 -0
- package/dist/src/core/attest.js +317 -7
- package/dist/src/core/attest.js.map +1 -1
- package/dist/src/core/audit.d.ts +18 -0
- package/dist/src/core/audit.js +13 -0
- package/dist/src/core/audit.js.map +1 -1
- package/dist/src/core/channel-owner.d.ts +213 -0
- package/dist/src/core/channel-owner.js +358 -0
- package/dist/src/core/channel-owner.js.map +1 -0
- package/dist/src/core/command-class.d.ts +154 -0
- package/dist/src/core/command-class.js +673 -20
- package/dist/src/core/command-class.js.map +1 -1
- package/dist/src/core/commit-guard.d.ts +272 -0
- package/dist/src/core/commit-guard.js +424 -0
- package/dist/src/core/commit-guard.js.map +1 -0
- package/dist/src/core/daemon-actor.d.ts +45 -0
- package/dist/src/core/daemon-actor.js +54 -0
- package/dist/src/core/daemon-actor.js.map +1 -0
- package/dist/src/core/dark-session.d.ts +109 -8
- package/dist/src/core/dark-session.js +266 -82
- package/dist/src/core/dark-session.js.map +1 -1
- package/dist/src/core/decision-refusal.d.ts +23 -2
- package/dist/src/core/decision-refusal.js +24 -2
- package/dist/src/core/decision-refusal.js.map +1 -1
- package/dist/src/core/env-file.d.ts +5 -0
- package/dist/src/core/env-file.js +60 -1
- package/dist/src/core/env-file.js.map +1 -1
- package/dist/src/core/execute.d.ts +15 -2
- package/dist/src/core/execute.js +15 -2
- package/dist/src/core/execute.js.map +1 -1
- package/dist/src/core/gate.d.ts +86 -1
- package/dist/src/core/gate.js +81 -1
- package/dist/src/core/gate.js.map +1 -1
- package/dist/src/core/gesture-refusal.d.ts +166 -0
- package/dist/src/core/gesture-refusal.js +188 -0
- package/dist/src/core/gesture-refusal.js.map +1 -0
- package/dist/src/core/harness-version.d.ts +1 -1
- package/dist/src/core/harness-version.js +3 -1
- package/dist/src/core/harness-version.js.map +1 -1
- package/dist/src/core/instance.d.ts +59 -2
- package/dist/src/core/instance.js +113 -0
- package/dist/src/core/instance.js.map +1 -1
- package/dist/src/core/log.d.ts +39 -1
- package/dist/src/core/log.js.map +1 -1
- package/dist/src/core/policy-explain.d.ts +10 -0
- package/dist/src/core/policy-explain.js +32 -0
- package/dist/src/core/policy-explain.js.map +1 -1
- package/dist/src/core/policy-load.d.ts +41 -1
- package/dist/src/core/policy-load.js +21 -3
- package/dist/src/core/policy-load.js.map +1 -1
- package/dist/src/core/policy-match.d.ts +43 -0
- package/dist/src/core/policy-match.js +52 -0
- package/dist/src/core/policy-match.js.map +1 -1
- package/dist/src/core/policy-proposal.d.ts +52 -0
- package/dist/src/core/policy-proposal.js +102 -2
- package/dist/src/core/policy-proposal.js.map +1 -1
- package/dist/src/core/protected-path-guard.d.ts +117 -4
- package/dist/src/core/protected-path-guard.js +362 -48
- package/dist/src/core/protected-path-guard.js.map +1 -1
- package/dist/src/core/question-preempted.d.ts +141 -0
- package/dist/src/core/question-preempted.js +152 -0
- package/dist/src/core/question-preempted.js.map +1 -0
- package/dist/src/core/read-scope.d.ts +172 -0
- package/dist/src/core/read-scope.js +252 -0
- package/dist/src/core/read-scope.js.map +1 -0
- package/dist/src/core/sandbox.d.ts +81 -0
- package/dist/src/core/sandbox.js +190 -1
- package/dist/src/core/sandbox.js.map +1 -1
- package/dist/src/core/sender-identity.d.ts +476 -0
- package/dist/src/core/sender-identity.js +572 -0
- package/dist/src/core/sender-identity.js.map +1 -0
- package/dist/src/core/shlex.d.ts +102 -0
- package/dist/src/core/shlex.js +159 -0
- package/dist/src/core/shlex.js.map +1 -0
- package/dist/src/core/values.d.ts +18 -8
- package/dist/src/core/values.js +36 -1
- package/dist/src/core/values.js.map +1 -1
- package/dist/src/daemon/advance.d.ts +10 -0
- package/dist/src/daemon/advance.js +25 -4
- package/dist/src/daemon/advance.js.map +1 -1
- package/dist/src/daemon/daemon.js +9 -0
- package/dist/src/daemon/daemon.js.map +1 -1
- package/dist/src/daemon/git-evidence.d.ts +2 -2
- package/dist/src/daemon/git-evidence.js +1 -1
- package/dist/src/mcp/server.js +8 -0
- package/dist/src/mcp/server.js.map +1 -1
- package/docs/cli-reference.md +932 -32
- package/docs/codex-enforced-session.md +75 -2
- package/docs/codex-workspace-broker.md +118 -0
- package/package.json +3 -1
- package/schema/event.schema.json +538 -9
- package/schema/fixtures/event/invalid/approval-granted-sender-hashed-false.json +20 -0
- package/schema/fixtures/event/invalid/approval-granted-sender-hashed-raw-id.json +20 -0
- package/schema/fixtures/event/invalid/audit-gesture-refused-human-actor.json +16 -0
- package/schema/fixtures/event/invalid/audit-gesture-refused-no-actor-no-sender.json +15 -0
- package/schema/fixtures/event/invalid/audit-gesture-refused-unknown-gesture.json +16 -0
- package/schema/fixtures/event/invalid/audit-question-preempted-agent-actor.json +16 -0
- package/schema/fixtures/event/invalid/audit-question-preempted-no-question-id.json +16 -0
- package/schema/fixtures/event/invalid/audit-question-preempted-unknown-source.json +15 -0
- package/schema/fixtures/event/invalid/gate-path-signed-off-absolute-path.json +14 -0
- package/schema/fixtures/event/invalid/gate-path-signed-off-agent-actor.json +14 -0
- package/schema/fixtures/event/invalid/gate-path-signed-off-missing-path.json +13 -0
- package/schema/fixtures/event/valid/approval-granted-sender-hashed.json +20 -0
- package/schema/fixtures/event/valid/audit-gesture-refused-review-note.json +21 -0
- package/schema/fixtures/event/valid/audit-gesture-refused-sender-key-unavailable.json +19 -0
- package/schema/fixtures/event/valid/audit-gesture-refused.json +19 -0
- package/schema/fixtures/event/valid/audit-question-preempted-no-verdict.json +16 -0
- package/schema/fixtures/event/valid/audit-question-preempted.json +20 -0
- package/schema/fixtures/event/valid/gate-path-signed-off.json +14 -0
- package/schema/fixtures/event/valid/harness-kind-claude-code.json +23 -0
- package/schema/fixtures/event/valid/harness-kind-codex.json +23 -0
- package/schema/fixtures/event/valid/harness-kind-cursor.json +23 -0
- package/schema/fixtures/event/valid/harness-kind-grok.json +23 -0
- package/schema/fixtures/event/valid/harness-kind-muse.json +23 -0
- package/schema/fixtures/policy/invalid/senders-half-keyed.json +20 -0
- package/schema/fixtures/policy/valid/canonical.json +1 -1
- package/schema/fixtures/policy/valid/senders-keyed.json +24 -0
- package/schema/fixtures/policy-md/valid/canonical.md +1 -1
- package/schema/fixtures/policy-md/valid/with-values.md +5 -7
- package/schema/fixtures/values/invalid/class-shaped.json +1 -1
- package/schema/fixtures/values/invalid/duplicate-entry.json +1 -1
- package/schema/fixtures/values/invalid/non-string-item.json +1 -1
- package/schema/fixtures/values/invalid/over-cap.json +1 -1
- package/schema/fixtures/values/invalid/unknown-key.json +1 -1
- package/schema/fixtures/values/invalid/version-float.json +1 -0
- package/schema/fixtures/values/invalid/version-integer.json +1 -0
- package/schema/fixtures/values/invalid/version-wrong-string.json +1 -0
- package/schema/fixtures/values/valid/empty-lists.json +2 -3
- package/schema/fixtures/values/valid/full.json +5 -7
- package/schema/fixtures/values/valid/minimal.json +1 -1
- package/schema/fixtures/values-md/invalid/schema-invalid.md +5 -3
- package/schema/fixtures/values-md/invalid/two-blocks.md +3 -3
- package/schema/fixtures/values-md/invalid/unterminated.md +2 -2
- package/schema/fixtures/values-md/invalid/version-1.md +69 -0
- package/schema/fixtures/values-md/invalid/version-unquoted.md +64 -0
- package/schema/fixtures/values-md/invalid/yaml-error.md +2 -2
- package/schema/fixtures/values-md/valid/absent.md +1 -1
- package/schema/fixtures/values-md/valid/with-values.md +5 -7
- package/schema/policy.schema.json +54 -2
- package/schema/values.schema.json +7 -11
- package/schema/fixtures/values/invalid/version-string.json +0 -1
package/dist/src/core/sandbox.js
CHANGED
|
@@ -125,6 +125,77 @@ export const SANDBOX_STATES = [
|
|
|
125
125
|
];
|
|
126
126
|
/** The default: nothing allowed, nothing denied beyond the network. */
|
|
127
127
|
export const DENY_ALL_EGRESS = { loopback: false, denyRead: [] };
|
|
128
|
+
/**
|
|
129
|
+
* What a process must be able to read to exist, regardless of the jail.
|
|
130
|
+
*
|
|
131
|
+
* Deliberately a fixed compiled-in list rather than anything a caller supplies:
|
|
132
|
+
* a jail whose runtime set could be widened by the party under oversight is not
|
|
133
|
+
* a jail (SPEC.md §11.1, self-reported fields never reduce scrutiny).
|
|
134
|
+
*
|
|
135
|
+
* - `/usr/lib`, `/usr/share`, `/System`, `/Library` — dyld, the shared cache,
|
|
136
|
+
* ICU data and the frameworks every Mach-O binary links. A profile without
|
|
137
|
+
* them kills the process before `main`, which reads as the command failing
|
|
138
|
+
* rather than as the sandbox working.
|
|
139
|
+
* - `/private/var/db/dyld` and `/var/db/dyld` — the dyld shared cache, which
|
|
140
|
+
* moved out of `/usr/lib` and is opened by name.
|
|
141
|
+
* - `/dev` — `/dev/null`, `/dev/urandom`, `/dev/dtracehelper`, the tty.
|
|
142
|
+
* - `/bin`, `/usr/bin`, `/sbin`, `/usr/sbin`, `/opt/homebrew`, `/usr/local` —
|
|
143
|
+
* the interpreters and tools a build shells out to. The node binary's own
|
|
144
|
+
* realpath is added separately by {@link runtimeReadRoots}, because a Node
|
|
145
|
+
* installed by a version manager lives under the user's home and none of
|
|
146
|
+
* these covers it.
|
|
147
|
+
* - `/etc`, `/private/etc` — `resolv.conf`, `passwd`, the locale tables.
|
|
148
|
+
*
|
|
149
|
+
* `node_modules` is NOT here, and that is a stated limit rather than an
|
|
150
|
+
* oversight: a repository's dependencies live inside the repository, so they
|
|
151
|
+
* are covered by the gate root being a read root. A project whose dependencies
|
|
152
|
+
* sit OUTSIDE the root (a pnpm store elsewhere, a linked package) must name
|
|
153
|
+
* that directory in `read_scope.roots`, which is exactly the widening that key
|
|
154
|
+
* exists for. docs/sandboxed-exec.md says so beside the survey.
|
|
155
|
+
*
|
|
156
|
+
* **The temp roots are not here either**, and that one is load-bearing. They
|
|
157
|
+
* reach the profile through the CALLER — `resolveReadRoots` puts the session
|
|
158
|
+
* scratchpad and the system temp root in the effective read scope, so
|
|
159
|
+
* `approval run` and `approval sandbox` open them and build tooling keeps
|
|
160
|
+
* working — and a caller that passes narrower roots gets a narrower jail. A
|
|
161
|
+
* temp root compiled in here would have been a widening no operator could turn
|
|
162
|
+
* off and no test could demonstrate a denial against, which is how it was
|
|
163
|
+
* found.
|
|
164
|
+
*/
|
|
165
|
+
export const RUNTIME_READ_PATHS = [
|
|
166
|
+
"/usr/lib",
|
|
167
|
+
"/usr/share",
|
|
168
|
+
"/System",
|
|
169
|
+
"/Library",
|
|
170
|
+
"/private/var/db/dyld",
|
|
171
|
+
"/var/db/dyld",
|
|
172
|
+
"/dev",
|
|
173
|
+
"/bin",
|
|
174
|
+
"/sbin",
|
|
175
|
+
"/usr/bin",
|
|
176
|
+
"/usr/sbin",
|
|
177
|
+
"/usr/local",
|
|
178
|
+
"/opt/homebrew",
|
|
179
|
+
"/etc",
|
|
180
|
+
"/private/etc",
|
|
181
|
+
];
|
|
182
|
+
/**
|
|
183
|
+
* The runtime set plus this process's own interpreter.
|
|
184
|
+
*
|
|
185
|
+
* `process.execPath` is resolved because a version manager's `node` is usually
|
|
186
|
+
* a symlink, and a `subpath` rule matches what the KERNEL resolves rather than
|
|
187
|
+
* what the profile was handed (the lesson APRV-193's design lane paid for).
|
|
188
|
+
*/
|
|
189
|
+
function runtimeReadRoots() {
|
|
190
|
+
const roots = [...RUNTIME_READ_PATHS];
|
|
191
|
+
try {
|
|
192
|
+
roots.push(dirname(realpathSync(process.execPath)));
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// A process that cannot resolve its own binary is one the jail cannot help.
|
|
196
|
+
}
|
|
197
|
+
return roots;
|
|
198
|
+
}
|
|
128
199
|
// ---------------------------------------------------------------------------
|
|
129
200
|
// The credential material
|
|
130
201
|
// ---------------------------------------------------------------------------
|
|
@@ -293,6 +364,39 @@ export function seatbeltProfile(allowance) {
|
|
|
293
364
|
if (allowance.loopback) {
|
|
294
365
|
lines.push(";; Carve-out: a suite that starts its own localhost server. A real widening.", '(allow network-outbound (remote ip "localhost:*"))');
|
|
295
366
|
}
|
|
367
|
+
// APRV-347, the read jail. Emitted between the egress rules and the
|
|
368
|
+
// credential denials, and the ORDER is the policy: SBPL takes the last
|
|
369
|
+
// matching rule, so the roots open the filesystem and `denyRead` closes the
|
|
370
|
+
// credential material inside them afterwards. An empty (or absent)
|
|
371
|
+
// `allowRead` emits nothing at all, which is why a profile built without it
|
|
372
|
+
// is byte-identical to the profile this function produced before this task.
|
|
373
|
+
const allowRead = allowance.allowRead ?? [];
|
|
374
|
+
if (allowRead.length > 0) {
|
|
375
|
+
lines.push(";; APRV-347: the read jail. Deny-default, then the roots and the fixed", ";; runtime set a process needs to start at all.", "(deny file-read*)");
|
|
376
|
+
const seen = new Set();
|
|
377
|
+
for (const path of [...allowRead, ...runtimeReadRoots()]) {
|
|
378
|
+
const resolved = resolveForProfile(path);
|
|
379
|
+
if (seen.has(resolved))
|
|
380
|
+
continue;
|
|
381
|
+
seen.add(resolved);
|
|
382
|
+
lines.push(`(allow file-read* (subpath ${sbplString(resolved)}))`);
|
|
383
|
+
}
|
|
384
|
+
// The ROOT DIRECTORY needs `file-read*`, not metadata, and this was
|
|
385
|
+
// measured rather than reasoned: with every other directory a process needs
|
|
386
|
+
// opened by subpath and `/` allowed for metadata only, `/usr/bin/true`
|
|
387
|
+
// dies with SIGABRT before `main`. `/` alone, as a literal: it opens the
|
|
388
|
+
// top-level directory listing and no file in it.
|
|
389
|
+
lines.push('(allow file-read* (literal "/"))');
|
|
390
|
+
// `file-read-metadata` on every other ancestor of every allowed root:
|
|
391
|
+
// resolving a path means stat-ing each directory on the way down, and a
|
|
392
|
+
// jail that denied that would refuse `/Users/x/dev/muse` for lack of
|
|
393
|
+
// `/Users`. Metadata leaks a directory's existence, never its contents.
|
|
394
|
+
for (const ancestor of ancestorsOf([...seen])) {
|
|
395
|
+
if (ancestor === "/")
|
|
396
|
+
continue;
|
|
397
|
+
lines.push(`(allow file-read-metadata (literal ${sbplString(ancestor)}))`);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
296
400
|
for (const path of allowance.denyRead) {
|
|
297
401
|
const resolved = resolveForProfile(path);
|
|
298
402
|
// `literal` for a file, `subpath` for a directory. Both are emitted for a
|
|
@@ -312,8 +416,91 @@ export function seatbeltProfile(allowance) {
|
|
|
312
416
|
if (!file)
|
|
313
417
|
lines.push(`(deny file-read* (subpath ${sbplString(resolved)}))`);
|
|
314
418
|
}
|
|
419
|
+
if (allowance.writeAllow !== undefined) {
|
|
420
|
+
lines.push(";; APRV-325.3: write confinement. Deny-DEFAULT for this rule family only,", ";; so a path nobody thought of is denied rather than forgotten.", "(deny file-write*)", ";; /dev is process I/O, not filesystem state. Denying it kills a shell", ";; before it can do anything, for the reason a bare network-outbound deny does.", '(allow file-write* (subpath "/dev"))');
|
|
421
|
+
for (const path of allowance.writeAllow) {
|
|
422
|
+
lines.push(`(allow file-write* (subpath ${sbplString(resolveForProfile(path))}))`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
315
425
|
return `${lines.join("\n")}\n`;
|
|
316
426
|
}
|
|
427
|
+
/**
|
|
428
|
+
* The read jail, plus the directories the command being run lives in (APRV-347).
|
|
429
|
+
*
|
|
430
|
+
* You cannot run a program you may not read. `sandbox-exec` execs the RESOLVED
|
|
431
|
+
* path, so a `node` or `npm` installed outside the compiled-in runtime set — a
|
|
432
|
+
* version manager under `~`, a `.local/bin` shim — fails `execvp` with
|
|
433
|
+
* `Operation not permitted` and exits 71, which reads as the command failing
|
|
434
|
+
* rather than as the jail working.
|
|
435
|
+
*
|
|
436
|
+
* Two directories are opened: the resolved executable's own, and its PARENT.
|
|
437
|
+
* The parent is what makes a toolchain work rather than merely start: an
|
|
438
|
+
* interpreter's entry point lives at `<prefix>/bin/<name>` and the library it
|
|
439
|
+
* immediately requires lives at `<prefix>/lib` or beside it, so opening only
|
|
440
|
+
* `bin` gets a process that launches and cannot find itself. `npm` resolves to
|
|
441
|
+
* `…/lib/node_modules/npm/bin/npm-cli.js`, whose parent is the npm package, and
|
|
442
|
+
* that is the shape this rule is for.
|
|
443
|
+
*
|
|
444
|
+
* It is NOT a widening a caller chooses: it is derived from the argv this
|
|
445
|
+
* function was already given, and it does nothing at all when no jail was
|
|
446
|
+
* asked for. Anything a command needs BEYOND its own install prefix — a
|
|
447
|
+
* dependency store elsewhere, a linked package — is the operator's
|
|
448
|
+
* `read_scope.roots` to declare.
|
|
449
|
+
*/
|
|
450
|
+
function withExecutableRoots(allowance, command) {
|
|
451
|
+
const jail = allowance.allowRead ?? [];
|
|
452
|
+
if (jail.length === 0)
|
|
453
|
+
return allowance;
|
|
454
|
+
let real = command;
|
|
455
|
+
try {
|
|
456
|
+
real = realpathSync(command);
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
// Not resolvable: the caller already handles a command that is not there.
|
|
460
|
+
}
|
|
461
|
+
const own = dirname(real);
|
|
462
|
+
// `dirname(command)` as well as `dirname(real)`: a PATH entry is usually a
|
|
463
|
+
// directory of symlinks (`~/.local/bin/npm` -> a version manager's tree), and
|
|
464
|
+
// traversing the link needs the link's own directory open, not just the
|
|
465
|
+
// target's. Leaving it out fails `execvp` before the program starts.
|
|
466
|
+
const roots = [own, dirname(command)];
|
|
467
|
+
// The prefix, behind a DEPTH FLOOR. `dirname("/bin")` is `/`, and a root of
|
|
468
|
+
// `/` would open the entire filesystem — a jail that opened everything and
|
|
469
|
+
// reported nothing, which is the worst failure this file can have. Two
|
|
470
|
+
// segments, the same floor the hook applies to a scratch root and for the
|
|
471
|
+
// same reason: a value derived from somewhere else must not be able to name
|
|
472
|
+
// the root of the disk.
|
|
473
|
+
const prefix = dirname(own);
|
|
474
|
+
if (prefix.split("/").filter((segment) => segment.length > 0).length >= 2) {
|
|
475
|
+
roots.push(prefix);
|
|
476
|
+
}
|
|
477
|
+
return { ...allowance, allowRead: [...jail, ...roots] };
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Every proper ancestor directory of these paths, sorted and de-duplicated.
|
|
481
|
+
*
|
|
482
|
+
* `subpath` opens a subtree; it says nothing about the directories ABOVE it,
|
|
483
|
+
* and opening `/Users/carter/dev/muse` is useless if the process may not stat
|
|
484
|
+
* `/Users`, `/Users/carter` and `/Users/carter/dev` on the way down. Metadata
|
|
485
|
+
* only: the names of the intermediate directories leak, their contents do not.
|
|
486
|
+
*/
|
|
487
|
+
function ancestorsOf(paths) {
|
|
488
|
+
const out = new Set();
|
|
489
|
+
for (const path of paths) {
|
|
490
|
+
let at = dirname(path);
|
|
491
|
+
for (let depth = 0; depth < 64; depth += 1) {
|
|
492
|
+
if (at === "/" || at === "." || at === "")
|
|
493
|
+
break;
|
|
494
|
+
out.add(at);
|
|
495
|
+
const up = dirname(at);
|
|
496
|
+
if (up === at)
|
|
497
|
+
break;
|
|
498
|
+
at = up;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
out.add("/");
|
|
502
|
+
return [...out].sort();
|
|
503
|
+
}
|
|
317
504
|
/**
|
|
318
505
|
* A path as an SBPL string literal.
|
|
319
506
|
*
|
|
@@ -377,7 +564,9 @@ export function wrapForSandbox(mechanism, command, args, allowance = DENY_ALL_EG
|
|
|
377
564
|
}
|
|
378
565
|
const dir = mkdtempSync(join(realTmpdir(), "approval-sandbox-"));
|
|
379
566
|
const profile = join(dir, "egress-denied.sb");
|
|
380
|
-
writeFileSync(profile, seatbeltProfile(allowance), {
|
|
567
|
+
writeFileSync(profile, seatbeltProfile(withExecutableRoots(allowance, command)), {
|
|
568
|
+
mode: 0o600,
|
|
569
|
+
});
|
|
381
570
|
return {
|
|
382
571
|
command: SANDBOX_EXEC,
|
|
383
572
|
args: [...profileFlags(profile), command, ...args],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/core/sandbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/core/sandbox.ts"],"names":[],"mappings":"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"}
|