@neurosec/sentry 1.0.20 → 1.1.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.
Files changed (192) hide show
  1. package/README.md +4 -0
  2. package/dist/api-auth.d.ts +31 -0
  3. package/dist/api-auth.d.ts.map +1 -0
  4. package/dist/api-auth.js +105 -0
  5. package/dist/api-auth.js.map +1 -0
  6. package/dist/api-auth.test.d.ts +2 -0
  7. package/dist/api-auth.test.d.ts.map +1 -0
  8. package/dist/api-auth.test.js +89 -0
  9. package/dist/api-auth.test.js.map +1 -0
  10. package/dist/api.d.ts +8 -7
  11. package/dist/api.d.ts.map +1 -1
  12. package/dist/api.js +141 -134
  13. package/dist/api.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +107 -14
  17. package/dist/cli.js.map +1 -1
  18. package/dist/cli.test.d.ts +2 -0
  19. package/dist/cli.test.d.ts.map +1 -0
  20. package/dist/cli.test.js +68 -0
  21. package/dist/cli.test.js.map +1 -0
  22. package/dist/config.d.ts +30 -0
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js +68 -2
  25. package/dist/config.js.map +1 -1
  26. package/dist/config.test.d.ts +2 -0
  27. package/dist/config.test.d.ts.map +1 -0
  28. package/dist/config.test.js +121 -0
  29. package/dist/config.test.js.map +1 -0
  30. package/dist/discovery-win.d.ts +4 -0
  31. package/dist/discovery-win.d.ts.map +1 -0
  32. package/dist/discovery-win.js +153 -0
  33. package/dist/discovery-win.js.map +1 -0
  34. package/dist/discovery.d.ts.map +1 -1
  35. package/dist/discovery.js +23 -97
  36. package/dist/discovery.js.map +1 -1
  37. package/dist/discovery.test.js +18 -109
  38. package/dist/discovery.test.js.map +1 -1
  39. package/dist/enforcement/file-monitor.d.ts +9 -0
  40. package/dist/enforcement/file-monitor.d.ts.map +1 -1
  41. package/dist/enforcement/file-monitor.js +9 -2
  42. package/dist/enforcement/file-monitor.js.map +1 -1
  43. package/dist/enforcement/network-monitor.d.ts.map +1 -1
  44. package/dist/enforcement/network-monitor.js +350 -9
  45. package/dist/enforcement/network-monitor.js.map +1 -1
  46. package/dist/enforcement/network-monitor.test.d.ts +2 -0
  47. package/dist/enforcement/network-monitor.test.d.ts.map +1 -0
  48. package/dist/enforcement/network-monitor.test.js +52 -0
  49. package/dist/enforcement/network-monitor.test.js.map +1 -0
  50. package/dist/enforcement/policy-executor.d.ts +24 -1
  51. package/dist/enforcement/policy-executor.d.ts.map +1 -1
  52. package/dist/enforcement/policy-executor.js +213 -69
  53. package/dist/enforcement/policy-executor.js.map +1 -1
  54. package/dist/enforcement/policy-executor.test.d.ts +2 -0
  55. package/dist/enforcement/policy-executor.test.d.ts.map +1 -0
  56. package/dist/enforcement/policy-executor.test.js +46 -0
  57. package/dist/enforcement/policy-executor.test.js.map +1 -0
  58. package/dist/enforcement/target-validator.d.ts +37 -0
  59. package/dist/enforcement/target-validator.d.ts.map +1 -0
  60. package/dist/enforcement/target-validator.js +0 -0
  61. package/dist/enforcement/target-validator.js.map +1 -0
  62. package/dist/enforcement/target-validator.test.d.ts +2 -0
  63. package/dist/enforcement/target-validator.test.d.ts.map +1 -0
  64. package/dist/enforcement/target-validator.test.js +103 -0
  65. package/dist/enforcement/target-validator.test.js.map +1 -0
  66. package/dist/http-client.d.ts +35 -0
  67. package/dist/http-client.d.ts.map +1 -0
  68. package/dist/http-client.js +179 -0
  69. package/dist/http-client.js.map +1 -0
  70. package/dist/http-client.test.d.ts +2 -0
  71. package/dist/http-client.test.d.ts.map +1 -0
  72. package/dist/http-client.test.js +175 -0
  73. package/dist/http-client.test.js.map +1 -0
  74. package/dist/index.js +190 -114
  75. package/dist/index.js.map +1 -1
  76. package/dist/launcher.d.ts +33 -0
  77. package/dist/launcher.d.ts.map +1 -0
  78. package/dist/launcher.js +425 -0
  79. package/dist/launcher.js.map +1 -0
  80. package/dist/launcher.test.d.ts +2 -0
  81. package/dist/launcher.test.d.ts.map +1 -0
  82. package/dist/launcher.test.js +109 -0
  83. package/dist/launcher.test.js.map +1 -0
  84. package/dist/proxy/cert-manager.d.ts +24 -0
  85. package/dist/proxy/cert-manager.d.ts.map +1 -0
  86. package/dist/proxy/cert-manager.js +117 -0
  87. package/dist/proxy/cert-manager.js.map +1 -0
  88. package/dist/proxy/cert-manager.test.d.ts +2 -0
  89. package/dist/proxy/cert-manager.test.d.ts.map +1 -0
  90. package/dist/proxy/cert-manager.test.js +70 -0
  91. package/dist/proxy/cert-manager.test.js.map +1 -0
  92. package/dist/proxy/index.d.ts +61 -0
  93. package/dist/proxy/index.d.ts.map +1 -0
  94. package/dist/proxy/index.js +74 -0
  95. package/dist/proxy/index.js.map +1 -0
  96. package/dist/proxy/policy-enforcer.d.ts +30 -0
  97. package/dist/proxy/policy-enforcer.d.ts.map +1 -0
  98. package/dist/proxy/policy-enforcer.js +143 -0
  99. package/dist/proxy/policy-enforcer.js.map +1 -0
  100. package/dist/proxy/proxy-server.d.ts +42 -0
  101. package/dist/proxy/proxy-server.d.ts.map +1 -0
  102. package/dist/proxy/proxy-server.js +652 -0
  103. package/dist/proxy/proxy-server.js.map +1 -0
  104. package/dist/proxy/redaction-engine.d.ts +4 -0
  105. package/dist/proxy/redaction-engine.d.ts.map +1 -0
  106. package/dist/proxy/redaction-engine.js +50 -0
  107. package/dist/proxy/redaction-engine.js.map +1 -0
  108. package/dist/proxy/response-redaction.test.d.ts +2 -0
  109. package/dist/proxy/response-redaction.test.d.ts.map +1 -0
  110. package/dist/proxy/response-redaction.test.js +125 -0
  111. package/dist/proxy/response-redaction.test.js.map +1 -0
  112. package/dist/proxy/threat-engine.d.ts +22 -0
  113. package/dist/proxy/threat-engine.d.ts.map +1 -0
  114. package/dist/proxy/threat-engine.js +291 -0
  115. package/dist/proxy/threat-engine.js.map +1 -0
  116. package/dist/proxy/threat-engine.test.d.ts +2 -0
  117. package/dist/proxy/threat-engine.test.d.ts.map +1 -0
  118. package/dist/proxy/threat-engine.test.js +27 -0
  119. package/dist/proxy/threat-engine.test.js.map +1 -0
  120. package/dist/redirect/env-injector.d.ts +72 -0
  121. package/dist/redirect/env-injector.d.ts.map +1 -0
  122. package/dist/redirect/env-injector.js +177 -0
  123. package/dist/redirect/env-injector.js.map +1 -0
  124. package/dist/redirect/env-injector.test.d.ts +2 -0
  125. package/dist/redirect/env-injector.test.d.ts.map +1 -0
  126. package/dist/redirect/env-injector.test.js +91 -0
  127. package/dist/redirect/env-injector.test.js.map +1 -0
  128. package/dist/redirect/index.d.ts +3 -0
  129. package/dist/redirect/index.d.ts.map +1 -0
  130. package/dist/redirect/index.js +8 -0
  131. package/dist/redirect/index.js.map +1 -0
  132. package/dist/redirect/platform-redirect.d.ts +42 -0
  133. package/dist/redirect/platform-redirect.d.ts.map +1 -0
  134. package/dist/redirect/platform-redirect.js +229 -0
  135. package/dist/redirect/platform-redirect.js.map +1 -0
  136. package/dist/redirect/platform-redirect.test.d.ts +2 -0
  137. package/dist/redirect/platform-redirect.test.d.ts.map +1 -0
  138. package/dist/redirect/platform-redirect.test.js +76 -0
  139. package/dist/redirect/platform-redirect.test.js.map +1 -0
  140. package/dist/sandbox/index.d.ts +23 -2
  141. package/dist/sandbox/index.d.ts.map +1 -1
  142. package/dist/sandbox/index.js +24 -7
  143. package/dist/sandbox/index.js.map +1 -1
  144. package/dist/sandbox/linux-sandbox.d.ts +13 -2
  145. package/dist/sandbox/linux-sandbox.d.ts.map +1 -1
  146. package/dist/sandbox/linux-sandbox.js +61 -27
  147. package/dist/sandbox/linux-sandbox.js.map +1 -1
  148. package/dist/sandbox/macos-sandbox.d.ts +15 -4
  149. package/dist/sandbox/macos-sandbox.d.ts.map +1 -1
  150. package/dist/sandbox/macos-sandbox.js +36 -18
  151. package/dist/sandbox/macos-sandbox.js.map +1 -1
  152. package/dist/sandbox/sandbox-result.test.d.ts +2 -0
  153. package/dist/sandbox/sandbox-result.test.d.ts.map +1 -0
  154. package/dist/sandbox/sandbox-result.test.js +87 -0
  155. package/dist/sandbox/sandbox-result.test.js.map +1 -0
  156. package/dist/sandbox/windows-sandbox.d.ts +34 -0
  157. package/dist/sandbox/windows-sandbox.d.ts.map +1 -0
  158. package/dist/sandbox/windows-sandbox.js +161 -0
  159. package/dist/sandbox/windows-sandbox.js.map +1 -0
  160. package/dist/setup.d.ts.map +1 -1
  161. package/dist/setup.js +33 -43
  162. package/dist/setup.js.map +1 -1
  163. package/dist/skill-authz/skill-evaluator.d.ts +30 -0
  164. package/dist/skill-authz/skill-evaluator.d.ts.map +1 -1
  165. package/dist/skill-authz/skill-evaluator.js +161 -30
  166. package/dist/skill-authz/skill-evaluator.js.map +1 -1
  167. package/dist/skill-authz/skill-evaluator.test.d.ts +2 -0
  168. package/dist/skill-authz/skill-evaluator.test.d.ts.map +1 -0
  169. package/dist/skill-authz/skill-evaluator.test.js +127 -0
  170. package/dist/skill-authz/skill-evaluator.test.js.map +1 -0
  171. package/dist/telemetry.d.ts +2 -8
  172. package/dist/telemetry.d.ts.map +1 -1
  173. package/dist/telemetry.js +17 -147
  174. package/dist/telemetry.js.map +1 -1
  175. package/dist/types.d.ts +48 -105
  176. package/dist/types.d.ts.map +1 -1
  177. package/dist/types.js +34 -1
  178. package/dist/types.js.map +1 -1
  179. package/package.json +7 -3
  180. package/scripts/install-sentry-windows.ps1 +217 -0
  181. package/dist/action-logger.d.ts +0 -40
  182. package/dist/action-logger.d.ts.map +0 -1
  183. package/dist/action-logger.js +0 -252
  184. package/dist/action-logger.js.map +0 -1
  185. package/dist/agent-registry.d.ts +0 -24
  186. package/dist/agent-registry.d.ts.map +0 -1
  187. package/dist/agent-registry.js +0 -176
  188. package/dist/agent-registry.js.map +0 -1
  189. package/dist/anomaly-detector.d.ts +0 -26
  190. package/dist/anomaly-detector.d.ts.map +0 -1
  191. package/dist/anomaly-detector.js +0 -299
  192. package/dist/anomaly-detector.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const dns_1 = __importDefault(require("dns"));
8
+ const { mockExecFileSync } = vitest_1.vi.hoisted(() => ({
9
+ mockExecFileSync: vitest_1.vi.fn(),
10
+ }));
11
+ vitest_1.vi.mock('child_process', () => ({
12
+ execFileSync: mockExecFileSync,
13
+ }));
14
+ const network_monitor_1 = require("./network-monitor");
15
+ (0, vitest_1.describe)('scanLLMConnections', () => {
16
+ (0, vitest_1.beforeEach)(() => {
17
+ vitest_1.vi.clearAllMocks();
18
+ });
19
+ (0, vitest_1.it)('detects local LLM listeners on Windows via netstat', async () => {
20
+ const platformSpy = vitest_1.vi.spyOn(process, 'platform', 'get').mockReturnValue('win32');
21
+ const reverseSpy = vitest_1.vi.spyOn(dns_1.default, 'reverse').mockImplementation((_ip, cb) => cb(new Error('no reverse dns'), []));
22
+ mockExecFileSync.mockReturnValue([
23
+ 'Active Connections',
24
+ '',
25
+ ' Proto Local Address Foreign Address State PID',
26
+ ' TCP 127.0.0.1:11434 0.0.0.0:0 LISTENING 4242',
27
+ ' TCP 127.0.0.1:55000 127.0.0.1:11434 ESTABLISHED 4242',
28
+ ].join('\r\n'));
29
+ const taggedProcesses = [{
30
+ pid: 4242,
31
+ ppid: 1,
32
+ frameworkId: 'ollama',
33
+ frameworkName: 'Ollama',
34
+ command: 'ollama serve',
35
+ exePath: 'C:\\ollama.exe',
36
+ confidence: 1,
37
+ envKeys: [],
38
+ discoveredAt: Date.now(),
39
+ sandboxed: false,
40
+ sandboxProfileName: null,
41
+ uid: 0,
42
+ gid: 0,
43
+ }];
44
+ const connections = await (0, network_monitor_1.scanLLMConnections)(taggedProcesses);
45
+ (0, vitest_1.expect)(connections).toHaveLength(2);
46
+ (0, vitest_1.expect)(connections.some(connection => connection.type === 'listening' && connection.providerId === 'ollama-local')).toBe(true);
47
+ (0, vitest_1.expect)(connections.some(connection => connection.type === 'established' && connection.hostname === 'localhost')).toBe(true);
48
+ reverseSpy.mockRestore();
49
+ platformSpy.mockRestore();
50
+ });
51
+ });
52
+ //# sourceMappingURL=network-monitor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-monitor.test.js","sourceRoot":"","sources":["../../src/enforcement/network-monitor.test.ts"],"names":[],"mappings":";;;;;AAAA,mCAA8D;AAC9D,8CAAsB;AAEtB,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,gBAAgB,EAAE,WAAE,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,WAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,YAAY,EAAE,gBAAgB;CAC/B,CAAC,CAAC,CAAC;AAEJ,uDAAuD;AAGvD,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,WAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,WAAW,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,aAAG,EAAE,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAEjH,gBAAgB,CAAC,eAAe,CAAC;YAC/B,oBAAoB;YACpB,EAAE;YACF,4EAA4E;YAC5E,6EAA6E;YAC7E,6EAA6E;SAC9E,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhB,MAAM,eAAe,GAAoB,CAAC;gBACxC,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE,CAAC;gBACP,WAAW,EAAE,QAAQ;gBACrB,aAAa,EAAE,QAAQ;gBACvB,OAAO,EAAE,cAAc;gBACvB,OAAO,EAAE,gBAAgB;gBACzB,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,EAAE;gBACX,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;gBACxB,SAAS,EAAE,KAAK;gBAChB,kBAAkB,EAAE,IAAI;gBACxB,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,CAAC;aACP,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,IAAA,oCAAkB,EAAC,eAAe,CAAC,CAAC;QAE9D,IAAA,eAAM,EAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,IAAA,eAAM,EAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW,IAAI,UAAU,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/H,IAAA,eAAM,EAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,aAAa,IAAI,UAAU,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5H,UAAU,CAAC,WAAW,EAAE,CAAC;QACzB,WAAW,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -16,17 +16,40 @@ interface PolicyResult {
16
16
  applied: boolean;
17
17
  detail: string;
18
18
  }
19
+ /**
20
+ * Executes cloud-supplied policies on the local host.
21
+ *
22
+ * SECURITY INVARIANTS:
23
+ * - Every `target` from a policy is validated via {@link validateTarget}
24
+ * before reaching any subprocess. Invalid targets are dropped, not
25
+ * "best-effort" passed through.
26
+ * - All subprocess invocations use {@link execFileSync} with separate args —
27
+ * no shell metacharacter interpolation, ever.
28
+ * - PID validation rejects values outside the kernel's PID range (1..4194304).
29
+ * - Iptables / nft binaries are resolved once at construction; we never
30
+ * accept a `bin` path from the cloud.
31
+ */
19
32
  export declare class PolicyExecutor {
20
33
  private config;
21
34
  private appliedRules;
22
35
  private lastPolicies;
36
+ private iptablesBin;
37
+ private nftBin;
23
38
  constructor(config: SentryConfig);
39
+ private resolveBin;
24
40
  apply(policies: SentryPolicy[], taggedProcesses: TaggedProcess[]): Promise<PolicyResult[]>;
25
41
  private applyKillProcess;
26
42
  private applyBlockProvider;
27
43
  private applyBlockDomain;
28
- private addIptablesRule;
44
+ /**
45
+ * Add an OUTPUT DROP rule. Each piece of `target` was pre-validated; we still
46
+ * call execFileSync with separate args so even a future regression in the
47
+ * validator cannot escape to a shell.
48
+ */
49
+ private addNetworkBlockRule;
29
50
  private removeRule;
51
+ private removeIptablesRule;
52
+ private removeNftRules;
30
53
  }
31
54
  export {};
32
55
  //# sourceMappingURL=policy-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-executor.d.ts","sourceRoot":"","sources":["../../src/enforcement/policy-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA2B,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAc;IAIb,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAsB;gBAEtB,MAAM,EAAE,YAAY;IAGlC,KAAK,CACT,QAAQ,EAAE,YAAY,EAAE,EACxB,eAAe,EAAE,aAAa,EAAE,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC;YAyCZ,gBAAgB;IA8D9B,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;CAInB"}
1
+ {"version":3,"file":"policy-executor.d.ts","sourceRoot":"","sources":["../../src/enforcement/policy-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA2B,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAIzC,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAOD;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IAMb,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,MAAM,CAAgB;gBAEV,MAAM,EAAE,YAAY;IAKxC,OAAO,CAAC,UAAU;IAcZ,KAAK,CACT,QAAQ,EAAE,YAAY,EAAE,EACxB,eAAe,EAAE,aAAa,EAAE,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC;IAiF1B,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,gBAAgB;IAaxB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,cAAc;CAiCvB"}
@@ -4,36 +4,101 @@ exports.PolicyExecutor = void 0;
4
4
  const child_process_1 = require("child_process");
5
5
  const types_1 = require("../types");
6
6
  const logger_1 = require("../logger");
7
+ const target_validator_1 = require("./target-validator");
8
+ /**
9
+ * Executes cloud-supplied policies on the local host.
10
+ *
11
+ * SECURITY INVARIANTS:
12
+ * - Every `target` from a policy is validated via {@link validateTarget}
13
+ * before reaching any subprocess. Invalid targets are dropped, not
14
+ * "best-effort" passed through.
15
+ * - All subprocess invocations use {@link execFileSync} with separate args —
16
+ * no shell metacharacter interpolation, ever.
17
+ * - PID validation rejects values outside the kernel's PID range (1..4194304).
18
+ * - Iptables / nft binaries are resolved once at construction; we never
19
+ * accept a `bin` path from the cloud.
20
+ */
7
21
  class PolicyExecutor {
8
22
  constructor(config) {
9
23
  this.config = config;
10
- this.appliedRules = new Set();
24
+ this.appliedRules = new Map();
11
25
  this.lastPolicies = [];
26
+ this.iptablesBin = this.resolveBin('iptables');
27
+ this.nftBin = this.resolveBin('nft');
28
+ }
29
+ resolveBin(name) {
30
+ // Prefer absolute paths to avoid PATH-injection via a shell PATH manipulation.
31
+ for (const dir of ['/usr/sbin', '/sbin', '/usr/local/sbin', '/usr/bin', '/bin']) {
32
+ const candidate = `${dir}/${name}`;
33
+ try {
34
+ (0, child_process_1.execFileSync)(candidate, ['--version'], { timeout: 2000, stdio: 'ignore' });
35
+ return candidate;
36
+ }
37
+ catch {
38
+ continue;
39
+ }
40
+ }
41
+ return null;
12
42
  }
13
- // Apply policies to the current host — returns list of actions taken
14
43
  async apply(policies, taggedProcesses) {
15
44
  const results = [];
16
45
  const hostId = this.config.sentry.hostId;
17
- // Only process enabled policies for this host (or global)
46
+ const previousPolicies = new Map(this.lastPolicies.map(policy => [policy.id, policy]));
18
47
  const active = policies.filter(p => p.enabled && (!p.hostId || p.hostId === hostId));
19
48
  for (const policy of active) {
49
+ const previous = previousPolicies.get(policy.id);
50
+ const unchanged = previous
51
+ && previous.type === policy.type
52
+ && previous.target === policy.target
53
+ && previous.action === policy.action
54
+ && previous.enabled === policy.enabled
55
+ && previous.hostId === policy.hostId;
56
+ if (policy.type !== 'kill_process' && unchanged && this.appliedRules.has(policy.id)) {
57
+ results.push({
58
+ policyId: policy.id,
59
+ action: policy.type,
60
+ target: policy.target,
61
+ applied: true,
62
+ detail: 'Rule already active',
63
+ });
64
+ continue;
65
+ }
66
+ if (policy.type !== 'kill_process' && this.appliedRules.has(policy.id)) {
67
+ this.removeRule(policy.id);
68
+ }
69
+ const validated = (0, target_validator_1.validateTarget)(policy.target);
70
+ if (validated.kind === 'invalid') {
71
+ logger_1.logger.warn('Rejected policy with invalid target (possible injection attempt)', {
72
+ policyId: policy.id,
73
+ policyType: policy.type,
74
+ // Truncate to avoid log injection via huge target strings
75
+ target: String(policy.target).slice(0, 64),
76
+ });
77
+ results.push({
78
+ policyId: policy.id,
79
+ action: policy.type,
80
+ target: '',
81
+ applied: false,
82
+ detail: 'Rejected: invalid target',
83
+ });
84
+ continue;
85
+ }
20
86
  switch (policy.type) {
21
87
  case 'kill_process':
22
- results.push(await this.applyKillProcess(policy, taggedProcesses));
88
+ results.push(this.applyKillProcess(policy, validated, taggedProcesses));
23
89
  break;
24
90
  case 'block_provider':
25
- results.push(this.applyBlockProvider(policy));
91
+ results.push(this.applyBlockProvider(policy, validated));
26
92
  break;
27
93
  case 'block_domain':
28
- results.push(this.applyBlockDomain(policy));
94
+ results.push(this.applyBlockDomain(policy, validated));
29
95
  break;
30
96
  }
31
97
  }
32
98
  // Remove rules for policies that no longer exist
33
- for (const ruleId of this.appliedRules) {
99
+ for (const ruleId of Array.from(this.appliedRules.keys())) {
34
100
  if (!active.some(p => p.id === ruleId)) {
35
101
  this.removeRule(ruleId);
36
- this.appliedRules.delete(ruleId);
37
102
  }
38
103
  }
39
104
  this.lastPolicies = active;
@@ -43,80 +108,73 @@ class PolicyExecutor {
43
108
  }
44
109
  return results;
45
110
  }
46
- async applyKillProcess(policy, processes) {
47
- const target = policy.target.toLowerCase();
48
- // Support PID-specific kill: target is "pid:12345"
49
- const pidMatch = target.match(/^pid:(\d+)$/);
50
- if (pidMatch) {
51
- const targetPid = parseInt(pidMatch[1], 10);
52
- const proc = processes.find(p => p.pid === targetPid);
111
+ applyKillProcess(policy, target, processes) {
112
+ const signal = policy.action === 'sigkill' ? 'SIGKILL' : 'SIGTERM';
113
+ if (target.kind === 'pid' && target.pid !== undefined) {
114
+ const proc = processes.find(p => p.pid === target.pid);
53
115
  if (!proc) {
54
- return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: false, detail: 'No matching process found' };
116
+ return { policyId: policy.id, action: 'kill_process', target: target.value, applied: false, detail: 'No matching process found' };
55
117
  }
56
- const signal = policy.action === 'sigkill' ? 'SIGKILL' : 'SIGTERM';
57
118
  try {
58
- process.kill(targetPid, signal);
59
- logger_1.logger.info('Policy: kill_process (pid)', { target: policy.target, pid: targetPid, signal });
60
- return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: true, detail: `Killed pid ${targetPid} with ${signal}` };
119
+ process.kill(target.pid, signal);
120
+ logger_1.logger.info('Policy: kill_process (pid)', { target: target.value, pid: target.pid, signal });
121
+ return { policyId: policy.id, action: 'kill_process', target: target.value, applied: true, detail: `Killed pid ${target.pid} with ${signal}` };
61
122
  }
62
123
  catch {
63
- try {
64
- (0, child_process_1.execSync)(`kill -${signal === 'SIGKILL' ? 9 : 15} ${targetPid}`, { timeout: 3000 });
65
- logger_1.logger.info('Policy: kill_process (pid, fallback)', { target: policy.target, pid: targetPid, signal });
66
- return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: true, detail: `Killed pid ${targetPid} with ${signal}` };
67
- }
68
- catch {
69
- return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: false, detail: 'Process may already be gone' };
70
- }
124
+ return { policyId: policy.id, action: 'kill_process', target: target.value, applied: false, detail: 'Process may already be gone' };
71
125
  }
72
126
  }
73
- // Framework-level kill: match by frameworkId, name, or command
127
+ if (target.kind !== 'framework' && target.kind !== 'hostname') {
128
+ return { policyId: policy.id, action: 'kill_process', target: target.value, applied: false, detail: 'Target must be pid:N, framework id, or hostname for kill_process' };
129
+ }
130
+ const lowered = target.value.toLowerCase();
74
131
  const matched = processes.filter(p => {
75
- if (p.frameworkId === target)
132
+ if (p.frameworkId === lowered)
76
133
  return true;
77
- if (p.frameworkName?.toLowerCase() === target)
134
+ if (p.frameworkName?.toLowerCase() === lowered)
78
135
  return true;
79
- if (p.command?.toLowerCase().includes(target))
136
+ // command match restricted to a substring of the framework token to
137
+ // avoid greedy matches on free-form text.
138
+ if (target.kind === 'framework' && p.command?.toLowerCase().includes(lowered))
80
139
  return true;
81
140
  return false;
82
141
  });
83
142
  if (matched.length === 0) {
84
- return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: false, detail: 'No matching process found' };
143
+ return { policyId: policy.id, action: 'kill_process', target: target.value, applied: false, detail: 'No matching process found' };
85
144
  }
86
- const signal = policy.action === 'sigkill' ? 'SIGKILL' : 'SIGTERM';
87
145
  let killed = 0;
88
146
  for (const proc of matched) {
89
147
  try {
90
148
  process.kill(proc.pid, signal);
91
149
  killed++;
92
150
  }
93
- catch {
94
- try {
95
- (0, child_process_1.execSync)(`kill -${signal === 'SIGKILL' ? 9 : 15} ${proc.pid}`, { timeout: 3000 });
96
- killed++;
97
- }
98
- catch { /* process may already be gone */ }
99
- }
151
+ catch { /* process may already be gone */ }
100
152
  }
101
153
  const detail = killed > 0 ? `Killed ${killed} process(es) with ${signal}` : 'Failed to kill processes';
102
- logger_1.logger.info('Policy: kill_process', { target: policy.target, killed, signal });
103
- return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: killed > 0, detail };
154
+ logger_1.logger.info('Policy: kill_process', { target: target.value, killed, signal });
155
+ return { policyId: policy.id, action: 'kill_process', target: target.value, applied: killed > 0, detail };
104
156
  }
105
- applyBlockProvider(policy) {
106
- const provider = types_1.LLM_PROVIDER_SIGNATURES.find(p => p.id === policy.target || p.name === policy.target);
157
+ applyBlockProvider(policy, target) {
158
+ // Provider matching is by id or name only both already constrained by FRAMEWORK_RE / HOSTNAME_RE.
159
+ const provider = types_1.LLM_PROVIDER_SIGNATURES.find(p => p.id === target.value || p.name === target.value);
107
160
  if (!provider) {
108
- return { policyId: policy.id, action: 'block_provider', target: policy.target, applied: false, detail: `Unknown provider: ${policy.target}` };
161
+ return { policyId: policy.id, action: 'block_provider', target: target.value, applied: false, detail: `Unknown provider: ${target.value}` };
109
162
  }
110
- const ruleId = `sentry-block-${provider.id}`;
111
163
  let success = 0;
164
+ const appliedRules = [];
112
165
  for (const domain of provider.domains) {
113
- try {
114
- this.addIptablesRule(ruleId, domain);
166
+ const domainTarget = (0, target_validator_1.validateTarget)(domain);
167
+ if (!(0, target_validator_1.isNetworkTarget)(domainTarget))
168
+ continue; // defense in depth
169
+ const appliedRule = this.addNetworkBlockRule(policy.id, domainTarget);
170
+ if (appliedRule) {
171
+ appliedRules.push(appliedRule);
115
172
  success++;
116
173
  }
117
- catch { /* best-effort */ }
118
174
  }
119
- this.appliedRules.add(ruleId);
175
+ if (appliedRules.length > 0) {
176
+ this.appliedRules.set(policy.id, appliedRules);
177
+ }
120
178
  if (success > 0) {
121
179
  logger_1.logger.info('Policy: block_provider', { provider: provider.name, domains: success });
122
180
  }
@@ -125,33 +183,119 @@ class PolicyExecutor {
125
183
  action: 'block_provider',
126
184
  target: provider.name,
127
185
  applied: success > 0,
128
- detail: success > 0 ? `Blocked ${success} domain(s) via iptables` : 'No domains blocked (try running as root)',
186
+ detail: success > 0 ? `Blocked ${success} domain(s)` : 'No domains blocked (try running as root)',
129
187
  };
130
188
  }
131
- applyBlockDomain(policy) {
132
- const ruleId = `sentry-block-domain-${policy.id.slice(0, 8)}`;
133
- try {
134
- this.addIptablesRule(ruleId, policy.target);
135
- this.appliedRules.add(ruleId);
136
- logger_1.logger.info('Policy: block_domain', { target: policy.target });
137
- return { policyId: policy.id, action: 'block_domain', target: policy.target, applied: true, detail: `Blocked ${policy.target} via iptables` };
189
+ applyBlockDomain(policy, target) {
190
+ if (!(0, target_validator_1.isNetworkTarget)(target)) {
191
+ return { policyId: policy.id, action: 'block_domain', target: target.value, applied: false, detail: 'Target must be a hostname, IP, or CIDR' };
138
192
  }
139
- catch (err) {
140
- return { policyId: policy.id, action: 'block_domain', target: policy.target, applied: false, detail: `Failed: ${err.message}` };
193
+ const appliedRule = this.addNetworkBlockRule(policy.id, target);
194
+ if (appliedRule) {
195
+ this.appliedRules.set(policy.id, [appliedRule]);
196
+ logger_1.logger.info('Policy: block_domain', { target: target.value });
197
+ return { policyId: policy.id, action: 'block_domain', target: target.value, applied: true, detail: `Blocked ${target.value}` };
141
198
  }
199
+ return { policyId: policy.id, action: 'block_domain', target: target.value, applied: false, detail: 'iptables/nft unavailable or rejected the rule' };
142
200
  }
143
- addIptablesRule(ruleId, target) {
144
- // Try nftables first, fall back to iptables
145
- try {
146
- (0, child_process_1.execSync)(`nft add rule inet filter output ${ruleId} ip daddr ${target} drop 2>/dev/null || iptables -C OUTPUT -d ${target} -j DROP 2>/dev/null || iptables -A OUTPUT -d ${target} -j DROP`, { timeout: 5000 });
201
+ /**
202
+ * Add an OUTPUT DROP rule. Each piece of `target` was pre-validated; we still
203
+ * call execFileSync with separate args so even a future regression in the
204
+ * validator cannot escape to a shell.
205
+ */
206
+ addNetworkBlockRule(ruleId, target) {
207
+ // nft first (modern kernels)
208
+ if (this.nftBin) {
209
+ try {
210
+ (0, child_process_1.execFileSync)(this.nftBin, ['add', 'rule', 'inet', 'filter', 'output', 'ip', 'daddr', target.value, 'drop', 'comment', ruleId], { timeout: 5000, stdio: 'ignore' });
211
+ return { backend: 'nft', target: target.value };
212
+ }
213
+ catch {
214
+ // fall through to iptables
215
+ }
147
216
  }
148
- catch {
149
- (0, child_process_1.execSync)(`iptables -C OUTPUT -d ${target} -j DROP 2>/dev/null || iptables -A OUTPUT -d ${target} -j DROP`, { timeout: 5000 });
217
+ if (this.iptablesBin) {
218
+ try {
219
+ // -C first to dedupe; ignore exit code, then -A
220
+ try {
221
+ (0, child_process_1.execFileSync)(this.iptablesBin, ['-C', 'OUTPUT', '-d', target.value, '-j', 'DROP'], { timeout: 5000, stdio: 'ignore' });
222
+ return { backend: 'iptables', target: target.value };
223
+ }
224
+ catch { /* not present, add */ }
225
+ (0, child_process_1.execFileSync)(this.iptablesBin, ['-A', 'OUTPUT', '-d', target.value, '-j', 'DROP'], { timeout: 5000, stdio: 'ignore' });
226
+ return { backend: 'iptables', target: target.value };
227
+ }
228
+ catch {
229
+ return null;
230
+ }
150
231
  }
232
+ return null;
151
233
  }
152
234
  removeRule(ruleId) {
153
- // Cleanup is deferred — rules persist until explicitly removed or reboot
154
- logger_1.logger.debug('Policy rule removed from tracking', { ruleId });
235
+ const rules = this.appliedRules.get(ruleId);
236
+ if (!rules || rules.length === 0) {
237
+ return;
238
+ }
239
+ let removed = 0;
240
+ if (rules.some(rule => rule.backend === 'nft')) {
241
+ removed += this.removeNftRules(ruleId);
242
+ }
243
+ for (const rule of rules) {
244
+ if (rule.backend === 'iptables' && this.removeIptablesRule(rule.target)) {
245
+ removed++;
246
+ }
247
+ }
248
+ this.appliedRules.delete(ruleId);
249
+ logger_1.logger.debug('Policy rules removed', { ruleId, removed });
250
+ }
251
+ removeIptablesRule(target) {
252
+ if (!this.iptablesBin) {
253
+ return false;
254
+ }
255
+ let removed = false;
256
+ while (true) {
257
+ try {
258
+ (0, child_process_1.execFileSync)(this.iptablesBin, ['-D', 'OUTPUT', '-d', target, '-j', 'DROP'], {
259
+ timeout: 5000,
260
+ stdio: 'ignore',
261
+ });
262
+ removed = true;
263
+ }
264
+ catch {
265
+ break;
266
+ }
267
+ }
268
+ return removed;
269
+ }
270
+ removeNftRules(ruleId) {
271
+ if (!this.nftBin) {
272
+ return 0;
273
+ }
274
+ try {
275
+ const output = (0, child_process_1.execFileSync)(this.nftBin, ['-a', 'list', 'chain', 'inet', 'filter', 'output'], {
276
+ encoding: 'utf8',
277
+ timeout: 5000,
278
+ });
279
+ const handles = output
280
+ .split('\n')
281
+ .map((line) => {
282
+ if (!line.includes(`comment "${ruleId}"`)) {
283
+ return null;
284
+ }
285
+ return line.match(/# handle (\d+)/)?.[1] ?? null;
286
+ })
287
+ .filter((handle) => Boolean(handle));
288
+ for (const handle of handles) {
289
+ (0, child_process_1.execFileSync)(this.nftBin, ['delete', 'rule', 'inet', 'filter', 'output', 'handle', handle], {
290
+ timeout: 5000,
291
+ stdio: 'ignore',
292
+ });
293
+ }
294
+ return handles.length;
295
+ }
296
+ catch {
297
+ return 0;
298
+ }
155
299
  }
156
300
  }
157
301
  exports.PolicyExecutor = PolicyExecutor;
@@ -1 +1 @@
1
- {"version":3,"file":"policy-executor.js","sourceRoot":"","sources":["../../src/enforcement/policy-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-executor.js","sourceRoot":"","sources":["../../src/enforcement/policy-executor.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAC7C,oCAAkE;AAElE,sCAAmC;AACnC,yDAAsF;AAyBtF;;;;;;;;;;;;GAYG;AACH,MAAa,cAAc;IAMzB,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;QALhC,iBAAY,GAAG,IAAI,GAAG,EAAgC,CAAC;QACvD,iBAAY,GAAmB,EAAE,CAAC;QAKxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,+EAA+E;QAC/E,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;YAChF,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,IAAA,4BAAY,EAAC,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC3E,OAAO,SAAS,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CACT,QAAwB,EACxB,eAAgC;QAEhC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAChD,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,QAAQ;mBACrB,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;mBAC7B,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;mBACjC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;mBACjC,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;mBACnC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;YAEvC,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpF,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,qBAAqB;iBAC9B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,SAAS,GAAG,IAAA,iCAAc,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACjC,eAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE;oBAC9E,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,0DAA0D;oBAC1D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC3C,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,0BAA0B;iBACnC,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,cAAc;oBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;oBACxE,MAAM;gBACR,KAAK,gBAAgB;oBACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;oBACzD,MAAM;gBACR,KAAK,cAAc;oBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;oBACvD,MAAM;YACV,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAE3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YACtD,eAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB,CACtB,MAAoB,EACpB,MAAuB,EACvB,SAA0B;QAE1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnE,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;YACpI,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACjC,eAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,EAAE,CAAC;YACjJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;YACtI,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,kEAAkE,EAAE,CAAC;QAC3K,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACnC,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC3C,IAAI,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC5D,oEAAoE;YACpE,0CAA0C;YAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3F,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;QACpI,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC/B,MAAM,EAAE,CAAC;YACX,CAAC;YAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,MAAM,qBAAqB,MAAM,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACvG,eAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5G,CAAC;IAEO,kBAAkB,CAAC,MAAoB,EAAE,MAAuB;QACtE,oGAAoG;QACpG,MAAM,QAAQ,GAAG,+BAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;QACrG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9I,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,YAAY,GAAyB,EAAE,CAAC;QAE9C,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,IAAA,iCAAc,EAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAA,kCAAe,EAAC,YAAY,CAAC;gBAAE,SAAS,CAAC,mBAAmB;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YACtE,IAAI,WAAW,EAAE,CAAC;gBAChB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,QAAQ,CAAC,IAAI;YACrB,OAAO,EAAE,OAAO,GAAG,CAAC;YACpB,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,OAAO,YAAY,CAAC,CAAC,CAAC,0CAA0C;SAClG,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,MAAoB,EAAE,MAAuB;QACpE,IAAI,CAAC,IAAA,kCAAe,EAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;QACjJ,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAChD,eAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACjI,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAAC;IACxJ,CAAC;IAED;;;;OAIG;IACK,mBAAmB,CAAC,MAAc,EAAE,MAAuB;QACjE,6BAA6B;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,IAAA,4BAAY,EACV,IAAI,CAAC,MAAM,EACX,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EACnG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CACnC,CAAC;gBACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,gDAAgD;gBAChD,IAAI,CAAC;oBACH,IAAA,4BAAY,EAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACvH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvD,CAAC;gBAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;gBAClC,IAAA,4BAAY,EAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,eAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEO,kBAAkB,CAAC,MAAc;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,IAAA,4BAAY,EAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;oBAC3E,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,QAAQ;iBAChB,CAAC,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,4BAAY,EAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBAC5F,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM;iBACnB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACnD,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAEzD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAA,4BAAY,EAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE;oBAC1F,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,QAAQ;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC,MAAM,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;CACF;AAjUD,wCAiUC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=policy-executor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-executor.test.d.ts","sourceRoot":"","sources":["../../src/enforcement/policy-executor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const { mockExecFileSync } = vitest_1.vi.hoisted(() => ({
5
+ mockExecFileSync: vitest_1.vi.fn(),
6
+ }));
7
+ vitest_1.vi.mock('child_process', () => ({
8
+ execFileSync: mockExecFileSync,
9
+ }));
10
+ const policy_executor_1 = require("./policy-executor");
11
+ (0, vitest_1.describe)('PolicyExecutor', () => {
12
+ (0, vitest_1.beforeEach)(() => {
13
+ vitest_1.vi.clearAllMocks();
14
+ mockExecFileSync.mockImplementation((_bin, args) => {
15
+ if (args[0] === '--version')
16
+ return '';
17
+ if (args[0] === 'add' && args[1] === 'rule')
18
+ return '';
19
+ if (args[0] === '-a' && args[1] === 'list') {
20
+ return 'table inet filter {\n chain output {\n ip daddr 203.0.113.10 drop comment "policy-1" # handle 17\n }\n}\n';
21
+ }
22
+ if (args[0] === 'delete' && args[1] === 'rule')
23
+ return '';
24
+ if (args[0] === '-C' || args[0] === '-A' || args[0] === '-D')
25
+ return '';
26
+ return '';
27
+ });
28
+ });
29
+ (0, vitest_1.it)('removes nft rules when a synced policy is deleted', async () => {
30
+ const executor = new policy_executor_1.PolicyExecutor({ sentry: { hostId: 'host-1' } });
31
+ await executor.apply([
32
+ {
33
+ id: 'policy-1',
34
+ hostId: null,
35
+ type: 'block_domain',
36
+ target: '203.0.113.10',
37
+ enabled: true,
38
+ action: 'deny',
39
+ description: '',
40
+ },
41
+ ], []);
42
+ await executor.apply([], []);
43
+ (0, vitest_1.expect)(mockExecFileSync).toHaveBeenCalledWith(vitest_1.expect.stringContaining('/nft'), ['delete', 'rule', 'inet', 'filter', 'output', 'handle', '17'], vitest_1.expect.any(Object));
44
+ });
45
+ });
46
+ //# sourceMappingURL=policy-executor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-executor.test.js","sourceRoot":"","sources":["../../src/enforcement/policy-executor.test.ts"],"names":[],"mappings":";;AAAA,mCAA8D;AAE9D,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,gBAAgB,EAAE,WAAE,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,WAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,YAAY,EAAE,gBAAgB;CAC/B,CAAC,CAAC,CAAC;AAEJ,uDAAmD;AAEnD,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,WAAE,CAAC,aAAa,EAAE,CAAC;QACnB,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,IAAY,EAAE,IAAc,EAAE,EAAE;YACnE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW;gBAAE,OAAO,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;gBAAE,OAAO,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC3C,OAAO,gHAAgH,CAAC;YAC1H,CAAC;YACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;gBAAE,OAAO,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YACxE,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,QAAQ,GAAG,IAAI,gCAAc,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAW,CAAC,CAAC;QAE/E,MAAM,QAAQ,CAAC,KAAK,CAAC;YACnB;gBACE,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,EAAE;aAChB;SACF,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAE7B,IAAA,eAAM,EAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAC3C,eAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAC/B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAC9D,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Strict validator for policy `target` strings that flow from the NeuroSec
3
+ * cloud into shell-executing code paths (iptables/nft/process.kill).
4
+ *
5
+ * Design intent: targets are NEVER interpolated into shell strings without
6
+ * passing this validator first. Any rejected target is logged and dropped —
7
+ * we fail closed rather than risk injection.
8
+ *
9
+ * Accepted forms:
10
+ * - hostname: foo.example.com (RFC 1123, max 253 chars, no whitespace)
11
+ * - wildcard: *.example.com
12
+ * - IPv4: 203.0.113.42
13
+ * - IPv4 CIDR: 10.0.0.0/8
14
+ * - IPv6: 2001:db8::1
15
+ * - IPv6 CIDR: 2001:db8::/32
16
+ * - pid spec: pid:12345
17
+ * - framework id: lowercase + digits + dash, 1-64 chars (e.g. "claude-code")
18
+ *
19
+ * Rejected:
20
+ * - shell metacharacters: ; | & $ ` < > ( ) " ' \ newline tab
21
+ * - leading dashes (could be parsed as a flag by iptables)
22
+ * - any value containing whitespace
23
+ */
24
+ export type TargetKind = 'hostname' | 'wildcard' | 'ipv4' | 'ipv4-cidr' | 'ipv6' | 'ipv6-cidr' | 'pid' | 'framework' | 'invalid';
25
+ export interface ValidatedTarget {
26
+ kind: TargetKind;
27
+ value: string;
28
+ pid?: number;
29
+ }
30
+ /**
31
+ * Classify and validate a target. Returns `invalid` for anything that should
32
+ * never be interpolated into a shell command.
33
+ */
34
+ export declare function validateTarget(raw: unknown): ValidatedTarget;
35
+ /** Returns true if the target is safe to use as an iptables/nft destination. */
36
+ export declare function isNetworkTarget(t: ValidatedTarget): boolean;
37
+ //# sourceMappingURL=target-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-validator.d.ts","sourceRoot":"","sources":["../../src/enforcement/target-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAaH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC;AAEjI,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAsBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAuC5D;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAO3D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-validator.js","sourceRoot":"","sources":["../../src/enforcement/target-validator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;AA6CH,wCAuCC;AAGD,0CAOC;AA5FD,MAAM,WAAW,GAAG,yHAAyH,CAAC;AAC9I,MAAM,OAAO,GAAG,kHAAkH,CAAC;AACnI,MAAM,YAAY,GAAG,oIAAoI,CAAC;AAC1J,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAClC,MAAM,YAAY,GAAG,6CAA6C,CAAC;AACnE,MAAM,MAAM,GAAG,oBAAoB,CAAC;AACpC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAE9C,yDAAyD;AACzD,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAU7C,SAAS,WAAW,CAAC,KAAa;IAChC,gFAAgF;IAChF,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,8EAA8E;IAC9E,IAAI,CAAC;QACH,8BAA8B;QAC9B,IAAI,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,GAAY;IACzC,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,MAAM,CAAC;IAC5D,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,gCAAgC;IAE1E,UAAU;IACV,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,OAAS;YAAE,OAAO,MAAM,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAClE,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACxD,IAAI,eAAe,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAChE,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAEvD,wEAAwE;IACxE,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,6DAA6D;QAC7D,6EAA6E;QAC7E,8EAA8E;QAC9E,6EAA6E;QAC7E,iEAAiE;QACjE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAElE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,SAAgB,eAAe,CAAC,CAAkB;IAChD,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU;WACvB,CAAC,CAAC,IAAI,KAAK,UAAU;WACrB,CAAC,CAAC,IAAI,KAAK,MAAM;WACjB,CAAC,CAAC,IAAI,KAAK,WAAW;WACtB,CAAC,CAAC,IAAI,KAAK,MAAM;WACjB,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=target-validator.test.d.ts.map