@calltelemetry/ct-lab-mcp 0.8.97 → 0.8.99

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.
Files changed (75) hide show
  1. package/README.md +22 -0
  2. package/assets/stig/SHA256SUMS +18 -0
  3. package/assets/stig/files/ct-luks-firstboot.service +13 -0
  4. package/assets/stig/files/ct-luks-firstboot.sh +35 -0
  5. package/assets/stig/guest/keyhash.sh +4 -0
  6. package/assets/stig/guest/read-recovery.sh +2 -0
  7. package/assets/stig/guest/scan-disa.sh +17 -0
  8. package/assets/stig/guest/scan.sh +22 -0
  9. package/assets/stig/guest/shred-recovery.sh +2 -0
  10. package/assets/stig/guest/test-recovery.sh +3 -0
  11. package/assets/stig/guest/trim.sh +3 -0
  12. package/assets/stig/guest/verify-root.sh +9 -0
  13. package/assets/stig/guest/verify-user.sh +9 -0
  14. package/assets/stig/ks.cfg.pkrtpl +95 -0
  15. package/assets/stig/scripts/assess.sh +39 -0
  16. package/assets/stig/scripts/errata.sh +19 -0
  17. package/assets/stig/scripts/remediate.sh +127 -0
  18. package/assets/stig/scripts/seal.sh +46 -0
  19. package/assets/stig/tailoring.xml +16 -0
  20. package/assets/stig/template.pkr.hcl +252 -0
  21. package/dist/src/credentials/index.d.ts +1 -0
  22. package/dist/src/credentials/index.d.ts.map +1 -1
  23. package/dist/src/credentials/index.js +1 -0
  24. package/dist/src/credentials/index.js.map +1 -1
  25. package/dist/src/credentials/remediation.d.ts +33 -0
  26. package/dist/src/credentials/remediation.d.ts.map +1 -0
  27. package/dist/src/credentials/remediation.js +105 -0
  28. package/dist/src/credentials/remediation.js.map +1 -0
  29. package/dist/src/generated-version.d.ts +1 -1
  30. package/dist/src/generated-version.js +1 -1
  31. package/dist/src/stig/live.d.ts +116 -0
  32. package/dist/src/stig/live.d.ts.map +1 -0
  33. package/dist/src/stig/live.js +339 -0
  34. package/dist/src/stig/live.js.map +1 -0
  35. package/dist/src/stig/model.d.ts +160 -0
  36. package/dist/src/stig/model.d.ts.map +1 -0
  37. package/dist/src/stig/model.js +384 -0
  38. package/dist/src/stig/model.js.map +1 -0
  39. package/dist/src/stig/ports.d.ts +149 -0
  40. package/dist/src/stig/ports.d.ts.map +1 -0
  41. package/dist/src/stig/ports.js +7 -0
  42. package/dist/src/stig/ports.js.map +1 -0
  43. package/dist/src/stig/receipt.d.ts +35 -0
  44. package/dist/src/stig/receipt.d.ts.map +1 -0
  45. package/dist/src/stig/receipt.js +112 -0
  46. package/dist/src/stig/receipt.js.map +1 -0
  47. package/dist/src/stig/runner.d.ts +109 -0
  48. package/dist/src/stig/runner.d.ts.map +1 -0
  49. package/dist/src/stig/runner.js +471 -0
  50. package/dist/src/stig/runner.js.map +1 -0
  51. package/dist/src/tools/appliance-claim-spec-schema.v1.json +1 -1
  52. package/dist/src/tools/appliance-claim-tools.d.ts +10 -4
  53. package/dist/src/tools/appliance-claim-tools.d.ts.map +1 -1
  54. package/dist/src/tools/appliance-claim-tools.js +10 -2
  55. package/dist/src/tools/appliance-claim-tools.js.map +1 -1
  56. package/dist/src/tools/claim-creation-projection.d.ts +1 -1
  57. package/dist/src/tools/claim-creation-projection.js +1 -1
  58. package/dist/src/tools/claim-custody.d.ts +7 -7
  59. package/dist/src/tools/claimed-import-qcow.d.ts +2 -2
  60. package/dist/src/tools/credential-status.d.ts.map +1 -1
  61. package/dist/src/tools/credential-status.js +19 -0
  62. package/dist/src/tools/credential-status.js.map +1 -1
  63. package/dist/src/tools/host-maintenance-shutdown.d.ts +4 -4
  64. package/dist/src/tools/host-migrate-vm.d.ts +4 -4
  65. package/dist/src/tools/index.d.ts.map +1 -1
  66. package/dist/src/tools/index.js +6 -1
  67. package/dist/src/tools/index.js.map +1 -1
  68. package/dist/src/tools/purge-slots.d.ts +1 -1
  69. package/dist/src/tools/sandbox-tools.d.ts +8 -8
  70. package/dist/src/tools/stig-tools.d.ts +47 -0
  71. package/dist/src/tools/stig-tools.d.ts.map +1 -0
  72. package/dist/src/tools/stig-tools.js +125 -0
  73. package/dist/src/tools/stig-tools.js.map +1 -0
  74. package/dist/src/tools/vm-action.d.ts +2 -2
  75. package/package.json +2 -1
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Live adapters for the STIG runner ports: root SSH to Proxmox (`qm`), SSH to the clone, Doppler CLI, Packer,
3
+ * the guarded ApplianceClaim tools, and key material. These are the only STIG code that touches the lab.
4
+ *
5
+ * Nothing here logs a secret: stdin carries passwords and hashes, argv carries only public values, and Doppler
6
+ * mutations discard the CLI's output (it prints cleartext).
7
+ */
8
+ import { execFile, spawn } from "node:child_process";
9
+ import { createWriteStream, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync, chmodSync } from "node:fs";
10
+ import { tmpdir } from "node:os";
11
+ import { pbkdf2Sync, randomBytes } from "node:crypto";
12
+ import { dirname, join, resolve } from "node:path";
13
+ import { fileURLToPath } from "node:url";
14
+ import { promisify } from "node:util";
15
+ import { redact } from "./model.js";
16
+ import { handleCreateApplianceClaim, handleDeleteApplianceClaim, handleGetApplianceClaim, handlePauseApplianceClaim, handleRenewApplianceClaim, queryKubernetesApi, } from "../tools/appliance-claim-tools.js";
17
+ import { awaitClaimReconciled } from "../tools/claim-reconcile-gate.js";
18
+ import { runLabKubectl } from "../tools/kubernetes-backend.js";
19
+ const execFileP = promisify(execFile);
20
+ const here = dirname(fileURLToPath(import.meta.url));
21
+ /** assets/stig next to dist/src/stig (published) or next to src/stig (dev). */
22
+ export function defaultAssetsDir() {
23
+ for (const rel of ["../../../assets/stig", "../../assets/stig"]) {
24
+ const p = resolve(here, rel);
25
+ if (existsSync(join(p, "SHA256SUMS")))
26
+ return p;
27
+ }
28
+ throw new Error("STIG recipe assets (assets/stig) not found");
29
+ }
30
+ const shq = (s) => `'${s.replace(/'/g, `'\\''`)}'`;
31
+ function run(file, args, opts = {}) {
32
+ return new Promise((resolveP) => {
33
+ const child = spawn(file, args, { env: opts.env ?? process.env, stdio: ["pipe", "pipe", "pipe"] });
34
+ let stdout = "";
35
+ let stderr = "";
36
+ let settled = false;
37
+ const finish = (code) => { if (!settled) {
38
+ settled = true;
39
+ clearTimeout(timer);
40
+ resolveP({ code, stdout, stderr });
41
+ } };
42
+ const timer = setTimeout(() => { child.kill("SIGKILL"); finish(124); }, opts.timeoutMs ?? 120_000);
43
+ child.stdout.on("data", (d) => { stdout += d; });
44
+ child.stderr.on("data", (d) => { stderr += d; });
45
+ child.on("error", (e) => { stderr += String(e.message); finish(127); });
46
+ child.on("close", (code) => finish(code ?? 1));
47
+ if (opts.stdin !== undefined)
48
+ child.stdin.end(opts.stdin);
49
+ else
50
+ child.stdin.end();
51
+ });
52
+ }
53
+ export class SshPveShell {
54
+ host;
55
+ user;
56
+ constructor(host = process.env.CT_LAB_STIG_PVE_HOST ?? "192.168.123.178", user = "root") {
57
+ this.host = host;
58
+ this.user = user;
59
+ }
60
+ run(script, opts) {
61
+ // The script is one quoted argument so stdin stays free for data (a password hash).
62
+ return run("ssh", ["-o", "BatchMode=yes", "-o", "ConnectTimeout=10", `${this.user}@${this.host}`, `bash -c ${shq(script)}`], opts);
63
+ }
64
+ }
65
+ export class SshGuestShell {
66
+ user = "ctadmin";
67
+ keyFile = "";
68
+ known = "";
69
+ ip = "";
70
+ configure(cfg) { this.user = cfg.user; this.keyFile = cfg.keyFile; this.known = cfg.knownHostsFile; }
71
+ setTarget(ip) { this.ip = ip; }
72
+ opts(hostKey) {
73
+ return ["-i", this.keyFile, "-o", "BatchMode=yes", "-o", "IdentitiesOnly=yes", "-o", "PasswordAuthentication=no",
74
+ "-o", `UserKnownHostsFile=${this.known}`, "-o", "ConnectTimeout=10", "-o", "LogLevel=ERROR", "-o", `StrictHostKeyChecking=${hostKey}`];
75
+ }
76
+ ssh(command, o, hostKey = "yes") {
77
+ return run("ssh", [...this.opts(hostKey), `${this.user}@${this.ip}`, command], o);
78
+ }
79
+ async runScript(script, o) {
80
+ if (!o?.sudo)
81
+ return this.ssh("bash -s", { stdin: script, timeoutMs: o?.timeoutMs });
82
+ // Upload the script, then run it under sudo with the password (plus any extra data) on stdin.
83
+ const path = `/var/tmp/ct-stig-${randomBytes(6).toString("hex")}.sh`;
84
+ const up = await this.ssh(`umask 077; cat > ${path}`, { stdin: script });
85
+ if (up.code !== 0)
86
+ return up;
87
+ return this.ssh(`sudo -S -p '' bash -c ${shq(`bash ${path}; rc=$?; rm -f ${path}; exit $rc`)}`, { stdin: o.stdin ?? "", timeoutMs: o.timeoutMs });
88
+ }
89
+ async waitSsh(hostKey, tries, intervalMs = 10_000) {
90
+ for (let n = 0; n < tries; n++) {
91
+ if ((await this.ssh("true", { timeoutMs: 20_000 }, hostKey)).code === 0)
92
+ return true;
93
+ await new Promise((r) => setTimeout(r, intervalMs));
94
+ }
95
+ return false;
96
+ }
97
+ async fileExists(path) { return (await this.ssh(`test -f ${shq(path)}`)).code === 0; }
98
+ async fetchDir(remote, localDir) {
99
+ mkdirSync(localDir, { recursive: true });
100
+ const r = await run("scp", ["-q", "-r", ...this.opts("yes"), `${this.user}@${this.ip}:${remote}/.`, localDir], { timeoutMs: 300_000 });
101
+ if (r.code !== 0)
102
+ throw new Error(`scp failed: ${redact(r.stderr).slice(0, 200)}`);
103
+ }
104
+ }
105
+ export class DopplerSecrets {
106
+ project;
107
+ config;
108
+ constructor(project = process.env.DOPPLER_PROJECT ?? "ai-workspace", config = process.env.DOPPLER_CONFIG ?? "dev") {
109
+ this.project = project;
110
+ this.config = config;
111
+ }
112
+ async get(name) {
113
+ if (!/^[A-Z][A-Z0-9_]{2,127}$/.test(name))
114
+ throw new Error("invalid secret name");
115
+ const r = await run("doppler", ["secrets", "get", name, "--project", this.project, "--config", this.config, "--plain"]);
116
+ return r.code === 0 && r.stdout.length > 0 ? r.stdout.replace(/\n$/, "") : undefined;
117
+ }
118
+ async set(name, value) {
119
+ if (!/^[A-Z][A-Z0-9_]{2,127}$/.test(name))
120
+ throw new Error("invalid secret name");
121
+ // Value on stdin (not argv); the CLI echoes cleartext, so its output is discarded unread.
122
+ await new Promise((resolveP, reject) => {
123
+ const child = spawn("doppler", ["secrets", "set", name, "--project", this.project, "--config", this.config], { stdio: ["pipe", "ignore", "ignore"] });
124
+ child.on("error", reject);
125
+ child.on("close", (code) => (code === 0 ? resolveP() : reject(new Error(`doppler secrets set ${name} failed`))));
126
+ child.stdin.end(value);
127
+ });
128
+ }
129
+ }
130
+ export class LabClaims {
131
+ ns = "ct-lab";
132
+ text(result) {
133
+ const block = result?.content?.[0];
134
+ return block?.type === "text" ? JSON.parse(block.text) : null;
135
+ }
136
+ async list() {
137
+ const api = await queryKubernetesApi(`/apis/calltelemetry.com/v1alpha1/namespaces/${this.ns}/applianceclaims`);
138
+ if (api?.items)
139
+ return api.items;
140
+ return JSON.parse((await runLabKubectl(["get", "applianceclaims", "-n", this.ns, "-o", "json"])).stdout).items ?? [];
141
+ }
142
+ async get(name) {
143
+ const r = await handleGetApplianceClaim({ name, namespace: this.ns });
144
+ return r.isError ? null : (this.text(r)?.claim ?? null);
145
+ }
146
+ async create(a) {
147
+ const r = await handleCreateApplianceClaim({ name: a.name, vmid: a.vmid, vmName: a.vmName, node: "minis", profile: "bare", ttlHours: a.ttlHours, stig: a.stig });
148
+ if (r.isError)
149
+ throw new Error(`claim creation failed: ${r.content?.[0]?.text ?? "unknown"}`);
150
+ return this.text(r).claim;
151
+ }
152
+ async waitReady(name) {
153
+ const out = await awaitClaimReconciled(name, this.ns);
154
+ if (!out.reconciled)
155
+ throw new Error(`claim ${name} did not reach Ready (${out.detail}); no guest was touched`);
156
+ return (await this.get(name));
157
+ }
158
+ async annotate(name, annotations) {
159
+ const body = { metadata: { annotations } };
160
+ const path = `/apis/calltelemetry.com/v1alpha1/namespaces/${this.ns}/applianceclaims/${name}`;
161
+ const patched = await queryKubernetesApi(path, { method: "PATCH", body });
162
+ if (!patched)
163
+ await runLabKubectl(["patch", "applianceclaim", name, "-n", this.ns, "--type=merge", "-p", JSON.stringify(body)]);
164
+ }
165
+ async renew(name, extendHours) {
166
+ const r = await handleRenewApplianceClaim({ name, namespace: this.ns, extendHours, dryRun: false });
167
+ if (r.isError)
168
+ throw new Error(`claim renew failed: ${r.content?.[0]?.text ?? "unknown"}`);
169
+ return { ttlHours: this.text(r).ttlHours };
170
+ }
171
+ async pause(name, paused, reason) {
172
+ const r = await handlePauseApplianceClaim({ name, namespace: this.ns, paused, pausedReason: reason });
173
+ if (r.isError)
174
+ throw new Error(`claim pause failed: ${r.content?.[0]?.text ?? "unknown"}`);
175
+ }
176
+ async delete(name, expectedUid) {
177
+ const r = await handleDeleteApplianceClaim({ name, namespace: this.ns, expectedUid });
178
+ if (r.isError)
179
+ throw new Error(`claim delete failed: ${r.content?.[0]?.text ?? "unknown"}`);
180
+ }
181
+ }
182
+ export class PackerCli {
183
+ cwd;
184
+ pluginPath;
185
+ constructor(cwd, pluginPath = process.env.CT_LAB_STIG_PACKER_PLUGIN_PATH) {
186
+ this.cwd = cwd;
187
+ this.pluginPath = pluginPath;
188
+ }
189
+ async version() {
190
+ const r = await run("packer", ["version"], { timeoutMs: 20_000 });
191
+ const m = /Packer v(\d+\.\d+\.\d+)/.exec(r.stdout);
192
+ if (!m)
193
+ throw new Error("packer is not installed or its version is unreadable");
194
+ return m[1];
195
+ }
196
+ build(a) {
197
+ const args = ["build", "-on-error=abort", ...Object.entries(a.vars).flatMap(([k, v]) => ["-var", `${k}=${v}`]), "template.pkr.hcl"];
198
+ const env = { ...process.env, ...a.env, ...(this.pluginPath ? { PACKER_PLUGIN_PATH: this.pluginPath } : {}), PACKER_NO_COLOR: "1" };
199
+ return new Promise((resolveP) => {
200
+ const log = createWriteStream(a.logFile, { flags: "a", mode: 0o600 });
201
+ const child = spawn("packer", args, { cwd: this.cwd, env, stdio: ["ignore", "pipe", "pipe"] });
202
+ child.stdout.pipe(log, { end: false });
203
+ child.stderr.pipe(log, { end: false });
204
+ child.on("error", () => { log.end(); resolveP(127); });
205
+ child.on("close", (code) => { log.end(); resolveP(code ?? 1); });
206
+ });
207
+ }
208
+ }
209
+ export class NodeMaterials {
210
+ openssl() {
211
+ if (process.env.OPENSSL_BIN)
212
+ return process.env.OPENSSL_BIN;
213
+ return existsSync("/opt/homebrew/opt/openssl@3/bin/openssl") ? "/opt/homebrew/opt/openssl@3/bin/openssl" : "openssl";
214
+ }
215
+ randomAlnum(length) {
216
+ let out = "";
217
+ while (out.length < length)
218
+ out += randomBytes(48).toString("base64").replace(/[^A-Za-z0-9]/g, "");
219
+ return out.slice(0, length);
220
+ }
221
+ async sha512Crypt(plain) {
222
+ const r = await run(this.openssl(), ["passwd", "-6", "-stdin"], { stdin: plain });
223
+ if (r.code !== 0 || !r.stdout.startsWith("$6$"))
224
+ throw new Error("OpenSSL 3 sha512-crypt failed");
225
+ return r.stdout.trim();
226
+ }
227
+ async sshKeypair(dir, label) {
228
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
229
+ const file = join(dir, "id_key");
230
+ for (const f of [file, `${file}.pub`])
231
+ if (existsSync(f))
232
+ (await execFileP("rm", ["-f", f]));
233
+ await execFileP("ssh-keygen", ["-q", "-t", "ecdsa", "-b", "256", "-N", "", "-C", label, "-f", file]); // ed25519 is rejected in FIPS mode
234
+ return { privateKeyFile: file, publicKey: readFileSync(`${file}.pub`, "utf8").trim() };
235
+ }
236
+ async buildMaterial(runDir, label) {
237
+ const key = await this.sshKeypair(runDir, `ctbuild-${label}`);
238
+ const stripped = (n) => randomBytes(n).toString("base64").replace(/[\n/+=]/g, "");
239
+ const buildPassword = stripped(30);
240
+ const grubPassword = stripped(30);
241
+ const luksBootstrap = stripped(40);
242
+ for (const [f, v] of [["build_password", buildPassword], ["grub_password", grubPassword], ["luks_bootstrap", luksBootstrap]]) {
243
+ writeFileSync(join(runDir, f), v, { mode: 0o600 });
244
+ chmodSync(join(runDir, f), 0o600);
245
+ }
246
+ const salt = randomBytes(64);
247
+ const dk = pbkdf2Sync(Buffer.from(grubPassword), salt, 10000, 64, "sha512");
248
+ return {
249
+ sshPrivateKeyFile: key.privateKeyFile, sshPublicKey: key.publicKey, buildPassword, luksBootstrap,
250
+ buildPasswordHash: await this.sha512Crypt(buildPassword),
251
+ grubPbkdf2: `grub.pbkdf2.sha512.10000.${salt.toString("hex").toUpperCase()}.${dk.toString("hex").toUpperCase()}`,
252
+ };
253
+ }
254
+ }
255
+ /**
256
+ * Canonical provider: the `lab-inventory stig` verbs (plan, then apply with the plan digest). Secrets travel in 0600
257
+ * files inside a private temp directory that is removed afterwards; argv carries only public values.
258
+ */
259
+ export class CliStigProvider {
260
+ cli;
261
+ exec;
262
+ tmpRoot;
263
+ constructor(cli, exec = run, tmpRoot = tmpdir()) {
264
+ this.cli = cli;
265
+ this.exec = exec;
266
+ this.tmpRoot = tmpRoot;
267
+ }
268
+ async call(args, timeoutMs = 120_000) {
269
+ const r = await this.exec(this.cli, args, { timeoutMs });
270
+ let json = null;
271
+ try {
272
+ json = JSON.parse(r.stdout);
273
+ }
274
+ catch { /* not JSON */ }
275
+ if (r.code !== 0) {
276
+ const why = json?.blocking_reasons?.length ? json.blocking_reasons.join(", ") : redact(r.stderr || r.stdout).slice(0, 300);
277
+ throw new Error(`lab-inventory ${args.slice(0, 2).join(" ")} refused or failed: ${why}`);
278
+ }
279
+ return json;
280
+ }
281
+ async clone(a) {
282
+ const dir = mkdtempSync(join(this.tmpRoot, "stig-cli-"));
283
+ chmodSync(dir, 0o700);
284
+ try {
285
+ const keyFile = join(dir, "key.pub");
286
+ const hashFile = join(dir, "hash");
287
+ writeFileSync(keyFile, a.sshPublicKey, { mode: 0o600 });
288
+ writeFileSync(hashFile, a.passwordHash, { mode: 0o600 });
289
+ const base = ["stig", "clone", "--operation-id", a.operationId, "--name", a.name, "--template-name", a.templateName,
290
+ "--ssh-key-file", keyFile, "--password-hash-file", hashFile, "--vmid", String(a.vmid),
291
+ ...a.dns.flatMap((d) => ["--dns", d]), ...a.claimedVmids.flatMap((v) => ["--claimed-vmid", String(v)])];
292
+ const plan = await this.call(base);
293
+ if (!plan?.eligible || !plan.plan_digest)
294
+ throw new Error(`lab-inventory stig clone plan is not eligible: ${(plan?.blocking_reasons ?? []).join(", ")}`);
295
+ const receipt = await this.call([...base, "--apply", "--confirm-name", a.name, "--plan-digest", plan.plan_digest], 1_800_000);
296
+ if (receipt?.status !== "completed" || receipt.vmid !== a.vmid)
297
+ throw new Error("lab-inventory stig clone did not report the planned VMID as completed");
298
+ return { vmid: receipt.vmid };
299
+ }
300
+ finally {
301
+ rmSync(dir, { recursive: true, force: true });
302
+ }
303
+ }
304
+ async destroyTemplate(a) {
305
+ const base = ["stig", "destroy-template", "--operation-id", a.operationId, "--name", a.name, "--vmid", String(a.vmid)];
306
+ const plan = await this.call(base);
307
+ if (!plan?.eligible || !plan.plan_digest)
308
+ throw new Error(`lab-inventory stig destroy-template plan is not eligible: ${(plan?.blocking_reasons ?? []).join(", ")}`);
309
+ const receipt = await this.call([...base, "--apply", "--confirm-name", a.name, "--plan-digest", plan.plan_digest], 600_000);
310
+ if (receipt?.status !== "completed")
311
+ throw new Error("lab-inventory stig destroy-template did not complete");
312
+ }
313
+ async guestIp(vmid) {
314
+ const out = await this.call(["stig", "guest-ip", "--vmid", String(vmid), "--timeout", "20"], 60_000);
315
+ return typeof out?.ipv4 === "string" ? out.ipv4 : "";
316
+ }
317
+ }
318
+ export function defaultRunDir() {
319
+ return process.env.CT_LAB_STIG_RUN_DIR ?? join(process.env.HOME ?? ".", ".ct-lab-stig");
320
+ }
321
+ /** The lab-inventory CLI path when the canonical bridge is configured (CT_LAB_CANONICAL_CLI). */
322
+ export function canonicalCli(env = process.env) {
323
+ const p = env.CT_LAB_CANONICAL_CLI?.trim();
324
+ return p && existsSync(p) ? p : undefined;
325
+ }
326
+ export function liveDeps(opts = {}) {
327
+ const assetsDir = defaultAssetsDir();
328
+ const baseDir = opts.baseDir ?? defaultRunDir();
329
+ mkdirSync(baseDir, { recursive: true, mode: 0o700 });
330
+ return {
331
+ provider: canonicalCli() ? new CliStigProvider(canonicalCli()) : undefined,
332
+ pve: new SshPveShell(), guest: new SshGuestShell(), secrets: new DopplerSecrets(), claims: new LabClaims(),
333
+ packer: new PackerCli(assetsDir), materials: new NodeMaterials(),
334
+ clock: { now: () => Date.now(), sleep: (ms) => new Promise((r) => setTimeout(r, ms)) },
335
+ log: { info: (line) => (opts.log ?? ((l) => process.stderr.write(`[stig] ${l}\n`)))(line) },
336
+ baseDir, assetsDir, readAsset: (rel) => readFileSync(join(assetsDir, rel), "utf8"),
337
+ };
338
+ }
339
+ //# sourceMappingURL=live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../../../src/stig/live.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * RHEL 8.10 STIG model: descriptor, receipt summary, guards and state machine (pure, no I/O).
3
+ *
4
+ * Mirror of ct-appliance-operator `src/stig.mjs` (docs/design/stig-claims.md). Both are tested against the same
5
+ * fixtures; keep them in step. The executor (Packer, qm, oscap) lives in ./runner.ts.
6
+ */
7
+ import { isDeepStrictEqual } from "node:util";
8
+ export declare const STIG_ANNOTATION = "calltelemetry.com/stig";
9
+ export declare const STIG_RECEIPT_ANNOTATION = "calltelemetry.com/stig-receipt";
10
+ export declare const STIG_STEP_ANNOTATION = "calltelemetry.com/stig-step";
11
+ export declare const STIG_DESCRIPTOR_SCHEMA = "calltelemetry-stig-claim/v1";
12
+ export declare const STIG_RECEIPT_SCHEMA = "calltelemetry-stig-receipt-summary/v1";
13
+ export declare const STIG_ANNOTATION_MAX_BYTES = 2048;
14
+ export declare const STIG_TTL_CAP_HOURS = 8760;
15
+ export declare const STIG_POOL_LIMIT_PERCENT = 70;
16
+ export declare const STIG_TEMPLATE_PREFIX = "rhel810-stig-";
17
+ export declare const STIG_MODES: readonly ["build-template", "clone", "validate"];
18
+ export type StigMode = (typeof STIG_MODES)[number];
19
+ export declare const STIG_DATASTREAM_SHA256 = "82592d3cff74a82ce652a65ba67cd755cf57550269798d4c449c2069417c1028";
20
+ export declare const STIG_TAILORING_SHA256 = "43560c40096a28b180685fe1383344a6d454a3a18666f2ead4a1ddd3d72ed7fd";
21
+ export declare const STIG_PROFILE_ID = "xccdf_com.calltelemetry_profile_stig_ct";
22
+ export declare const STIG_DVD_ISO = "synology-cisco-isos:iso/rhel-8.10-x86_64-dvd.iso";
23
+ export declare const STIG_PINS: Readonly<{
24
+ ssg: "0.1.82";
25
+ stig: "V2R8";
26
+ packer: "1.16.0";
27
+ packerProxmoxPlugin: "1.2.4";
28
+ }>;
29
+ export declare const STIG_STEPS: Readonly<Record<StigMode, readonly string[]>>;
30
+ /** Steps during which a clone's disk is being fully re-allocated; only one clone may be here at a time. */
31
+ export declare const STIG_REENCRYPT_STEPS: readonly string[];
32
+ export declare const COUNT_KEYS: readonly ["pass", "fail", "notapplicable", "notchecked", "informational", "error"];
33
+ export type StigCounts = Record<(typeof COUNT_KEYS)[number], number>;
34
+ export interface StigDescriptor {
35
+ schema: typeof STIG_DESCRIPTOR_SCHEMA;
36
+ mode: StigMode;
37
+ profile: "rhel8-stig";
38
+ template?: {
39
+ ref: string;
40
+ vmid: number;
41
+ };
42
+ tailoring: {
43
+ ref: string;
44
+ sha256?: string;
45
+ };
46
+ site: {
47
+ dns: string[];
48
+ ntp: string[];
49
+ adminKeyRef: string;
50
+ };
51
+ pins: {
52
+ ssg: string;
53
+ stig: string;
54
+ packer: string;
55
+ packerProxmoxPlugin: string;
56
+ };
57
+ }
58
+ export declare const DISA_COUNT_KEYS: readonly ["pass", "fail", "notapplicable", "notchecked", "informational", "error", "unknown"];
59
+ export type DisaCounts = Record<(typeof DISA_COUNT_KEYS)[number], number>;
60
+ export declare const DISA_PROFILE_ID = "xccdf_mil.disa.stig_profile_MAC-1_Classified";
61
+ export declare const DISA_BENCHMARK_FILE = "U_RHEL_8_V2R8_STIG_SCAP_1-3_Benchmark.xml";
62
+ /** DISA's official V2R8 SCAP benchmark result (v3 templates scan with both SSG and DISA). */
63
+ export interface DisaScan {
64
+ profile: string;
65
+ benchmarkSha256: string;
66
+ counts: DisaCounts;
67
+ }
68
+ export interface StigReceiptSummary {
69
+ schema: typeof STIG_RECEIPT_SCHEMA;
70
+ mode: StigMode;
71
+ template: string;
72
+ counts: StigCounts;
73
+ gate: {
74
+ failZero: boolean;
75
+ disaFailZero?: boolean;
76
+ };
77
+ disa?: DisaScan;
78
+ versions: Record<string, string>;
79
+ sha256: Record<string, string>;
80
+ keyDigest?: string;
81
+ validatedAt: string;
82
+ }
83
+ type Json = Record<string, any>;
84
+ /** Throws when a value carries secret material by value. Names of secrets (e.g. `doppler:KEY`) are fine. */
85
+ export declare function assertNoSecrets(value: unknown, path?: string): void;
86
+ /** Masks anything secret-looking in a log line. Applied to every line the runner emits. */
87
+ export declare function redact(text: string): string;
88
+ export declare function validateStigDescriptor(d: unknown): {
89
+ ok: boolean;
90
+ errors: string[];
91
+ value: StigDescriptor | null;
92
+ };
93
+ export declare function stigDescriptor(claim: any): Json | null;
94
+ /** The default descriptor for a mode, from the verified pins and site values. */
95
+ export declare function defaultDescriptor(mode: StigMode, opts: {
96
+ template?: {
97
+ ref: string;
98
+ vmid: number;
99
+ };
100
+ tailoringSha256?: string;
101
+ dns?: string[];
102
+ ntp?: string[];
103
+ adminKeyRef: string;
104
+ }): StigDescriptor;
105
+ export declare function parseKv(text: string): Record<string, string>;
106
+ export declare function countArfResults(xml: string): StigCounts;
107
+ /** Same counting as the shell recipe: `grep -c "^Result.*<kind>$"` over `oscap xccdf eval` stdout. */
108
+ export declare function parseOscapStdoutCounts(text: string): StigCounts;
109
+ export declare function countsFromKv(kv: Record<string, string>): StigCounts;
110
+ /** fail=0 gate. With a DISA scan present, BOTH scans must be fail=0 (and error=0); an empty scan never passes. */
111
+ export declare function receiptGate(counts: Partial<StigCounts> | undefined, disa?: Partial<DisaCounts>): {
112
+ failZero: boolean;
113
+ disaFailZero?: boolean;
114
+ };
115
+ export declare function disaCountsFromKv(kv: Record<string, string>, prefix?: string): DisaCounts;
116
+ export declare function buildReceiptSummary(receipt: Json, opts?: {
117
+ mode?: StigMode;
118
+ validatedAt?: string;
119
+ keyDigest?: string;
120
+ arfSha256?: string;
121
+ reportSha256?: string;
122
+ openscap?: string;
123
+ disa?: DisaScan;
124
+ }): StigReceiptSummary;
125
+ export declare function validateReceiptSummary(s: unknown): StigReceiptSummary | null;
126
+ /** Same projection the operator performs (CT_OPERATOR_STIG=1), so a tool can show what status.stig will carry. */
127
+ export declare function stigStatusPreview(claim: any, now?: string): {
128
+ stig: StigReceiptSummary;
129
+ conditions?: Json[];
130
+ } | null;
131
+ export { isDeepStrictEqual };
132
+ export declare function capTtl(hours: number): number;
133
+ export type RenewalPlan = {
134
+ ok: true;
135
+ elapsedHours: number;
136
+ extendHours: number;
137
+ previousTtlHours: number;
138
+ newTtlHours: number;
139
+ } | {
140
+ ok: false;
141
+ error: string;
142
+ elapsedHours: number;
143
+ };
144
+ export declare function planTemplateRenewal(claim: any, now?: number, marginHours?: number): RenewalPlan;
145
+ export declare function assertPoolBelow(percent: unknown, limit?: number): void;
146
+ export declare function assertSingleReencrypt(claims: any[], selfName: string): void;
147
+ export declare function assertTemplateReleaseAllowed(input: {
148
+ guest: {
149
+ vmid: number;
150
+ name: string;
151
+ template?: number | boolean;
152
+ };
153
+ claim: any;
154
+ destroyConfirmed: boolean;
155
+ }): {
156
+ ok: true;
157
+ sequence: string[];
158
+ };
159
+ export declare function nextStigStep(mode: string, current: string): string | null;
160
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/stig/model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,eAAO,MAAM,eAAe,2BAA2B,CAAC;AACxD,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AACxE,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAClE,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AACpE,eAAO,MAAM,mBAAmB,0CAA0C,CAAC;AAC3E,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AACpD,eAAO,MAAM,UAAU,kDAAmD,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,eAAO,MAAM,sBAAsB,qEAAqE,CAAC;AACzG,eAAO,MAAM,qBAAqB,qEAAqE,CAAC;AACxG,eAAO,MAAM,eAAe,4CAA4C,CAAC;AACzE,eAAO,MAAM,YAAY,qDAAqD,CAAC;AAC/E,eAAO,MAAM,SAAS;;;;;EAAiG,CAAC;AAExH,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC,CAInE,CAAC;AACH,2GAA2G;AAC3G,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAA0B,CAAC;AAE7E,eAAO,MAAM,UAAU,oFAAqF,CAAC;AAC7G,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,sBAAsB,CAAC;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC;CAClF;AAED,eAAO,MAAM,eAAe,+FAAsC,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1E,eAAO,MAAM,eAAe,iDAAiD,CAAC;AAC9E,eAAO,MAAM,mBAAmB,8CAA8C,CAAC;AAE/E,6FAA6F;AAC7F,MAAM,WAAW,QAAQ;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE;AAE1F,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAahC,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,IAAI,CAchE;AAED,2FAA2F;AAC3F,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3C;AAQD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE,CA+ClH;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,CAOtD;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAWnM;AAID,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5D;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMvD;AAED,sGAAsG;AACtG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAO/D;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CAInE;AAQD,kHAAkH;AAClH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAK9I;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,SAAY,GAAG,UAAU,CAI3F;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,EACb,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAO,GACtJ,kBAAkB,CAqBpB;AAMD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAiB5E;AAED,kHAAkH;AAClH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,SAA2B,GAAG;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAA;CAAE,GAAG,IAAI,CAUtI;AACD,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAI7B,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,SAAa,EAAE,WAAW,SAAI,GAAG,WAAW,CAO9F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,SAA0B,GAAG,IAAI,CAGvF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAU3E;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CASnM;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzE"}