@descryy/runtime-controller 0.2.1 → 0.3.1
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/LICENSE +6 -0
- package/dist/attach-fencing.d.ts +109 -0
- package/dist/attach-fencing.d.ts.map +1 -0
- package/dist/attach-fencing.js +215 -0
- package/dist/attach-fencing.js.map +1 -0
- package/dist/capability-registry.d.ts +0 -15
- package/dist/capability-registry.d.ts.map +1 -1
- package/dist/capability-registry.js +9 -19
- package/dist/capability-registry.js.map +1 -1
- package/dist/collector-version.d.ts +1 -8
- package/dist/collector-version.d.ts.map +1 -1
- package/dist/collector-version.js +1 -8
- package/dist/collector-version.js.map +1 -1
- package/dist/container-sandbox.d.ts +66 -150
- package/dist/container-sandbox.d.ts.map +1 -1
- package/dist/container-sandbox.js +62 -143
- package/dist/container-sandbox.js.map +1 -1
- package/dist/controller.d.ts +49 -106
- package/dist/controller.d.ts.map +1 -1
- package/dist/controller.js +65 -123
- package/dist/controller.js.map +1 -1
- package/dist/dependency-version-check.d.ts +19 -73
- package/dist/dependency-version-check.d.ts.map +1 -1
- package/dist/dependency-version-check.js +18 -67
- package/dist/dependency-version-check.js.map +1 -1
- package/dist/env.d.ts +4 -10
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +4 -10
- package/dist/env.js.map +1 -1
- package/dist/environment-metadata.d.ts +9 -17
- package/dist/environment-metadata.d.ts.map +1 -1
- package/dist/environment-metadata.js +12 -29
- package/dist/environment-metadata.js.map +1 -1
- package/dist/environment-version-check.d.ts +22 -65
- package/dist/environment-version-check.d.ts.map +1 -1
- package/dist/environment-version-check.js +24 -66
- package/dist/environment-version-check.js.map +1 -1
- package/dist/execution-safety.d.ts +54 -112
- package/dist/execution-safety.d.ts.map +1 -1
- package/dist/execution-safety.js +48 -102
- package/dist/execution-safety.js.map +1 -1
- package/dist/index.d.ts +2 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestration.d.ts +24 -39
- package/dist/orchestration.d.ts.map +1 -1
- package/dist/orchestration.js +39 -75
- package/dist/orchestration.js.map +1 -1
- package/dist/process-collector.d.ts +8 -22
- package/dist/process-collector.d.ts.map +1 -1
- package/dist/process-collector.js +23 -55
- package/dist/process-collector.js.map +1 -1
- package/dist/process-manager.d.ts +65 -80
- package/dist/process-manager.d.ts.map +1 -1
- package/dist/process-manager.js +80 -103
- package/dist/process-manager.js.map +1 -1
- package/dist/readiness.d.ts +28 -70
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +73 -95
- package/dist/readiness.js.map +1 -1
- package/dist/sandbox.d.ts +60 -105
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +78 -121
- package/dist/sandbox.js.map +1 -1
- package/package.json +8 -3
package/dist/sandbox.js
CHANGED
|
@@ -1,71 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* §21's execution boundary, real isolation half
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* reading any file the invoking user could read, or reaching any host the
|
|
8
|
-
* invoking user's network could reach. This module closes that gap for
|
|
9
|
-
* real, on Linux, for processes this runtime SPAWNS.
|
|
2
|
+
* §21's execution boundary, real isolation half. RT-070/RT-193 gave this runtime a
|
|
3
|
+
* *named* boundary (trusted-local, resource limits, privilege reporting) but not an
|
|
4
|
+
* *isolating* one -- nothing stopped a spawned process from reading any file, or
|
|
5
|
+
* reaching any host, the invoking user could. This module closes that gap for real,
|
|
6
|
+
* on Linux, for processes this runtime SPAWNS.
|
|
10
7
|
*
|
|
11
|
-
* **
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* generalizable"). Spawn-mode gets real isolation via this module.
|
|
19
|
-
* Attach-mode stays permanently and explicitly unsandboxed --
|
|
20
|
-
* `SANDBOX_BOUNDARY_DISCLOSURE` in `execution-safety.ts` says so in-product,
|
|
21
|
-
* and this module does not (and structurally cannot) change that.
|
|
8
|
+
* **Architectural constraint this module cannot solve around:** isolation can only
|
|
9
|
+
* wrap a process Descry itself launches. Attach-mode reaches a process already
|
|
10
|
+
* running, unconfined, before Descry touched it -- there is no honest way to
|
|
11
|
+
* retroactively contain it (ptrace-based interception was investigated and rejected
|
|
12
|
+
* elsewhere as not honestly generalizable). Attach-mode stays permanently and
|
|
13
|
+
* explicitly unsandboxed -- `SANDBOX_BOUNDARY_DISCLOSURE` in `execution-safety.ts`
|
|
14
|
+
* discloses this in-product; this module does not and structurally cannot change it.
|
|
22
15
|
*
|
|
23
|
-
* **Mechanism: bubblewrap (bwrap), not raw `unshare`/`clone`.** bwrap is
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* `process-manager.ts` reaches it and everything it started, unchanged.
|
|
36
|
-
* The one dependency this buys: `bwrap` must be on `PATH`. Reported as a
|
|
37
|
-
* capability, exactly like `prlimit` -- refused, never silently
|
|
38
|
-
* unconstrained, when requested and absent.
|
|
16
|
+
* **Mechanism: bubblewrap (bwrap), not raw `unshare`/`clone`.** bwrap is the
|
|
17
|
+
* unprivileged sandboxing helper behind Flatpak -- small, auditable, actively
|
|
18
|
+
* maintained, not a bespoke native module this repo builds per-platform. Runs
|
|
19
|
+
* setuid-free on any kernel with unprivileged user namespaces enabled (checked
|
|
20
|
+
* below, never assumed) and gives one process a new mount namespace (real
|
|
21
|
+
* filesystem visibility control) and network namespace (real network denial) in one
|
|
22
|
+
* exec. Composes with `applyResourceLimits`'s `prlimit` wrap and with
|
|
23
|
+
* `process-manager.ts`'s process-group kill -- verified directly: bwrap does not
|
|
24
|
+
* create a new process group unless asked, so the existing group-kill reaches it
|
|
25
|
+
* unchanged. The one dependency this buys: `bwrap` must be on PATH, reported as a
|
|
26
|
+
* capability exactly like `prlimit` -- refused, never silently unconstrained, when
|
|
27
|
+
* requested and absent.
|
|
39
28
|
*
|
|
40
|
-
* **
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* Linux VM on macOS, WSL2/Docker Desktop's Windows backend on Windows) --
|
|
52
|
-
* see that module's own doc comment for exactly what is real-tested there
|
|
53
|
-
* versus unverified on real macOS/Windows hardware. `filesystemIsolationCapability`/
|
|
54
|
-
* `networkIsolationCapability` below still report `unavailable` with a
|
|
55
|
-
* reason on non-Linux platforms -- this module never silently claims to
|
|
56
|
-
* cover them; `container-sandbox.ts` is the module a non-Linux caller
|
|
57
|
-
* actually wants.
|
|
29
|
+
* **NOT attempted, deliberately: a native macOS or Windows sandbox.** `sandbox-exec`/
|
|
30
|
+
* Seatbelt is deprecated with no public API replacement; the Endpoint Security
|
|
31
|
+
* Framework needs an Apple entitlement this project doesn't have; Windows Job
|
|
32
|
+
* Objects + AppContainer + WFP would be a second and third bespoke native sandbox.
|
|
33
|
+
* This is an explicit decision not to build native sandboxes for those platforms at
|
|
34
|
+
* all -- `../container-sandbox.ts` closes the gap instead, routing macOS/Windows
|
|
35
|
+
* through a real Docker container that reuses this module's proven Linux mechanism
|
|
36
|
+
* (see that module's doc for what's real-tested there vs unverified on real
|
|
37
|
+
* hardware). `filesystemIsolationCapability`/`networkIsolationCapability` below
|
|
38
|
+
* still report `unavailable` with a reason on non-Linux -- never silently claimed
|
|
39
|
+
* as covered.
|
|
58
40
|
*/
|
|
59
41
|
import { execFileSync } from "node:child_process";
|
|
60
42
|
import { accessSync, constants as fsConstants, readFileSync, realpathSync } from "node:fs";
|
|
61
43
|
import { dirname, isAbsolute, join, relative } from "node:path";
|
|
62
44
|
/**
|
|
63
|
-
* Whether unprivileged user namespaces -- the kernel feature bwrap needs to
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
45
|
+
* Whether unprivileged user namespaces -- the kernel feature bwrap needs to build a
|
|
46
|
+
* mount/network namespace without running setuid-root -- are actually enabled on
|
|
47
|
+
* this host, never merely assumed from "the kernel supports namespaces in general."
|
|
48
|
+
* Two independent sysctls can each disable it. IMPORTANT: a sysctl file not existing
|
|
49
|
+
* is NOT evidence it's unrestricted -- only Debian/Ubuntu-derived kernels gate it
|
|
50
|
+
* through `unprivileged_userns_clone` at all, so a missing file proves nothing
|
|
51
|
+
* either way. We can't tell from absence, so we don't read it as a positive signal:
|
|
52
|
+
* `ok: true` here means "neither sysctl was found to explicitly disable it," not
|
|
53
|
+
* "isolation is confirmed available" -- it only rules out these two specific,
|
|
54
|
+
* explicit-disable signals.
|
|
69
55
|
*/
|
|
70
56
|
function unprivilegedUserNamespaceStatus() {
|
|
71
57
|
try {
|
|
@@ -75,8 +61,7 @@ function unprivilegedUserNamespaceStatus() {
|
|
|
75
61
|
}
|
|
76
62
|
}
|
|
77
63
|
catch {
|
|
78
|
-
// Sysctl
|
|
79
|
-
// only Debian/Ubuntu-derived kernels gate it through this specific file.
|
|
64
|
+
// Sysctl absent -- not evidence either way, not just non-Debian kernels.
|
|
80
65
|
}
|
|
81
66
|
try {
|
|
82
67
|
const max = readFileSync("/proc/sys/user/max_user_namespaces", "utf8").trim();
|
|
@@ -85,17 +70,11 @@ function unprivilegedUserNamespaceStatus() {
|
|
|
85
70
|
}
|
|
86
71
|
}
|
|
87
72
|
catch {
|
|
88
|
-
// Same reasoning.
|
|
73
|
+
// Same reasoning: absent is not evidence of a restriction.
|
|
89
74
|
}
|
|
90
75
|
return { ok: true, reason: null };
|
|
91
76
|
}
|
|
92
|
-
/**
|
|
93
|
-
* Real capability check, matching `resourceLimitCapability`'s own shape and
|
|
94
|
-
* precedent exactly: existence on `PATH` first (fast, matches
|
|
95
|
-
* `prlimit --version`'s pattern), then the one Linux-specific precondition
|
|
96
|
-
* that existence alone doesn't prove -- unprivileged user namespaces
|
|
97
|
-
* actually being usable, not just bwrap being installed.
|
|
98
|
-
*/
|
|
77
|
+
/** Real capability check, same shape as `resourceLimitCapability`: PATH existence first, then the Linux-specific precondition existence alone doesn't prove -- unprivileged user namespaces actually usable, not just bwrap installed. */
|
|
99
78
|
export function filesystemIsolationCapability(env = process.env, platform = process.platform) {
|
|
100
79
|
if (platform !== "linux") {
|
|
101
80
|
return {
|
|
@@ -118,27 +97,16 @@ export function filesystemIsolationCapability(env = process.env, platform = proc
|
|
|
118
97
|
}
|
|
119
98
|
return { availability: "available", reason: null };
|
|
120
99
|
}
|
|
121
|
-
/**
|
|
122
|
-
* The same underlying mechanism as `filesystemIsolationCapability` --
|
|
123
|
-
* bwrap building one namespace set covers both a restricted mount view and
|
|
124
|
-
* a network namespace in the same exec -- so this delegates rather than
|
|
125
|
-
* duplicating the check. Kept as its own named function because the two
|
|
126
|
-
* policies are declared, refused, and reasoned about independently
|
|
127
|
-
* (`NetworkPolicy` only supports one shape; see `unsupportedNetworkPolicyReason`),
|
|
128
|
-
* even though today they share one mechanism underneath.
|
|
129
|
-
*/
|
|
100
|
+
/** Same underlying mechanism as `filesystemIsolationCapability` (one bwrap namespace set covers both) -- delegates rather than duplicating. Kept as its own function because the two policies are declared and reasoned about independently. */
|
|
130
101
|
export function networkIsolationCapability(env = process.env, platform = process.platform) {
|
|
131
102
|
return filesystemIsolationCapability(env, platform);
|
|
132
103
|
}
|
|
133
104
|
/**
|
|
134
|
-
* `NetworkPolicy`'s general shape (arbitrary allow/deny host lists) is not
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* itself is otherwise available, and the two refusals are different
|
|
140
|
-
* claims ("nothing here can enforce any network policy" vs. "this specific
|
|
141
|
-
* policy asks for something the real mechanism doesn't do yet").
|
|
105
|
+
* `NetworkPolicy`'s general shape (arbitrary allow/deny host lists) is not what
|
|
106
|
+
* this mechanism enforces -- only full denial. Returns the reason a policy can't be
|
|
107
|
+
* applied, or `null` if it's the one shape that can. Checked independently of
|
|
108
|
+
* `networkIsolationCapability`: "nothing here can enforce any policy" and "this
|
|
109
|
+
* specific policy asks for something not built yet" are different claims.
|
|
142
110
|
*/
|
|
143
111
|
export function unsupportedNetworkPolicyReason(policy) {
|
|
144
112
|
if (policy.mode === "allow" && policy.hosts.length === 0)
|
|
@@ -153,17 +121,12 @@ function isWithin(root, target) {
|
|
|
153
121
|
}
|
|
154
122
|
/**
|
|
155
123
|
* Resolves the real, symlink-followed directory containing the executable
|
|
156
|
-
* `command` would run as -- the one
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* is, which is exactly the kind of per-language special case §IR-boundary
|
|
163
|
-
* rules out. Returns `null` when `command` cannot be resolved (already
|
|
164
|
-
* absolute-looking and missing, or not found on `PATH`) -- the caller
|
|
165
|
-
* proceeds without an extra bind in that case; the exec itself will fail
|
|
166
|
-
* inside the sandbox the same honest way it would outside one.
|
|
124
|
+
* `command` would run as -- the one extra host path a sandboxed process needs
|
|
125
|
+
* beyond standard OS dirs and whatever the caller declared. Computed generically,
|
|
126
|
+
* not per-language: an interpreter installed outside `/usr` (nvm, rbenv, pyenv,
|
|
127
|
+
* sdkman) would otherwise be invisible inside the sandbox regardless of language.
|
|
128
|
+
* Returns `null` when unresolvable -- the caller proceeds without an extra bind;
|
|
129
|
+
* the exec fails inside the sandbox the same honest way it would outside one.
|
|
167
130
|
*/
|
|
168
131
|
export function resolveExecutableDirectory(command, cwd, env) {
|
|
169
132
|
let candidate = null;
|
|
@@ -196,23 +159,18 @@ export function resolveExecutableDirectory(command, cwd, env) {
|
|
|
196
159
|
}
|
|
197
160
|
}
|
|
198
161
|
/**
|
|
199
|
-
* Wraps `command`/`args` with `bwrap` so the OS enforces `filesystemPolicy
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
* before unless it opts in, the same non-regression contract
|
|
203
|
-
* `applyResourceLimits` already established for resource limits.
|
|
162
|
+
* Wraps `command`/`args` with `bwrap` so the OS enforces `filesystemPolicy`/
|
|
163
|
+
* `networkPolicy`. Neither declared returns them unchanged -- same non-regression
|
|
164
|
+
* contract as `applyResourceLimits`.
|
|
204
165
|
*
|
|
205
|
-
* **Throws rather than silently spawning unconstrained**
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
* platform has no mechanism at all or because the declared shape is one
|
|
209
|
-
* this mechanism doesn't implement (`unsupportedNetworkPolicyReason`).
|
|
166
|
+
* **Throws rather than silently spawning unconstrained** when a policy is
|
|
167
|
+
* requested and the real mechanism can't back it -- no mechanism on this platform,
|
|
168
|
+
* or a declared shape this mechanism doesn't implement.
|
|
210
169
|
*
|
|
211
|
-
* Composes with `applyResourceLimits
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* every sandboxed process gets.
|
|
170
|
+
* Composes with `applyResourceLimits` by wrapping *outside* it (`bwrap … --
|
|
171
|
+
* prlimit … -- realCommand`) -- the mount namespace must exist before `prlimit` or
|
|
172
|
+
* the real command run inside it; `prlimit` (in `/usr/bin`) is reachable through
|
|
173
|
+
* the same base OS binding every sandboxed process gets.
|
|
216
174
|
*/
|
|
217
175
|
export function applySandbox(options) {
|
|
218
176
|
const { filesystemPolicy, networkPolicy } = options;
|
|
@@ -250,21 +208,20 @@ export function applySandbox(options) {
|
|
|
250
208
|
}
|
|
251
209
|
}
|
|
252
210
|
else {
|
|
253
|
-
// No filesystem restriction declared -- mirror the host root exactly
|
|
254
|
-
//
|
|
255
|
-
//
|
|
256
|
-
//
|
|
257
|
-
//
|
|
258
|
-
// recursive and would otherwise leave them looking empty inside.
|
|
211
|
+
// No filesystem restriction declared -- mirror the host root exactly (matches
|
|
212
|
+
// FilesystemPolicy's "absent means unconstrained" default). A mount namespace
|
|
213
|
+
// is still created (bwrap always builds one; --unshare-net below needs it), so
|
|
214
|
+
// /proc, /dev, /tmp are remounted explicitly -- a plain `--bind / /` is not
|
|
215
|
+
// recursive and would leave them looking empty inside otherwise.
|
|
259
216
|
bwrapArgs.push("--bind", "/", "/", "--dev", "/dev", "--proc", "/proc", "--bind", "/tmp", "/tmp");
|
|
260
217
|
}
|
|
261
218
|
bwrapArgs.push("--chdir", options.cwd);
|
|
262
219
|
if (networkPolicy !== undefined) {
|
|
263
220
|
bwrapArgs.push("--unshare-net");
|
|
264
221
|
}
|
|
265
|
-
// Kills the sandboxed tree
|
|
266
|
-
//
|
|
267
|
-
//
|
|
222
|
+
// Kills the sandboxed tree if bwrap's parent (this Node process) dies
|
|
223
|
+
// unexpectedly -- a second, independent backstop alongside process-manager.ts's
|
|
224
|
+
// group-kill, not a replacement for it.
|
|
268
225
|
bwrapArgs.push("--die-with-parent", "--", options.command, ...options.args);
|
|
269
226
|
return { command: "bwrap", args: bwrapArgs };
|
|
270
227
|
}
|
package/dist/sandbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descryy/runtime-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "Runtime controller: process manager, readiness, timeout/cancellation, execution IDs, cleanup. Deliverable 2 of the runtime phase
|
|
5
|
+
"description": "Runtime controller: process manager, readiness, timeout/cancellation, execution IDs, cleanup. Deliverable 2 of the runtime phase — depends on @descryy/runtime-contracts, builds no collectors.",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/descryhq-wq/descry-runtime.git",
|
|
10
|
+
"directory": "packages/controller"
|
|
11
|
+
},
|
|
7
12
|
"engines": {
|
|
8
13
|
"node": ">=22.5"
|
|
9
14
|
},
|
|
@@ -24,6 +29,6 @@
|
|
|
24
29
|
"build": "tsc -b"
|
|
25
30
|
},
|
|
26
31
|
"dependencies": {
|
|
27
|
-
"@descryy/runtime-contracts": "0.
|
|
32
|
+
"@descryy/runtime-contracts": "0.3.1"
|
|
28
33
|
}
|
|
29
34
|
}
|