@claude-flow/security 3.0.0-alpha.1 → 3.0.0-alpha.10

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 (115) hide show
  1. package/README.md +292 -234
  2. package/__tests__/acceptance/security-compliance.test.ts +674 -674
  3. package/__tests__/authorization-propagator.test.ts +155 -0
  4. package/__tests__/credential-generator.test.ts +310 -310
  5. package/__tests__/fixtures/configurations.ts +425 -419
  6. package/__tests__/fixtures/index.ts +21 -21
  7. package/__tests__/helpers/create-mock.ts +469 -469
  8. package/__tests__/helpers/index.ts +32 -32
  9. package/__tests__/input-validator.test.ts +382 -381
  10. package/__tests__/integration/security-flow.test.ts +606 -606
  11. package/__tests__/password-hasher.test.ts +239 -239
  12. package/__tests__/path-validator.test.ts +302 -302
  13. package/__tests__/plugin-integrity-verifier.test.ts +199 -0
  14. package/__tests__/safe-executor.test.ts +292 -292
  15. package/__tests__/token-generator.test.ts +371 -371
  16. package/__tests__/tool-output-guardrail.test.ts +256 -0
  17. package/__tests__/unit/credential-generator.test.ts +182 -182
  18. package/__tests__/unit/password-hasher.test.ts +359 -359
  19. package/__tests__/unit/path-validator.test.ts +509 -509
  20. package/__tests__/unit/safe-executor.test.ts +667 -667
  21. package/__tests__/unit/token-generator.test.ts +310 -310
  22. package/dist/authorization/propagator.d.ts +148 -0
  23. package/dist/authorization/propagator.d.ts.map +1 -0
  24. package/dist/authorization/propagator.js +182 -0
  25. package/dist/authorization/propagator.js.map +1 -0
  26. package/dist/credential-generator.js +9 -9
  27. package/dist/domain/services/security-domain-service.js +1 -1
  28. package/dist/domain/services/security-domain-service.js.map +1 -1
  29. package/dist/index.d.ts +4 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +11 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/password-hasher.d.ts.map +1 -1
  34. package/dist/password-hasher.js +8 -1
  35. package/dist/password-hasher.js.map +1 -1
  36. package/dist/plugins/integrity-verifier.d.ts +125 -0
  37. package/dist/plugins/integrity-verifier.d.ts.map +1 -0
  38. package/dist/plugins/integrity-verifier.js +186 -0
  39. package/dist/plugins/integrity-verifier.js.map +1 -0
  40. package/dist/safe-executor.d.ts +7 -0
  41. package/dist/safe-executor.d.ts.map +1 -1
  42. package/dist/safe-executor.js +21 -1
  43. package/dist/safe-executor.js.map +1 -1
  44. package/dist/tool-output-guardrail.d.ts +126 -0
  45. package/dist/tool-output-guardrail.d.ts.map +1 -0
  46. package/dist/tool-output-guardrail.js +257 -0
  47. package/dist/tool-output-guardrail.js.map +1 -0
  48. package/package.json +28 -28
  49. package/src/CVE-REMEDIATION.ts +251 -251
  50. package/src/application/index.ts +10 -10
  51. package/src/application/services/security-application-service.ts +193 -193
  52. package/src/authorization/propagator.ts +279 -0
  53. package/src/credential-generator.ts +368 -368
  54. package/src/domain/entities/security-context.ts +173 -173
  55. package/src/domain/index.ts +17 -17
  56. package/src/domain/services/security-domain-service.ts +296 -296
  57. package/src/index.ts +314 -271
  58. package/src/input-validator.ts +466 -466
  59. package/src/password-hasher.ts +277 -270
  60. package/src/path-validator.ts +525 -525
  61. package/src/plugins/integrity-verifier.ts +265 -0
  62. package/src/safe-executor.ts +546 -525
  63. package/src/token-generator.ts +463 -463
  64. package/src/tool-output-guardrail.ts +360 -0
  65. package/tmp.json +0 -0
  66. package/tsconfig.json +9 -9
  67. package/tsconfig.tsbuildinfo +1 -1
  68. package/vitest.config.ts +20 -0
  69. package/.agentic-flow/intelligence.json +0 -16
  70. package/__tests__/coverage/base.css +0 -224
  71. package/__tests__/coverage/block-navigation.js +0 -87
  72. package/__tests__/coverage/coverage-final.json +0 -11
  73. package/__tests__/coverage/favicon.png +0 -0
  74. package/__tests__/coverage/index.html +0 -161
  75. package/__tests__/coverage/lcov-report/base.css +0 -224
  76. package/__tests__/coverage/lcov-report/block-navigation.js +0 -87
  77. package/__tests__/coverage/lcov-report/favicon.png +0 -0
  78. package/__tests__/coverage/lcov-report/index.html +0 -161
  79. package/__tests__/coverage/lcov-report/prettify.css +0 -1
  80. package/__tests__/coverage/lcov-report/prettify.js +0 -2
  81. package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  82. package/__tests__/coverage/lcov-report/sorter.js +0 -210
  83. package/__tests__/coverage/lcov-report/src/CVE-REMEDIATION.ts.html +0 -838
  84. package/__tests__/coverage/lcov-report/src/application/services/index.html +0 -116
  85. package/__tests__/coverage/lcov-report/src/application/services/security-application-service.ts.html +0 -664
  86. package/__tests__/coverage/lcov-report/src/credential-generator.ts.html +0 -1189
  87. package/__tests__/coverage/lcov-report/src/domain/entities/index.html +0 -116
  88. package/__tests__/coverage/lcov-report/src/domain/entities/security-context.ts.html +0 -604
  89. package/__tests__/coverage/lcov-report/src/domain/services/index.html +0 -116
  90. package/__tests__/coverage/lcov-report/src/domain/services/security-domain-service.ts.html +0 -973
  91. package/__tests__/coverage/lcov-report/src/index.html +0 -206
  92. package/__tests__/coverage/lcov-report/src/input-validator.ts.html +0 -1483
  93. package/__tests__/coverage/lcov-report/src/password-hasher.ts.html +0 -895
  94. package/__tests__/coverage/lcov-report/src/path-validator.ts.html +0 -1660
  95. package/__tests__/coverage/lcov-report/src/safe-executor.ts.html +0 -1660
  96. package/__tests__/coverage/lcov-report/src/token-generator.ts.html +0 -1474
  97. package/__tests__/coverage/lcov.info +0 -3650
  98. package/__tests__/coverage/prettify.css +0 -1
  99. package/__tests__/coverage/prettify.js +0 -2
  100. package/__tests__/coverage/sort-arrow-sprite.png +0 -0
  101. package/__tests__/coverage/sorter.js +0 -210
  102. package/__tests__/coverage/src/CVE-REMEDIATION.ts.html +0 -838
  103. package/__tests__/coverage/src/application/services/index.html +0 -116
  104. package/__tests__/coverage/src/application/services/security-application-service.ts.html +0 -664
  105. package/__tests__/coverage/src/credential-generator.ts.html +0 -1189
  106. package/__tests__/coverage/src/domain/entities/index.html +0 -116
  107. package/__tests__/coverage/src/domain/entities/security-context.ts.html +0 -604
  108. package/__tests__/coverage/src/domain/services/index.html +0 -116
  109. package/__tests__/coverage/src/domain/services/security-domain-service.ts.html +0 -973
  110. package/__tests__/coverage/src/index.html +0 -206
  111. package/__tests__/coverage/src/input-validator.ts.html +0 -1483
  112. package/__tests__/coverage/src/password-hasher.ts.html +0 -895
  113. package/__tests__/coverage/src/path-validator.ts.html +0 -1660
  114. package/__tests__/coverage/src/safe-executor.ts.html +0 -1660
  115. package/__tests__/coverage/src/token-generator.ts.html +0 -1474
@@ -0,0 +1,125 @@
1
+ /**
2
+ * PluginIntegrityVerifier — install-layer security for plugin supply chain.
3
+ *
4
+ * Implements P1 of ADR-145 (ruvnet/ruflo#2254): Stage-1 Ed25519 signature
5
+ * verification at `plugins install`. Stage-2 (semantic-intent scan against
6
+ * SCH attacks) lands in P2; per-namespace write ACLs land in P3-P4.
7
+ *
8
+ * Threat model
9
+ * ------------
10
+ * Ruflo's plugin install path fetches manifests from IPFS via Pinata with
11
+ * NO signature verification and NO intent analysis. Two attacks land today:
12
+ *
13
+ * - DDIPE (arXiv:2604.03081): malicious logic embedded in plugin docs and
14
+ * config templates. 11.6-33.5% bypass rate across 4 frameworks/5 models;
15
+ * 2.5% evade both detection and alignment. Stage-1 signing blocks the
16
+ * static-payload variants.
17
+ *
18
+ * - SCH (arXiv:2605.14460): malicious intent wrapped as natural-language
19
+ * "compliance rules" in plugin descriptions. The agent generates the
20
+ * harmful code at runtime — no static payload exists. 77.67% breach
21
+ * success, 0.00% scanner detection. Stage-2 (P2) catches this; Stage-1
22
+ * does not.
23
+ *
24
+ * Scope (P1)
25
+ * ----------
26
+ * - Ed25519 signature verification of a detached signature over the manifest.
27
+ * - Trust-anchor allowlist: the publisher's signing key fingerprint must be
28
+ * in `trust-anchors.json`, gated on CODEOWNERS review.
29
+ * - Backwards compatible: default mode is warn-only. `CLAUDE_FLOW_STRICT_PLUGINS=true`
30
+ * makes verification a hard gate.
31
+ *
32
+ * Non-goals (P1)
33
+ * --------------
34
+ * - Semantic intent scan (SCH defence). Lands in P2 with a pattern-rule
35
+ * fallback for environments without LLM credentials.
36
+ * - Sandboxing the plugin runtime. Orthogonal blast-radius concern.
37
+ *
38
+ * Reference: ADR-145, arXiv:2605.14460 (SCH), arXiv:2604.03081 (DDIPE),
39
+ * arXiv:2604.16548 (Mnemonic Sovereignty survey).
40
+ */
41
+ export interface PluginManifest {
42
+ readonly id: string;
43
+ readonly version: string;
44
+ /** Anything else; only `id` + `version` matter for the integrity hash. */
45
+ readonly [extra: string]: unknown;
46
+ }
47
+ export interface SignedPluginManifest {
48
+ readonly manifest: PluginManifest;
49
+ /** Hex-encoded SHA-256 of the canonical JSON serialisation of manifest. */
50
+ readonly manifestHash: string;
51
+ /** Hex-encoded detached Ed25519 signature over `manifestHash` bytes. */
52
+ readonly signature: string;
53
+ /** Hex-encoded Ed25519 public key of the signer. */
54
+ readonly publicKey: string;
55
+ }
56
+ export interface TrustAnchor {
57
+ /** Hex-encoded Ed25519 public key the publisher signs with. */
58
+ readonly publicKey: string;
59
+ /** Human-readable owner — for audit, not for trust decisions. */
60
+ readonly owner: string;
61
+ /** Optional ISO 8601 date after which this anchor is no longer trusted. */
62
+ readonly expiresAt?: string;
63
+ /** Optional plugin id glob this anchor is authoritative for (e.g. `@claude-flow/*`). */
64
+ readonly scope?: string;
65
+ }
66
+ export interface TrustAnchors {
67
+ readonly version: 1;
68
+ readonly anchors: ReadonlyArray<TrustAnchor>;
69
+ }
70
+ export type VerificationStatus = 'pass' | 'signature-missing' | 'signature-invalid' | 'manifest-hash-mismatch' | 'unknown-signer' | 'signer-expired' | 'signer-out-of-scope';
71
+ export interface VerificationResult {
72
+ readonly status: VerificationStatus;
73
+ readonly pluginId: string;
74
+ readonly signerFingerprint?: string;
75
+ /** Verification timestamp — useful for telemetry correlation. */
76
+ readonly ts: number;
77
+ /** Operator-facing detail; do not parse — log only. */
78
+ readonly detail?: string;
79
+ }
80
+ export interface VerifierConfig {
81
+ readonly trustAnchors: TrustAnchors;
82
+ /**
83
+ * When true, `verify` returns the actual failure status. When false (legacy
84
+ * mode), `verify` returns the failure status BUT callers may choose to
85
+ * proceed with a warning — the strictness gate lives at the caller, not
86
+ * here, so the verifier itself is always pure.
87
+ */
88
+ readonly strict?: boolean;
89
+ /** Optional now-provider for tests. */
90
+ readonly now?: () => number;
91
+ }
92
+ /**
93
+ * Canonical JSON serialisation for hashing. Deterministic key ordering at
94
+ * every nesting level. Pure; identical input → identical output bytes.
95
+ */
96
+ export declare function canonicalize(value: unknown): string;
97
+ /** Hex-encoded SHA-256 of the canonical-JSON manifest. */
98
+ export declare function hashManifest(manifest: PluginManifest): string;
99
+ /** Short fingerprint for telemetry — first 16 hex chars of the key. */
100
+ export declare function fingerprint(publicKey: string): string;
101
+ /**
102
+ * Find the trust anchor that vouches for a manifest. Returns the matched
103
+ * anchor (with anchor.publicKey === signer.publicKey) or null.
104
+ *
105
+ * Scope-matching uses a minimal glob: `*` at the end of the scope string
106
+ * matches any suffix. Empty/missing scope matches every plugin id.
107
+ */
108
+ export declare function findAnchor(anchors: ReadonlyArray<TrustAnchor>, pluginId: string, signerPublicKey: string, now: number): TrustAnchor | null;
109
+ /**
110
+ * `PluginIntegrityVerifier` — Stage-1 verifier (signature + trust anchor).
111
+ *
112
+ * Pure-ish: holds the trust-anchor list and clock, no other state. Safe to
113
+ * construct per-invocation or share.
114
+ */
115
+ export declare class PluginIntegrityVerifier {
116
+ private readonly config;
117
+ constructor(config: VerifierConfig);
118
+ /**
119
+ * Verify a signed manifest. Returns the verification status; the caller
120
+ * decides what to do with `signature-missing` / `manifest-hash-mismatch`
121
+ * etc. based on its strict-mode policy.
122
+ */
123
+ verify(signed: SignedPluginManifest): Promise<VerificationResult>;
124
+ }
125
+ //# sourceMappingURL=integrity-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity-verifier.d.ts","sourceRoot":"","sources":["../../src/plugins/integrity-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC9C;AAED,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,mBAAmB,GACnB,mBAAmB,GACnB,wBAAwB,GACxB,gBAAgB,GAChB,gBAAgB,GAChB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMnD;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAE7D;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,EACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,GACV,WAAW,GAAG,IAAI,CAQpB;AAED;;;;;GAKG;AACH,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEnD;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA2ExE"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * PluginIntegrityVerifier — install-layer security for plugin supply chain.
3
+ *
4
+ * Implements P1 of ADR-145 (ruvnet/ruflo#2254): Stage-1 Ed25519 signature
5
+ * verification at `plugins install`. Stage-2 (semantic-intent scan against
6
+ * SCH attacks) lands in P2; per-namespace write ACLs land in P3-P4.
7
+ *
8
+ * Threat model
9
+ * ------------
10
+ * Ruflo's plugin install path fetches manifests from IPFS via Pinata with
11
+ * NO signature verification and NO intent analysis. Two attacks land today:
12
+ *
13
+ * - DDIPE (arXiv:2604.03081): malicious logic embedded in plugin docs and
14
+ * config templates. 11.6-33.5% bypass rate across 4 frameworks/5 models;
15
+ * 2.5% evade both detection and alignment. Stage-1 signing blocks the
16
+ * static-payload variants.
17
+ *
18
+ * - SCH (arXiv:2605.14460): malicious intent wrapped as natural-language
19
+ * "compliance rules" in plugin descriptions. The agent generates the
20
+ * harmful code at runtime — no static payload exists. 77.67% breach
21
+ * success, 0.00% scanner detection. Stage-2 (P2) catches this; Stage-1
22
+ * does not.
23
+ *
24
+ * Scope (P1)
25
+ * ----------
26
+ * - Ed25519 signature verification of a detached signature over the manifest.
27
+ * - Trust-anchor allowlist: the publisher's signing key fingerprint must be
28
+ * in `trust-anchors.json`, gated on CODEOWNERS review.
29
+ * - Backwards compatible: default mode is warn-only. `CLAUDE_FLOW_STRICT_PLUGINS=true`
30
+ * makes verification a hard gate.
31
+ *
32
+ * Non-goals (P1)
33
+ * --------------
34
+ * - Semantic intent scan (SCH defence). Lands in P2 with a pattern-rule
35
+ * fallback for environments without LLM credentials.
36
+ * - Sandboxing the plugin runtime. Orthogonal blast-radius concern.
37
+ *
38
+ * Reference: ADR-145, arXiv:2605.14460 (SCH), arXiv:2604.03081 (DDIPE),
39
+ * arXiv:2604.16548 (Mnemonic Sovereignty survey).
40
+ */
41
+ import { createHash } from 'node:crypto';
42
+ import * as nodeCrypto from 'node:crypto';
43
+ /**
44
+ * Canonical JSON serialisation for hashing. Deterministic key ordering at
45
+ * every nesting level. Pure; identical input → identical output bytes.
46
+ */
47
+ export function canonicalize(value) {
48
+ if (value === null || typeof value !== 'object')
49
+ return JSON.stringify(value);
50
+ if (Array.isArray(value))
51
+ return '[' + value.map(canonicalize).join(',') + ']';
52
+ const obj = value;
53
+ const keys = Object.keys(obj).sort();
54
+ return '{' + keys.map(k => JSON.stringify(k) + ':' + canonicalize(obj[k])).join(',') + '}';
55
+ }
56
+ /** Hex-encoded SHA-256 of the canonical-JSON manifest. */
57
+ export function hashManifest(manifest) {
58
+ return createHash('sha256').update(canonicalize(manifest)).digest('hex');
59
+ }
60
+ /** Short fingerprint for telemetry — first 16 hex chars of the key. */
61
+ export function fingerprint(publicKey) {
62
+ return publicKey.slice(0, 16);
63
+ }
64
+ /**
65
+ * Find the trust anchor that vouches for a manifest. Returns the matched
66
+ * anchor (with anchor.publicKey === signer.publicKey) or null.
67
+ *
68
+ * Scope-matching uses a minimal glob: `*` at the end of the scope string
69
+ * matches any suffix. Empty/missing scope matches every plugin id.
70
+ */
71
+ export function findAnchor(anchors, pluginId, signerPublicKey, now) {
72
+ for (const a of anchors) {
73
+ if (a.publicKey !== signerPublicKey)
74
+ continue;
75
+ if (a.expiresAt && new Date(a.expiresAt).getTime() <= now)
76
+ continue;
77
+ if (!a.scope || a.scope === '*' || a.scope === pluginId)
78
+ return a;
79
+ if (a.scope.endsWith('*') && pluginId.startsWith(a.scope.slice(0, -1)))
80
+ return a;
81
+ }
82
+ return null;
83
+ }
84
+ /**
85
+ * `PluginIntegrityVerifier` — Stage-1 verifier (signature + trust anchor).
86
+ *
87
+ * Pure-ish: holds the trust-anchor list and clock, no other state. Safe to
88
+ * construct per-invocation or share.
89
+ */
90
+ export class PluginIntegrityVerifier {
91
+ config;
92
+ constructor(config) {
93
+ this.config = config;
94
+ }
95
+ /**
96
+ * Verify a signed manifest. Returns the verification status; the caller
97
+ * decides what to do with `signature-missing` / `manifest-hash-mismatch`
98
+ * etc. based on its strict-mode policy.
99
+ */
100
+ async verify(signed) {
101
+ const now = (this.config.now ?? Date.now)();
102
+ const pluginId = signed.manifest?.id ?? '<unknown>';
103
+ if (!signed.signature || !signed.publicKey) {
104
+ return { status: 'signature-missing', pluginId, ts: now };
105
+ }
106
+ // Re-hash the manifest and compare to the signed hash.
107
+ const recomputed = hashManifest(signed.manifest);
108
+ if (recomputed !== signed.manifestHash) {
109
+ return {
110
+ status: 'manifest-hash-mismatch',
111
+ pluginId,
112
+ signerFingerprint: fingerprint(signed.publicKey),
113
+ ts: now,
114
+ detail: `expected ${signed.manifestHash}, got ${recomputed}`,
115
+ };
116
+ }
117
+ // Find a trust anchor that vouches for this signer + plugin.
118
+ const anchor = findAnchor(this.config.trustAnchors.anchors, pluginId, signed.publicKey, now);
119
+ if (!anchor) {
120
+ return {
121
+ status: 'unknown-signer',
122
+ pluginId,
123
+ signerFingerprint: fingerprint(signed.publicKey),
124
+ ts: now,
125
+ };
126
+ }
127
+ // Ed25519 verify. Probe @noble/ed25519 (already a workspace dep); fall
128
+ // back to the failure status if it isn't resolvable in this environment
129
+ // (mirrors verify.mjs's #1880 precondition pattern).
130
+ const ed = await loadEd25519();
131
+ if (!ed) {
132
+ return {
133
+ status: 'signature-invalid',
134
+ pluginId,
135
+ signerFingerprint: fingerprint(signed.publicKey),
136
+ ts: now,
137
+ detail: '@noble/ed25519 not available — cannot verify',
138
+ };
139
+ }
140
+ // Required by @noble/ed25519 v2 for sync sha512.
141
+ if (!ed.etc.sha512Sync) {
142
+ ed.etc.sha512Sync = (...m) => {
143
+ const h = nodeCrypto.createHash('sha512');
144
+ for (const x of m)
145
+ h.update(x);
146
+ return h.digest();
147
+ };
148
+ }
149
+ let ok = false;
150
+ try {
151
+ const sigBytes = hexToBytes(signed.signature);
152
+ const msgBytes = hexToBytes(signed.manifestHash);
153
+ const pubBytes = hexToBytes(signed.publicKey);
154
+ ok = await ed.verify(sigBytes, msgBytes, pubBytes);
155
+ }
156
+ catch {
157
+ ok = false;
158
+ }
159
+ if (!ok) {
160
+ return {
161
+ status: 'signature-invalid',
162
+ pluginId,
163
+ signerFingerprint: fingerprint(signed.publicKey),
164
+ ts: now,
165
+ };
166
+ }
167
+ return { status: 'pass', pluginId, signerFingerprint: fingerprint(signed.publicKey), ts: now };
168
+ }
169
+ }
170
+ // ─── helpers ────────────────────────────────────────────────────────────
171
+ function hexToBytes(hex) {
172
+ const out = new Uint8Array(hex.length >>> 1);
173
+ for (let i = 0; i < out.length; i++)
174
+ out[i] = parseInt(hex.substr(i * 2, 2), 16);
175
+ return out;
176
+ }
177
+ async function loadEd25519() {
178
+ try {
179
+ const mod = await import('@noble/ed25519');
180
+ return mod;
181
+ }
182
+ catch {
183
+ return null;
184
+ }
185
+ }
186
+ //# sourceMappingURL=integrity-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity-verifier.js","sourceRoot":"","sources":["../../src/plugins/integrity-verifier.ts"],"names":[],"mappings":"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"}
@@ -163,6 +163,13 @@ export declare class SafeExecutor {
163
163
  * @returns Configured SafeExecutor for git, npm, and node
164
164
  */
165
165
  export declare function createDevelopmentExecutor(): SafeExecutor;
166
+ /**
167
+ * Factory function to create a CLI executor.
168
+ * Allows commands commonly needed by CLI command handlers.
169
+ *
170
+ * @returns Configured SafeExecutor for CLI operations
171
+ */
172
+ export declare function createCliExecutor(): SafeExecutor;
166
173
  /**
167
174
  * Factory function to create a read-only executor.
168
175
  * Only allows commands that read without modifying.
@@ -1 +1 @@
1
- {"version":3,"file":"safe-executor.d.ts","sourceRoot":"","sources":["../src/safe-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AAM9D,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACnC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,IAAI,EAAE,MAAM;aACZ,OAAO,CAAC,EAAE,MAAM;aAChB,IAAI,CAAC,EAAE,MAAM,EAAE;gBAH/B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,IAAI,CAAC,EAAE,MAAM,EAAE,YAAA;CAKlC;AAoDD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAW;gBAE/B,MAAM,EAAE,cAAc;IAmBlC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA2BvB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUrC;;;;;;;OAOG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IA4D7E;;;;;;OAMG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,iBAAiB;IA2DzE;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAenC;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ1C;;OAEG;IACH,kBAAkB,IAAI,SAAS,MAAM,EAAE;CAGxC;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,YAAY,CAaxD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAerD"}
1
+ {"version":3,"file":"safe-executor.d.ts","sourceRoot":"","sources":["../src/safe-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AAM9D,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACnC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,IAAI,EAAE,MAAM;aACZ,OAAO,CAAC,EAAE,MAAM;aAChB,IAAI,CAAC,EAAE,MAAM,EAAE;gBAH/B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,IAAI,CAAC,EAAE,MAAM,EAAE,YAAA;CAKlC;AAoDD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAW;gBAE/B,MAAM,EAAE,cAAc;IAmBlC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA2BvB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUrC;;;;;;;OAOG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IA4D7E;;;;;;OAMG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,iBAAiB;IA2DzE;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAenC;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ1C;;OAEG;IACH,kBAAkB,IAAI,SAAS,MAAM,EAAE;CAGxC;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,YAAY,CAYxD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAchD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAerD"}
@@ -336,7 +336,6 @@ export function createDevelopmentExecutor() {
336
336
  allowedCommands: [
337
337
  'git',
338
338
  'npm',
339
- 'npx',
340
339
  'node',
341
340
  'tsc',
342
341
  'vitest',
@@ -345,6 +344,27 @@ export function createDevelopmentExecutor() {
345
344
  ],
346
345
  });
347
346
  }
347
+ /**
348
+ * Factory function to create a CLI executor.
349
+ * Allows commands commonly needed by CLI command handlers.
350
+ *
351
+ * @returns Configured SafeExecutor for CLI operations
352
+ */
353
+ export function createCliExecutor() {
354
+ return new SafeExecutor({
355
+ allowedCommands: [
356
+ 'git',
357
+ 'npm',
358
+ 'npx',
359
+ 'node',
360
+ 'docker',
361
+ 'which',
362
+ 'tsc',
363
+ 'vitest',
364
+ ],
365
+ timeout: 60000,
366
+ });
367
+ }
348
368
  /**
349
369
  * Factory function to create a read-only executor.
350
370
  * Only allows commands that read without modifying.
@@ -1 +1 @@
1
- {"version":3,"file":"safe-executor.js","sourceRoot":"","sources":["../src/safe-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safe-executor.js","sourceRoot":"","sources":["../src/safe-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * ToolOutputGuardrail — semantic screening of content returned by MCP tool
3
+ * calls, memory reads, and external API responses before that content enters
4
+ * agent reasoning. Closes the OWASP ASI01 (Agent Goal Hijacking) gap
5
+ * identified in ruvnet/ruflo#2149 / ADR-131.
6
+ *
7
+ * Threat model
8
+ * ------------
9
+ * Attackers embed malicious instructions in content the agent retrieves
10
+ * autonomously (web page, MCP tool response, memory entry). An LLM cannot
11
+ * reliably distinguish instructions from data once both are in the prompt.
12
+ * System-level per-boundary guardrails are the only category with
13
+ * sub-millisecond latency and no model dependency (arXiv:2601.17548,
14
+ * Jan 2026 systematic review).
15
+ *
16
+ * Scope
17
+ * -----
18
+ * - Detection only — does NOT modify the running prompt; callers decide
19
+ * what action to take (allow, flag, redact, reject) via `scanAndEnforce`.
20
+ * - Synchronous pattern match — designed for <1ms p99 on typical tool
21
+ * responses (≤32KB). Large content is capped at `maxScanBytes` and the
22
+ * truncation itself is reported as a low-severity finding.
23
+ * - Pure-function shape — no I/O, no async, no model calls. Safe to invoke
24
+ * in hot paths (every MCP tool result, every memory read).
25
+ *
26
+ * Non-goals
27
+ * ---------
28
+ * - Not a replacement for input validation at HTTP/CLI boundaries
29
+ * (InputValidator handles that). This is the *content* boundary.
30
+ * - Not a model-based classifier. False-positive rate is bounded by
31
+ * pattern specificity; tune via `customPatterns` and `policy`.
32
+ *
33
+ * Reference: ADR-131, OpenAI Agents SDK ToolGuardrail API (March 2025).
34
+ */
35
+ export type InjectionSeverity = 'low' | 'medium' | 'high' | 'critical';
36
+ export type InjectionCategory = 'instruction-override' | 'role-hijack' | 'exfiltration' | 'jailbreak' | 'hidden-unicode' | 'embedded-system' | 'tool-spoofing' | 'truncation';
37
+ export interface InjectionFinding {
38
+ /** Short label for the matched pattern (stable identifier for telemetry). */
39
+ pattern: string;
40
+ /** Risk weight assigned to this pattern. */
41
+ severity: InjectionSeverity;
42
+ /** Category for downstream classification + OWASP mapping. */
43
+ category: InjectionCategory;
44
+ /** Char offset of the first match in the scanned content. */
45
+ position: number;
46
+ /** Up to 80 chars of surrounding context for human triage (redacted in `sanitized`). */
47
+ context: string;
48
+ }
49
+ export interface GuardrailResult {
50
+ /** True iff no findings, or all findings under the `flag` policy threshold. */
51
+ safe: boolean;
52
+ /** Findings in the order they were detected. */
53
+ findings: InjectionFinding[];
54
+ /** Highest severity observed; `none` if findings is empty. */
55
+ highest: InjectionSeverity | 'none';
56
+ }
57
+ export type GuardrailAction = 'allow' | 'flag' | 'redact' | 'reject';
58
+ export interface GuardrailConfig {
59
+ /**
60
+ * Per-severity action.
61
+ * Defaults:
62
+ * low → allow
63
+ * medium → flag
64
+ * high → redact
65
+ * critical → reject
66
+ *
67
+ * `allow` — content passes through unchanged, no logging required.
68
+ * `flag` — content passes through; caller SHOULD log + monitor.
69
+ * `redact` — matched substrings replaced with `[REDACTED:<pattern>]`.
70
+ * `reject` — caller MUST drop the content and treat the tool call
71
+ * as failed (signal the agent that the tool returned an
72
+ * unsafe payload rather than letting the payload through).
73
+ */
74
+ policy?: Partial<Record<InjectionSeverity, GuardrailAction>>;
75
+ /** Add domain-specific patterns without subclassing. */
76
+ customPatterns?: Array<{
77
+ label: string;
78
+ regex: RegExp;
79
+ severity: InjectionSeverity;
80
+ category: InjectionCategory;
81
+ }>;
82
+ /**
83
+ * Maximum bytes of content to scan. Beyond this, the tail is ignored and
84
+ * a `truncation` finding is added at `medium`. Default: 1 MiB.
85
+ * Set to 0 to disable truncation (scan everything; slower on huge blobs).
86
+ */
87
+ maxScanBytes?: number;
88
+ }
89
+ export declare class ToolOutputGuardrail {
90
+ private readonly patterns;
91
+ private readonly policy;
92
+ private readonly maxScanBytes;
93
+ constructor(config?: GuardrailConfig);
94
+ /**
95
+ * Pure scan — no side effects, no content modification. Useful when the
96
+ * caller wants to log findings but cannot drop the content (e.g. read-only
97
+ * audit mode).
98
+ */
99
+ scan(content: string): GuardrailResult;
100
+ /**
101
+ * Scan + enforce policy. Returns the content to pass forward (possibly
102
+ * redacted or empty) plus the scan result and the action that was taken.
103
+ * Callers should treat `reject` as "drop the tool result and signal an
104
+ * error" — do NOT silently substitute empty content.
105
+ */
106
+ scanAndEnforce(content: string): {
107
+ content: string;
108
+ result: GuardrailResult;
109
+ action: GuardrailAction;
110
+ };
111
+ /**
112
+ * Replace each non-truncation finding's matched substring with
113
+ * `[REDACTED:<pattern>]`. Truncation findings have no substring to redact
114
+ * (their `position` is a length, not an offset into the content) and are
115
+ * skipped. Idempotent for already-redacted strings.
116
+ */
117
+ private redact;
118
+ }
119
+ /** Convenience factory that returns a guardrail with the default policy. */
120
+ export declare function createToolOutputGuardrail(config?: GuardrailConfig): ToolOutputGuardrail;
121
+ /**
122
+ * One-shot helper for callers that just want a yes/no answer without
123
+ * constructing a guardrail. Uses the default policy.
124
+ */
125
+ export declare function isToolOutputSafe(content: string): boolean;
126
+ //# sourceMappingURL=tool-output-guardrail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-output-guardrail.d.ts","sourceRoot":"","sources":["../src/tool-output-guardrail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GACzB,sBAAsB,GACtB,aAAa,GACb,cAAc,GACd,WAAW,GACX,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,YAAY,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,8DAA8D;IAC9D,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,IAAI,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,8DAA8D;IAC9D,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;IAE7D,wDAAwD;IACxD,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,CAAC,CAAC;IAEH;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAiID,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;IAC1E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,GAAE,eAAoB;IAMxC;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IA+CtC;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;QAC/B,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,eAAe,CAAC;QACxB,MAAM,EAAE,eAAe,CAAC;KACzB;IAgBD;;;;;OAKG;IACH,OAAO,CAAC,MAAM;CAmBf;AAED,4EAA4E;AAC5E,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,mBAAmB,CAEvF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD"}