hackmyagent 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +66 -28
- package/dist/arp/cli/index.d.ts +3 -0
- package/dist/arp/cli/index.d.ts.map +1 -0
- package/dist/arp/cli/index.js +219 -0
- package/dist/arp/cli/index.js.map +1 -0
- package/dist/arp/config/loader.d.ts +8 -0
- package/dist/arp/config/loader.d.ts.map +1 -0
- package/dist/arp/config/loader.js +102 -0
- package/dist/arp/config/loader.js.map +1 -0
- package/dist/arp/enforcement/kill-switch.d.ts +22 -0
- package/dist/arp/enforcement/kill-switch.d.ts.map +1 -0
- package/dist/arp/enforcement/kill-switch.js +122 -0
- package/dist/arp/enforcement/kill-switch.js.map +1 -0
- package/dist/arp/engine/event-engine.d.ts +29 -0
- package/dist/arp/engine/event-engine.d.ts.map +1 -0
- package/dist/arp/engine/event-engine.js +233 -0
- package/dist/arp/engine/event-engine.js.map +1 -0
- package/dist/arp/index.d.ts +81 -0
- package/dist/arp/index.d.ts.map +1 -0
- package/dist/arp/index.js +239 -0
- package/dist/arp/index.js.map +1 -0
- package/dist/arp/intelligence/adapters.d.ts +45 -0
- package/dist/arp/intelligence/adapters.d.ts.map +1 -0
- package/dist/arp/intelligence/adapters.js +222 -0
- package/dist/arp/intelligence/adapters.js.map +1 -0
- package/dist/arp/intelligence/anomaly.d.ts +32 -0
- package/dist/arp/intelligence/anomaly.d.ts.map +1 -0
- package/dist/arp/intelligence/anomaly.js +80 -0
- package/dist/arp/intelligence/anomaly.js.map +1 -0
- package/dist/arp/intelligence/budget.d.ts +33 -0
- package/dist/arp/intelligence/budget.d.ts.map +1 -0
- package/dist/arp/intelligence/budget.js +150 -0
- package/dist/arp/intelligence/budget.js.map +1 -0
- package/dist/arp/intelligence/coordinator.d.ts +43 -0
- package/dist/arp/intelligence/coordinator.d.ts.map +1 -0
- package/dist/arp/intelligence/coordinator.js +301 -0
- package/dist/arp/intelligence/coordinator.js.map +1 -0
- package/dist/arp/interceptors/a2a-protocol.d.ts +29 -0
- package/dist/arp/interceptors/a2a-protocol.d.ts.map +1 -0
- package/dist/arp/interceptors/a2a-protocol.js +111 -0
- package/dist/arp/interceptors/a2a-protocol.js.map +1 -0
- package/dist/arp/interceptors/filesystem.d.ts +33 -0
- package/dist/arp/interceptors/filesystem.d.ts.map +1 -0
- package/dist/arp/interceptors/filesystem.js +199 -0
- package/dist/arp/interceptors/filesystem.js.map +1 -0
- package/dist/arp/interceptors/mcp-protocol.d.ts +25 -0
- package/dist/arp/interceptors/mcp-protocol.d.ts.map +1 -0
- package/dist/arp/interceptors/mcp-protocol.js +126 -0
- package/dist/arp/interceptors/mcp-protocol.js.map +1 -0
- package/dist/arp/interceptors/network.d.ts +26 -0
- package/dist/arp/interceptors/network.d.ts.map +1 -0
- package/dist/arp/interceptors/network.js +146 -0
- package/dist/arp/interceptors/network.js.map +1 -0
- package/dist/arp/interceptors/process.d.ts +26 -0
- package/dist/arp/interceptors/process.d.ts.map +1 -0
- package/dist/arp/interceptors/process.js +157 -0
- package/dist/arp/interceptors/process.js.map +1 -0
- package/dist/arp/interceptors/prompt.d.ts +29 -0
- package/dist/arp/interceptors/prompt.d.ts.map +1 -0
- package/dist/arp/interceptors/prompt.js +82 -0
- package/dist/arp/interceptors/prompt.js.map +1 -0
- package/dist/arp/license/index.d.ts +59 -0
- package/dist/arp/license/index.d.ts.map +1 -0
- package/dist/arp/license/index.js +78 -0
- package/dist/arp/license/index.js.map +1 -0
- package/dist/arp/monitors/filesystem.d.ts +21 -0
- package/dist/arp/monitors/filesystem.d.ts.map +1 -0
- package/dist/arp/monitors/filesystem.js +141 -0
- package/dist/arp/monitors/filesystem.js.map +1 -0
- package/dist/arp/monitors/network.d.ts +32 -0
- package/dist/arp/monitors/network.d.ts.map +1 -0
- package/dist/arp/monitors/network.js +301 -0
- package/dist/arp/monitors/network.js.map +1 -0
- package/dist/arp/monitors/process.d.ts +24 -0
- package/dist/arp/monitors/process.d.ts.map +1 -0
- package/dist/arp/monitors/process.js +205 -0
- package/dist/arp/monitors/process.js.map +1 -0
- package/dist/arp/patterns/ai-threats.d.ts +48 -0
- package/dist/arp/patterns/ai-threats.d.ts.map +1 -0
- package/dist/arp/patterns/ai-threats.js +215 -0
- package/dist/arp/patterns/ai-threats.js.map +1 -0
- package/dist/arp/proxy/forward.d.ts +23 -0
- package/dist/arp/proxy/forward.d.ts.map +1 -0
- package/dist/arp/proxy/forward.js +152 -0
- package/dist/arp/proxy/forward.js.map +1 -0
- package/dist/arp/proxy/server.d.ts +45 -0
- package/dist/arp/proxy/server.d.ts.map +1 -0
- package/dist/arp/proxy/server.js +331 -0
- package/dist/arp/proxy/server.js.map +1 -0
- package/dist/arp/reporting/local-log.d.ts +22 -0
- package/dist/arp/reporting/local-log.d.ts.map +1 -0
- package/dist/arp/reporting/local-log.js +116 -0
- package/dist/arp/reporting/local-log.js.map +1 -0
- package/dist/arp/types.d.ts +230 -0
- package/dist/arp/types.d.ts.map +1 -0
- package/dist/arp/types.js +4 -0
- package/dist/arp/types.js.map +1 -0
- package/dist/attack/custom-payloads.d.ts +11 -0
- package/dist/attack/custom-payloads.d.ts.map +1 -0
- package/dist/attack/custom-payloads.js +108 -0
- package/dist/attack/custom-payloads.js.map +1 -0
- package/dist/attack/fail-policy.d.ts +16 -0
- package/dist/attack/fail-policy.d.ts.map +1 -0
- package/dist/attack/fail-policy.js +36 -0
- package/dist/attack/fail-policy.js.map +1 -0
- package/dist/attack/index.d.ts +12 -0
- package/dist/attack/index.d.ts.map +1 -0
- package/dist/attack/index.js +30 -0
- package/dist/attack/index.js.map +1 -0
- package/dist/attack/payloads/a2a-attacks.d.ts +12 -0
- package/dist/attack/payloads/a2a-attacks.d.ts.map +1 -0
- package/dist/attack/payloads/a2a-attacks.js +221 -0
- package/dist/attack/payloads/a2a-attacks.js.map +1 -0
- package/dist/attack/payloads/capability-abuse.d.ts +8 -0
- package/dist/attack/payloads/capability-abuse.d.ts.map +1 -0
- package/dist/attack/payloads/capability-abuse.js +222 -0
- package/dist/attack/payloads/capability-abuse.js.map +1 -0
- package/dist/attack/payloads/context-manipulation.d.ts +8 -0
- package/dist/attack/payloads/context-manipulation.d.ts.map +1 -0
- package/dist/attack/payloads/context-manipulation.js +217 -0
- package/dist/attack/payloads/context-manipulation.js.map +1 -0
- package/dist/attack/payloads/data-exfiltration.d.ts +8 -0
- package/dist/attack/payloads/data-exfiltration.d.ts.map +1 -0
- package/dist/attack/payloads/data-exfiltration.js +249 -0
- package/dist/attack/payloads/data-exfiltration.js.map +1 -0
- package/dist/attack/payloads/index.d.ts +29 -0
- package/dist/attack/payloads/index.d.ts.map +1 -0
- package/dist/attack/payloads/index.js +76 -0
- package/dist/attack/payloads/index.js.map +1 -0
- package/dist/attack/payloads/jailbreak.d.ts +8 -0
- package/dist/attack/payloads/jailbreak.d.ts.map +1 -0
- package/dist/attack/payloads/jailbreak.js +265 -0
- package/dist/attack/payloads/jailbreak.js.map +1 -0
- package/dist/attack/payloads/mcp-exploitation.d.ts +12 -0
- package/dist/attack/payloads/mcp-exploitation.d.ts.map +1 -0
- package/dist/attack/payloads/mcp-exploitation.js +221 -0
- package/dist/attack/payloads/mcp-exploitation.js.map +1 -0
- package/dist/attack/payloads/prompt-injection.d.ts +8 -0
- package/dist/attack/payloads/prompt-injection.d.ts.map +1 -0
- package/dist/attack/payloads/prompt-injection.js +262 -0
- package/dist/attack/payloads/prompt-injection.js.map +1 -0
- package/dist/attack/scanner.d.ts +84 -0
- package/dist/attack/scanner.d.ts.map +1 -0
- package/dist/attack/scanner.js +509 -0
- package/dist/attack/scanner.js.map +1 -0
- package/dist/attack/types.d.ts +153 -0
- package/dist/attack/types.d.ts.map +1 -0
- package/dist/attack/types.js +46 -0
- package/dist/attack/types.js.map +1 -0
- package/dist/benchmarks/index.d.ts +16 -0
- package/dist/benchmarks/index.d.ts.map +1 -0
- package/dist/benchmarks/index.js +27 -0
- package/dist/benchmarks/index.js.map +1 -0
- package/dist/benchmarks/oasb-1.d.ts +112 -0
- package/dist/benchmarks/oasb-1.d.ts.map +1 -0
- package/dist/benchmarks/oasb-1.js +1124 -0
- package/dist/benchmarks/oasb-1.js.map +1 -0
- package/dist/checker/check-skill.d.ts +48 -0
- package/dist/checker/check-skill.d.ts.map +1 -0
- package/dist/checker/check-skill.js +105 -0
- package/dist/checker/check-skill.js.map +1 -0
- package/dist/checker/index.d.ts +12 -0
- package/dist/checker/index.d.ts.map +1 -0
- package/dist/checker/index.js +16 -0
- package/dist/checker/index.js.map +1 -0
- package/dist/checker/permission-analyzer.d.ts +12 -0
- package/dist/checker/permission-analyzer.d.ts.map +1 -0
- package/dist/checker/permission-analyzer.js +84 -0
- package/dist/checker/permission-analyzer.js.map +1 -0
- package/dist/checker/publisher-verifier.d.ts +34 -0
- package/dist/checker/publisher-verifier.d.ts.map +1 -0
- package/dist/checker/publisher-verifier.js +121 -0
- package/dist/checker/publisher-verifier.js.map +1 -0
- package/dist/checker/skill-identifier.d.ts +14 -0
- package/dist/checker/skill-identifier.d.ts.map +1 -0
- package/dist/checker/skill-identifier.js +55 -0
- package/dist/checker/skill-identifier.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3534 -0
- package/dist/cli.js.map +1 -0
- package/dist/hardening/index.d.ts +7 -0
- package/dist/hardening/index.d.ts.map +1 -0
- package/dist/hardening/index.js +9 -0
- package/dist/hardening/index.js.map +1 -0
- package/dist/hardening/scanner.d.ts +147 -0
- package/dist/hardening/scanner.d.ts.map +1 -0
- package/dist/hardening/scanner.js +5445 -0
- package/dist/hardening/scanner.js.map +1 -0
- package/dist/hardening/security-check.d.ts +85 -0
- package/dist/hardening/security-check.d.ts.map +1 -0
- package/dist/hardening/security-check.js +6 -0
- package/dist/hardening/security-check.js.map +1 -0
- package/dist/index.d.ts +38 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -3525
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.js +10 -10
- package/dist/mcp-server.js.map +1 -1
- package/dist/oasb/config/dvaa-targets.d.ts +13 -0
- package/dist/oasb/config/dvaa-targets.d.ts.map +1 -0
- package/dist/oasb/config/dvaa-targets.js +89 -0
- package/dist/oasb/config/dvaa-targets.js.map +1 -0
- package/dist/oasb/harness/arp-wrapper.d.ts +29 -0
- package/dist/oasb/harness/arp-wrapper.d.ts.map +1 -0
- package/dist/oasb/harness/arp-wrapper.js +134 -0
- package/dist/oasb/harness/arp-wrapper.js.map +1 -0
- package/dist/oasb/harness/dvaa-client.d.ts +46 -0
- package/dist/oasb/harness/dvaa-client.d.ts.map +1 -0
- package/dist/oasb/harness/dvaa-client.js +98 -0
- package/dist/oasb/harness/dvaa-client.js.map +1 -0
- package/dist/oasb/harness/dvaa-manager.d.ts +17 -0
- package/dist/oasb/harness/dvaa-manager.d.ts.map +1 -0
- package/dist/oasb/harness/dvaa-manager.js +132 -0
- package/dist/oasb/harness/dvaa-manager.js.map +1 -0
- package/dist/oasb/harness/event-collector.d.ts +33 -0
- package/dist/oasb/harness/event-collector.d.ts.map +1 -0
- package/dist/oasb/harness/event-collector.js +86 -0
- package/dist/oasb/harness/event-collector.js.map +1 -0
- package/dist/oasb/harness/metrics.d.ts +14 -0
- package/dist/oasb/harness/metrics.d.ts.map +1 -0
- package/dist/oasb/harness/metrics.js +56 -0
- package/dist/oasb/harness/metrics.js.map +1 -0
- package/dist/oasb/harness/mock-llm-adapter.d.ts +34 -0
- package/dist/oasb/harness/mock-llm-adapter.d.ts.map +1 -0
- package/dist/oasb/harness/mock-llm-adapter.js +69 -0
- package/dist/oasb/harness/mock-llm-adapter.js.map +1 -0
- package/dist/oasb/harness/types.d.ts +74 -0
- package/dist/oasb/harness/types.d.ts.map +1 -0
- package/dist/oasb/harness/types.js +3 -0
- package/dist/oasb/harness/types.js.map +1 -0
- package/dist/plugins/core.d.ts +109 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +30 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/credvault.d.ts +22 -0
- package/dist/plugins/credvault.d.ts.map +1 -0
- package/dist/plugins/credvault.js +374 -0
- package/dist/plugins/credvault.js.map +1 -0
- package/dist/plugins/signcrypt.d.ts +27 -0
- package/dist/plugins/signcrypt.d.ts.map +1 -0
- package/dist/plugins/signcrypt.js +317 -0
- package/dist/plugins/signcrypt.js.map +1 -0
- package/dist/plugins/skillguard.d.ts +25 -0
- package/dist/plugins/skillguard.d.ts.map +1 -0
- package/dist/plugins/skillguard.js +346 -0
- package/dist/plugins/skillguard.js.map +1 -0
- package/dist/registry/client.d.ts +125 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +308 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +10 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/scanner/external-scanner.d.ts +13 -0
- package/dist/scanner/external-scanner.d.ts.map +1 -0
- package/dist/scanner/external-scanner.js +299 -0
- package/dist/scanner/external-scanner.js.map +1 -0
- package/dist/scanner/index.d.ts +6 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +9 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/types.d.ts +32 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +6 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/semantic/deep-scan.d.ts +13 -0
- package/dist/semantic/deep-scan.d.ts.map +1 -0
- package/dist/semantic/deep-scan.js +63 -0
- package/dist/semantic/deep-scan.js.map +1 -0
- package/dist/semantic/index.d.ts +17 -0
- package/dist/semantic/index.d.ts.map +1 -0
- package/dist/semantic/index.js +39 -0
- package/dist/semantic/index.js.map +1 -0
- package/dist/semantic/integration/cost-estimator.d.ts +17 -0
- package/dist/semantic/integration/cost-estimator.d.ts.map +1 -0
- package/dist/semantic/integration/cost-estimator.js +54 -0
- package/dist/semantic/integration/cost-estimator.js.map +1 -0
- package/dist/semantic/integration/finding-adapter.d.ts +34 -0
- package/dist/semantic/integration/finding-adapter.d.ts.map +1 -0
- package/dist/semantic/integration/finding-adapter.js +41 -0
- package/dist/semantic/integration/finding-adapter.js.map +1 -0
- package/dist/semantic/integration/oasb-upgrader.d.ts +20 -0
- package/dist/semantic/integration/oasb-upgrader.d.ts.map +1 -0
- package/dist/semantic/integration/oasb-upgrader.js +47 -0
- package/dist/semantic/integration/oasb-upgrader.js.map +1 -0
- package/dist/semantic/llm/budget.d.ts +50 -0
- package/dist/semantic/llm/budget.d.ts.map +1 -0
- package/dist/semantic/llm/budget.js +139 -0
- package/dist/semantic/llm/budget.js.map +1 -0
- package/dist/semantic/llm/cache.d.ts +36 -0
- package/dist/semantic/llm/cache.d.ts.map +1 -0
- package/dist/semantic/llm/cache.js +103 -0
- package/dist/semantic/llm/cache.js.map +1 -0
- package/dist/semantic/llm/client.d.ts +49 -0
- package/dist/semantic/llm/client.d.ts.map +1 -0
- package/dist/semantic/llm/client.js +64 -0
- package/dist/semantic/llm/client.js.map +1 -0
- package/dist/semantic/llm/index.d.ts +33 -0
- package/dist/semantic/llm/index.d.ts.map +1 -0
- package/dist/semantic/llm/index.js +129 -0
- package/dist/semantic/llm/index.js.map +1 -0
- package/dist/semantic/llm/prompts.d.ts +30 -0
- package/dist/semantic/llm/prompts.d.ts.map +1 -0
- package/dist/semantic/llm/prompts.js +120 -0
- package/dist/semantic/llm/prompts.js.map +1 -0
- package/dist/semantic/structural/credential-context.d.ts +14 -0
- package/dist/semantic/structural/credential-context.d.ts.map +1 -0
- package/dist/semantic/structural/credential-context.js +295 -0
- package/dist/semantic/structural/credential-context.js.map +1 -0
- package/dist/semantic/structural/index.d.ts +28 -0
- package/dist/semantic/structural/index.d.ts.map +1 -0
- package/dist/semantic/structural/index.js +138 -0
- package/dist/semantic/structural/index.js.map +1 -0
- package/dist/semantic/structural/instruction.d.ts +19 -0
- package/dist/semantic/structural/instruction.d.ts.map +1 -0
- package/dist/semantic/structural/instruction.js +167 -0
- package/dist/semantic/structural/instruction.js.map +1 -0
- package/dist/semantic/structural/mcp-config.d.ts +22 -0
- package/dist/semantic/structural/mcp-config.d.ts.map +1 -0
- package/dist/semantic/structural/mcp-config.js +294 -0
- package/dist/semantic/structural/mcp-config.js.map +1 -0
- package/dist/semantic/structural/permission-model.d.ts +16 -0
- package/dist/semantic/structural/permission-model.d.ts.map +1 -0
- package/dist/semantic/structural/permission-model.js +121 -0
- package/dist/semantic/structural/permission-model.js.map +1 -0
- package/dist/semantic/types.d.ts +122 -0
- package/dist/semantic/types.d.ts.map +1 -0
- package/dist/semantic/types.js +10 -0
- package/dist/semantic/types.js.map +1 -0
- package/package.json +25 -14
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.LocalLogger = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const EVENT_LOG = 'events.jsonl';
|
|
40
|
+
const ENFORCEMENT_LOG = 'enforcement.jsonl';
|
|
41
|
+
const MAX_LOG_SIZE = 50 * 1024 * 1024; // 50MB
|
|
42
|
+
/**
|
|
43
|
+
* Local JSONL logger — append-only event and enforcement logs.
|
|
44
|
+
* Follows the aim-core audit.jsonl pattern.
|
|
45
|
+
*/
|
|
46
|
+
class LocalLogger {
|
|
47
|
+
constructor(dataDir) {
|
|
48
|
+
this.dataDir = dataDir;
|
|
49
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
/** Log an ARP event */
|
|
52
|
+
logEvent(event) {
|
|
53
|
+
this.appendLog(EVENT_LOG, event);
|
|
54
|
+
}
|
|
55
|
+
/** Log an enforcement action */
|
|
56
|
+
logEnforcement(result) {
|
|
57
|
+
const entry = {
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
action: result.action,
|
|
60
|
+
targetPid: result.targetPid,
|
|
61
|
+
success: result.success,
|
|
62
|
+
reason: result.reason,
|
|
63
|
+
eventId: result.event.id,
|
|
64
|
+
eventSource: result.event.source,
|
|
65
|
+
eventSeverity: result.event.severity,
|
|
66
|
+
};
|
|
67
|
+
this.appendLog(ENFORCEMENT_LOG, entry);
|
|
68
|
+
}
|
|
69
|
+
/** Read recent events */
|
|
70
|
+
readEvents(limit) {
|
|
71
|
+
return this.readLog(EVENT_LOG, limit);
|
|
72
|
+
}
|
|
73
|
+
/** Read recent enforcement actions */
|
|
74
|
+
readEnforcements(limit) {
|
|
75
|
+
return this.readLog(ENFORCEMENT_LOG, limit);
|
|
76
|
+
}
|
|
77
|
+
/** Tail the event log (returns last N lines as JSON) */
|
|
78
|
+
tail(n = 20) {
|
|
79
|
+
return this.readLog(EVENT_LOG, n);
|
|
80
|
+
}
|
|
81
|
+
appendLog(filename, data) {
|
|
82
|
+
const filePath = path.join(this.dataDir, filename);
|
|
83
|
+
// Rotate if needed
|
|
84
|
+
try {
|
|
85
|
+
const stat = fs.statSync(filePath);
|
|
86
|
+
if (stat.size > MAX_LOG_SIZE) {
|
|
87
|
+
const rotatedPath = `${filePath}.${Date.now()}`;
|
|
88
|
+
fs.renameSync(filePath, rotatedPath);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// File doesn't exist yet
|
|
93
|
+
}
|
|
94
|
+
const line = JSON.stringify(data) + '\n';
|
|
95
|
+
fs.appendFileSync(filePath, line, 'utf-8');
|
|
96
|
+
}
|
|
97
|
+
readLog(filename, limit) {
|
|
98
|
+
const filePath = path.join(this.dataDir, filename);
|
|
99
|
+
if (!fs.existsSync(filePath))
|
|
100
|
+
return [];
|
|
101
|
+
try {
|
|
102
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
103
|
+
const lines = content.trim().split('\n').filter(Boolean);
|
|
104
|
+
const entries = lines.map((l) => JSON.parse(l));
|
|
105
|
+
if (limit && limit > 0) {
|
|
106
|
+
return entries.slice(-limit);
|
|
107
|
+
}
|
|
108
|
+
return entries;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.LocalLogger = LocalLogger;
|
|
116
|
+
//# sourceMappingURL=local-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-log.js","sourceRoot":"","sources":["../../../src/arp/reporting/local-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/** An event emitted by a monitor */
|
|
2
|
+
export interface ARPEvent {
|
|
3
|
+
/** Unique event ID */
|
|
4
|
+
id: string;
|
|
5
|
+
/** ISO timestamp */
|
|
6
|
+
timestamp: string;
|
|
7
|
+
/** Monitor that generated the event */
|
|
8
|
+
source: MonitorType;
|
|
9
|
+
/** Event category */
|
|
10
|
+
category: EventCategory;
|
|
11
|
+
/** Severity determined by L0 rules */
|
|
12
|
+
severity: EventSeverity;
|
|
13
|
+
/** Human-readable description */
|
|
14
|
+
description: string;
|
|
15
|
+
/** Structured event data (monitor-specific) */
|
|
16
|
+
data: Record<string, unknown>;
|
|
17
|
+
/** Which intelligence layer classified this event */
|
|
18
|
+
classifiedBy: 'L0-rules' | 'L1-statistical' | 'L2-llm';
|
|
19
|
+
/** LLM assessment (only if classified by L2) */
|
|
20
|
+
llmAssessment?: LLMAssessment;
|
|
21
|
+
}
|
|
22
|
+
export type MonitorType = 'process' | 'network' | 'filesystem' | 'skill' | 'heartbeat' | 'prompt' | 'mcp-protocol' | 'a2a-protocol';
|
|
23
|
+
export type EventCategory = 'normal' | 'anomaly' | 'violation' | 'threat';
|
|
24
|
+
export type EventSeverity = 'info' | 'low' | 'medium' | 'high' | 'critical';
|
|
25
|
+
/** Result from LLM analysis of a suspicious event */
|
|
26
|
+
export interface LLMAssessment {
|
|
27
|
+
/** Is this event consistent with the agent's declared purpose? */
|
|
28
|
+
consistent: boolean;
|
|
29
|
+
/** Confidence score 0-1 */
|
|
30
|
+
confidence: number;
|
|
31
|
+
/** 1-2 sentence reasoning */
|
|
32
|
+
reasoning: string;
|
|
33
|
+
/** Recommended action */
|
|
34
|
+
recommendation: 'allow' | 'alert' | 'pause' | 'kill';
|
|
35
|
+
/** Tokens used for this assessment */
|
|
36
|
+
tokensUsed: number;
|
|
37
|
+
/** Estimated cost in USD */
|
|
38
|
+
estimatedCost: number;
|
|
39
|
+
}
|
|
40
|
+
export interface ARPConfig {
|
|
41
|
+
/** Agent name (for logging and LLM context) */
|
|
42
|
+
agentName: string;
|
|
43
|
+
/** Agent's declared purpose / description */
|
|
44
|
+
agentDescription?: string;
|
|
45
|
+
/** Agent's declared capabilities (for LLM context) */
|
|
46
|
+
declaredCapabilities?: string[];
|
|
47
|
+
/** Data directory for logs and state */
|
|
48
|
+
dataDir?: string;
|
|
49
|
+
/** Which monitors to enable (default: all) */
|
|
50
|
+
monitors?: MonitorConfig;
|
|
51
|
+
/** Alert and enforcement rules */
|
|
52
|
+
rules?: AlertRule[];
|
|
53
|
+
/** Intelligence layer configuration */
|
|
54
|
+
intelligence?: IntelligenceConfig;
|
|
55
|
+
/** Application-level interceptors (zero-latency, 100% accuracy) */
|
|
56
|
+
interceptors?: InterceptorConfig;
|
|
57
|
+
/** AI-layer protection (prompt, MCP, A2A scanning) */
|
|
58
|
+
aiLayer?: AILayerConfig;
|
|
59
|
+
/** HTTP reverse proxy configuration */
|
|
60
|
+
proxy?: ProxyConfig;
|
|
61
|
+
}
|
|
62
|
+
export interface MonitorConfig {
|
|
63
|
+
process?: {
|
|
64
|
+
enabled: boolean;
|
|
65
|
+
intervalMs?: number;
|
|
66
|
+
};
|
|
67
|
+
network?: {
|
|
68
|
+
enabled: boolean;
|
|
69
|
+
intervalMs?: number;
|
|
70
|
+
allowedHosts?: string[];
|
|
71
|
+
};
|
|
72
|
+
filesystem?: {
|
|
73
|
+
enabled: boolean;
|
|
74
|
+
watchPaths?: string[];
|
|
75
|
+
allowedPaths?: string[];
|
|
76
|
+
};
|
|
77
|
+
skill?: {
|
|
78
|
+
enabled: boolean;
|
|
79
|
+
};
|
|
80
|
+
heartbeat?: {
|
|
81
|
+
enabled: boolean;
|
|
82
|
+
expectedUrl?: string;
|
|
83
|
+
maxStaleMs?: number;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Interceptor configuration — application-level hooks for zero-latency detection */
|
|
87
|
+
export interface InterceptorConfig {
|
|
88
|
+
/** Hook child_process module for process spawn interception */
|
|
89
|
+
process?: {
|
|
90
|
+
enabled: boolean;
|
|
91
|
+
};
|
|
92
|
+
/** Hook net.Socket for outbound connection interception */
|
|
93
|
+
network?: {
|
|
94
|
+
enabled: boolean;
|
|
95
|
+
allowedHosts?: string[];
|
|
96
|
+
};
|
|
97
|
+
/** Hook fs module for file operation interception */
|
|
98
|
+
filesystem?: {
|
|
99
|
+
enabled: boolean;
|
|
100
|
+
allowedPaths?: string[];
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export interface AlertRule {
|
|
104
|
+
/** Rule name */
|
|
105
|
+
name: string;
|
|
106
|
+
/** Trigger condition */
|
|
107
|
+
condition: AlertCondition;
|
|
108
|
+
/** Action to take */
|
|
109
|
+
action: 'log' | 'alert' | 'pause' | 'kill';
|
|
110
|
+
/** Escalate to L2 LLM for confirmation before enforcement? */
|
|
111
|
+
requireLlmConfirmation?: boolean;
|
|
112
|
+
}
|
|
113
|
+
export interface AlertCondition {
|
|
114
|
+
/** Monitor source to match */
|
|
115
|
+
source?: MonitorType;
|
|
116
|
+
/** Category to match */
|
|
117
|
+
category?: EventCategory;
|
|
118
|
+
/** Minimum severity to trigger */
|
|
119
|
+
minSeverity?: EventSeverity;
|
|
120
|
+
/** Custom field match (e.g., { "data.host": "*.evil.com" }) */
|
|
121
|
+
fieldMatch?: Record<string, string>;
|
|
122
|
+
/** Threshold: trigger after N events in windowMs */
|
|
123
|
+
threshold?: {
|
|
124
|
+
count: number;
|
|
125
|
+
windowMs: number;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export interface IntelligenceConfig {
|
|
129
|
+
/** Enable LLM-assisted analysis (default: true) */
|
|
130
|
+
enabled?: boolean;
|
|
131
|
+
/** LLM adapter to use */
|
|
132
|
+
adapter?: LLMAdapterType;
|
|
133
|
+
/** Custom adapter config (API key, model, etc.) */
|
|
134
|
+
adapterConfig?: Record<string, unknown>;
|
|
135
|
+
/** Monthly budget in USD (default: 5.00) */
|
|
136
|
+
budgetUsd?: number;
|
|
137
|
+
/** Maximum tokens per single assessment (default: 300) */
|
|
138
|
+
maxTokensPerCall?: number;
|
|
139
|
+
/** Maximum L2 calls per hour (default: 20) */
|
|
140
|
+
maxCallsPerHour?: number;
|
|
141
|
+
/** Minimum L1 severity to escalate to L2 */
|
|
142
|
+
minSeverityForLlm?: EventSeverity;
|
|
143
|
+
/** Batch low-priority anomalies instead of individual calls */
|
|
144
|
+
enableBatching?: boolean;
|
|
145
|
+
/** Batch window in ms (default: 300000 = 5 min) */
|
|
146
|
+
batchWindowMs?: number;
|
|
147
|
+
}
|
|
148
|
+
export type LLMAdapterType = 'anthropic' | 'openai' | 'ollama' | 'agent-proxy' | 'custom';
|
|
149
|
+
/** Interface that LLM adapters must implement */
|
|
150
|
+
export interface LLMAdapter {
|
|
151
|
+
/** Adapter name */
|
|
152
|
+
readonly name: string;
|
|
153
|
+
/** Send a micro-prompt and get a structured response */
|
|
154
|
+
assess(prompt: string, maxTokens: number): Promise<LLMResponse>;
|
|
155
|
+
/** Estimate cost for a given prompt length */
|
|
156
|
+
estimateCost(inputTokens: number, outputTokens: number): number;
|
|
157
|
+
/** Check if the adapter is available and configured */
|
|
158
|
+
healthCheck(): Promise<boolean>;
|
|
159
|
+
}
|
|
160
|
+
export interface LLMResponse {
|
|
161
|
+
content: string;
|
|
162
|
+
inputTokens: number;
|
|
163
|
+
outputTokens: number;
|
|
164
|
+
model: string;
|
|
165
|
+
}
|
|
166
|
+
export interface BudgetState {
|
|
167
|
+
/** Total spent in current period (USD) */
|
|
168
|
+
totalSpentUsd: number;
|
|
169
|
+
/** Period start (ISO timestamp) */
|
|
170
|
+
periodStart: string;
|
|
171
|
+
/** Number of L2 calls made */
|
|
172
|
+
totalCalls: number;
|
|
173
|
+
/** Calls in current hour */
|
|
174
|
+
callsThisHour: number;
|
|
175
|
+
/** Hour start (ISO timestamp) */
|
|
176
|
+
hourStart: string;
|
|
177
|
+
/** Per-call cost history (last 100) */
|
|
178
|
+
recentCosts: Array<{
|
|
179
|
+
timestamp: string;
|
|
180
|
+
cost: number;
|
|
181
|
+
tokens: number;
|
|
182
|
+
}>;
|
|
183
|
+
}
|
|
184
|
+
export type EnforcementAction = 'log' | 'alert' | 'pause' | 'kill';
|
|
185
|
+
export interface EnforcementResult {
|
|
186
|
+
action: EnforcementAction;
|
|
187
|
+
targetPid?: number;
|
|
188
|
+
success: boolean;
|
|
189
|
+
reason: string;
|
|
190
|
+
event: ARPEvent;
|
|
191
|
+
}
|
|
192
|
+
export interface AILayerConfig {
|
|
193
|
+
/** Prompt scanning (injection, jailbreak, data leak detection) */
|
|
194
|
+
prompt?: {
|
|
195
|
+
enabled: boolean;
|
|
196
|
+
};
|
|
197
|
+
/** MCP protocol scanning (parameter injection, path traversal, SSRF) */
|
|
198
|
+
mcp?: {
|
|
199
|
+
enabled: boolean;
|
|
200
|
+
allowedTools?: string[];
|
|
201
|
+
};
|
|
202
|
+
/** A2A protocol scanning (identity spoofing, delegation abuse) */
|
|
203
|
+
a2a?: {
|
|
204
|
+
enabled: boolean;
|
|
205
|
+
trustedAgents?: string[];
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
export interface ProxyConfig {
|
|
209
|
+
/** Port to listen on */
|
|
210
|
+
port: number;
|
|
211
|
+
/** Upstream targets */
|
|
212
|
+
upstreams: ProxyUpstream[];
|
|
213
|
+
/** Block requests on detection (default: false, alert only) */
|
|
214
|
+
blockOnDetection?: boolean;
|
|
215
|
+
}
|
|
216
|
+
export interface ProxyUpstream {
|
|
217
|
+
/** Path prefix to route (e.g., '/openai', '/mcp', '/a2a') */
|
|
218
|
+
pathPrefix: string;
|
|
219
|
+
/** Upstream target URL (e.g., 'http://localhost:3003') */
|
|
220
|
+
target: string;
|
|
221
|
+
/** Protocol hint for request/response parsing */
|
|
222
|
+
protocol: 'openai-api' | 'mcp-http' | 'a2a' | 'passthrough';
|
|
223
|
+
}
|
|
224
|
+
export interface Monitor {
|
|
225
|
+
readonly type: MonitorType;
|
|
226
|
+
start(): Promise<void>;
|
|
227
|
+
stop(): Promise<void>;
|
|
228
|
+
isRunning(): boolean;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/arp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/arp/types.ts"],"names":[],"mappings":";AAAA,yBAAyB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Payload Parser
|
|
3
|
+
* Parses and validates user-provided JSON payload files
|
|
4
|
+
*/
|
|
5
|
+
import { AttackPayload } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Parse a JSON string containing custom attack payloads.
|
|
8
|
+
* Validates structure, compiles regex patterns, and applies defaults.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseCustomPayloads(jsonString: string): AttackPayload[];
|
|
11
|
+
//# sourceMappingURL=custom-payloads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-payloads.d.ts","sourceRoot":"","sources":["../../src/attack/custom-payloads.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EAKd,MAAM,SAAS,CAAC;AAWjB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE,CAkFvE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Custom Payload Parser
|
|
4
|
+
* Parses and validates user-provided JSON payload files
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.parseCustomPayloads = parseCustomPayloads;
|
|
8
|
+
const VALID_CATEGORIES = [
|
|
9
|
+
'prompt-injection', 'jailbreak', 'data-exfiltration',
|
|
10
|
+
'capability-abuse', 'context-manipulation',
|
|
11
|
+
];
|
|
12
|
+
const VALID_INTENSITIES = ['passive', 'active', 'aggressive'];
|
|
13
|
+
const VALID_SEVERITIES = ['critical', 'high', 'medium', 'low', 'info'];
|
|
14
|
+
/**
|
|
15
|
+
* Parse a JSON string containing custom attack payloads.
|
|
16
|
+
* Validates structure, compiles regex patterns, and applies defaults.
|
|
17
|
+
*/
|
|
18
|
+
function parseCustomPayloads(jsonString) {
|
|
19
|
+
let parsed;
|
|
20
|
+
try {
|
|
21
|
+
parsed = JSON.parse(jsonString);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
throw new Error(`Invalid JSON in payload file: ${e instanceof Error ? e.message : 'parse error'}`);
|
|
25
|
+
}
|
|
26
|
+
if (!parsed || typeof parsed !== 'object' || !Array.isArray(parsed.payloads)) {
|
|
27
|
+
throw new Error('Payload file must contain a "payloads" array (e.g. { "payloads": [...] })');
|
|
28
|
+
}
|
|
29
|
+
const inputs = parsed.payloads;
|
|
30
|
+
if (inputs.length === 0) {
|
|
31
|
+
throw new Error('Payload file "payloads" array must not be empty');
|
|
32
|
+
}
|
|
33
|
+
const seenIds = new Set();
|
|
34
|
+
const results = [];
|
|
35
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
36
|
+
const raw = inputs[i];
|
|
37
|
+
const label = `payloads[${i}]`;
|
|
38
|
+
if (!raw || typeof raw !== 'object') {
|
|
39
|
+
throw new Error(`${label}: must be an object`);
|
|
40
|
+
}
|
|
41
|
+
// Required fields
|
|
42
|
+
if (typeof raw.id !== 'string' || raw.id.trim() === '') {
|
|
43
|
+
throw new Error(`${label}: "id" is required and must be a non-empty string`);
|
|
44
|
+
}
|
|
45
|
+
if (typeof raw.payload !== 'string' || raw.payload.trim() === '') {
|
|
46
|
+
throw new Error(`${label} (${raw.id}): "payload" is required and must be a non-empty string`);
|
|
47
|
+
}
|
|
48
|
+
const id = raw.id;
|
|
49
|
+
// Duplicate check
|
|
50
|
+
if (seenIds.has(id)) {
|
|
51
|
+
throw new Error(`${label}: duplicate id "${id}"`);
|
|
52
|
+
}
|
|
53
|
+
seenIds.add(id);
|
|
54
|
+
// Validate enum fields
|
|
55
|
+
if (raw.category !== undefined) {
|
|
56
|
+
if (!VALID_CATEGORIES.includes(raw.category)) {
|
|
57
|
+
throw new Error(`${label} (${id}): invalid category "${raw.category}". Use: ${VALID_CATEGORIES.join(', ')}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (raw.intensity !== undefined) {
|
|
61
|
+
if (!VALID_INTENSITIES.includes(raw.intensity)) {
|
|
62
|
+
throw new Error(`${label} (${id}): invalid intensity "${raw.intensity}". Use: ${VALID_INTENSITIES.join(', ')}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (raw.severity !== undefined) {
|
|
66
|
+
if (!VALID_SEVERITIES.includes(raw.severity)) {
|
|
67
|
+
throw new Error(`${label} (${id}): invalid severity "${raw.severity}". Use: ${VALID_SEVERITIES.join(', ')}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Compile regex patterns
|
|
71
|
+
const successIndicators = compilePatterns(raw.successIndicators, label, id, 'successIndicators');
|
|
72
|
+
const blockedIndicators = compilePatterns(raw.blockedIndicators, label, id, 'blockedIndicators');
|
|
73
|
+
results.push({
|
|
74
|
+
id,
|
|
75
|
+
payload: raw.payload,
|
|
76
|
+
name: raw.name || `Custom Payload ${id}`,
|
|
77
|
+
description: raw.description || 'Custom attack payload',
|
|
78
|
+
category: raw.category || 'prompt-injection',
|
|
79
|
+
intensity: raw.intensity || 'active',
|
|
80
|
+
severity: raw.severity || 'medium',
|
|
81
|
+
successIndicators,
|
|
82
|
+
blockedIndicators,
|
|
83
|
+
oasbControl: raw.oasbControl,
|
|
84
|
+
cwe: raw.cwe,
|
|
85
|
+
remediation: raw.remediation || 'Review agent response for unexpected behavior',
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return results;
|
|
89
|
+
}
|
|
90
|
+
function compilePatterns(patterns, label, id, field) {
|
|
91
|
+
if (!patterns)
|
|
92
|
+
return [];
|
|
93
|
+
if (!Array.isArray(patterns)) {
|
|
94
|
+
throw new Error(`${label} (${id}): "${field}" must be an array of strings`);
|
|
95
|
+
}
|
|
96
|
+
return patterns.map((p, j) => {
|
|
97
|
+
if (typeof p !== 'string') {
|
|
98
|
+
throw new Error(`${label} (${id}): ${field}[${j}] must be a string`);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return new RegExp(p, 'i');
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
throw new Error(`${label} (${id}): ${field}[${j}] is not a valid regex: "${p}"`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=custom-payloads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-payloads.js","sourceRoot":"","sources":["../../src/attack/custom-payloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail Policy
|
|
3
|
+
* CI/CD gate logic for --fail-on-vulnerable
|
|
4
|
+
*/
|
|
5
|
+
import { AttackReport, AttackSeverity } from './types';
|
|
6
|
+
/** Policy: undefined = legacy, true = any finding, severity string = threshold */
|
|
7
|
+
export type FailPolicy = undefined | true | AttackSeverity;
|
|
8
|
+
/**
|
|
9
|
+
* Determine if the process should exit with failure based on attack results.
|
|
10
|
+
*
|
|
11
|
+
* - undefined: legacy behavior — fail on critical/high riskRating
|
|
12
|
+
* - true / 'low': fail if any successful attack
|
|
13
|
+
* - severity: fail if any successful attack has severity >= threshold
|
|
14
|
+
*/
|
|
15
|
+
export declare function shouldFail(report: AttackReport, policy: FailPolicy): boolean;
|
|
16
|
+
//# sourceMappingURL=fail-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fail-policy.d.ts","sourceRoot":"","sources":["../../src/attack/fail-policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD,kFAAkF;AAClF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,cAAc,CAAC;AAU3D;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAkB5E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fail Policy
|
|
4
|
+
* CI/CD gate logic for --fail-on-vulnerable
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.shouldFail = shouldFail;
|
|
8
|
+
const SEVERITY_ORDER = {
|
|
9
|
+
info: 0,
|
|
10
|
+
low: 1,
|
|
11
|
+
medium: 2,
|
|
12
|
+
high: 3,
|
|
13
|
+
critical: 4,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Determine if the process should exit with failure based on attack results.
|
|
17
|
+
*
|
|
18
|
+
* - undefined: legacy behavior — fail on critical/high riskRating
|
|
19
|
+
* - true / 'low': fail if any successful attack
|
|
20
|
+
* - severity: fail if any successful attack has severity >= threshold
|
|
21
|
+
*/
|
|
22
|
+
function shouldFail(report, policy) {
|
|
23
|
+
if (policy === undefined) {
|
|
24
|
+
// Legacy default
|
|
25
|
+
return report.riskRating === 'critical' || report.riskRating === 'high';
|
|
26
|
+
}
|
|
27
|
+
if (report.summary.successful === 0) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (policy === true || policy === 'low') {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
const threshold = SEVERITY_ORDER[policy];
|
|
34
|
+
return report.results.some(r => r.success && SEVERITY_ORDER[r.payload.severity] >= threshold);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=fail-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fail-policy.js","sourceRoot":"","sources":["../../src/attack/fail-policy.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAsBH,gCAkBC;AAjCD,MAAM,cAAc,GAAmC;IACrD,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,MAAoB,EAAE,MAAkB;IACjE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,iBAAiB;QACjB,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,CAClE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attack Module
|
|
3
|
+
* Adversarial security testing for AI agents
|
|
4
|
+
*/
|
|
5
|
+
export { AttackScanner } from './scanner';
|
|
6
|
+
export { parseCustomPayloads } from './custom-payloads';
|
|
7
|
+
export { shouldFail } from './fail-policy';
|
|
8
|
+
export type { FailPolicy } from './fail-policy';
|
|
9
|
+
export { AttackCategory, AttackIntensity, AttackSeverity, AttackPayload, AttackResult, AttackReport, AttackTarget, AttackOptions, ATTACK_CATEGORIES, } from './types';
|
|
10
|
+
export type { CustomPayloadInput, CustomPayloadFile } from './types';
|
|
11
|
+
export { ALL_PAYLOADS, PAYLOAD_STATS, getPayloads, getPayloadById, getPayloadsByCategory, getPayloadsByIntensity, PROMPT_INJECTION_PAYLOADS, JAILBREAK_PAYLOADS, DATA_EXFILTRATION_PAYLOADS, CAPABILITY_ABUSE_PAYLOADS, CONTEXT_MANIPULATION_PAYLOADS, MCP_EXPLOITATION_PAYLOADS, A2A_ATTACK_PAYLOADS, } from './payloads';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/attack/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAErE,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Attack Module
|
|
4
|
+
* Adversarial security testing for AI agents
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.A2A_ATTACK_PAYLOADS = exports.MCP_EXPLOITATION_PAYLOADS = exports.CONTEXT_MANIPULATION_PAYLOADS = exports.CAPABILITY_ABUSE_PAYLOADS = exports.DATA_EXFILTRATION_PAYLOADS = exports.JAILBREAK_PAYLOADS = exports.PROMPT_INJECTION_PAYLOADS = exports.getPayloadsByIntensity = exports.getPayloadsByCategory = exports.getPayloadById = exports.getPayloads = exports.PAYLOAD_STATS = exports.ALL_PAYLOADS = exports.ATTACK_CATEGORIES = exports.shouldFail = exports.parseCustomPayloads = exports.AttackScanner = void 0;
|
|
8
|
+
var scanner_1 = require("./scanner");
|
|
9
|
+
Object.defineProperty(exports, "AttackScanner", { enumerable: true, get: function () { return scanner_1.AttackScanner; } });
|
|
10
|
+
var custom_payloads_1 = require("./custom-payloads");
|
|
11
|
+
Object.defineProperty(exports, "parseCustomPayloads", { enumerable: true, get: function () { return custom_payloads_1.parseCustomPayloads; } });
|
|
12
|
+
var fail_policy_1 = require("./fail-policy");
|
|
13
|
+
Object.defineProperty(exports, "shouldFail", { enumerable: true, get: function () { return fail_policy_1.shouldFail; } });
|
|
14
|
+
var types_1 = require("./types");
|
|
15
|
+
Object.defineProperty(exports, "ATTACK_CATEGORIES", { enumerable: true, get: function () { return types_1.ATTACK_CATEGORIES; } });
|
|
16
|
+
var payloads_1 = require("./payloads");
|
|
17
|
+
Object.defineProperty(exports, "ALL_PAYLOADS", { enumerable: true, get: function () { return payloads_1.ALL_PAYLOADS; } });
|
|
18
|
+
Object.defineProperty(exports, "PAYLOAD_STATS", { enumerable: true, get: function () { return payloads_1.PAYLOAD_STATS; } });
|
|
19
|
+
Object.defineProperty(exports, "getPayloads", { enumerable: true, get: function () { return payloads_1.getPayloads; } });
|
|
20
|
+
Object.defineProperty(exports, "getPayloadById", { enumerable: true, get: function () { return payloads_1.getPayloadById; } });
|
|
21
|
+
Object.defineProperty(exports, "getPayloadsByCategory", { enumerable: true, get: function () { return payloads_1.getPayloadsByCategory; } });
|
|
22
|
+
Object.defineProperty(exports, "getPayloadsByIntensity", { enumerable: true, get: function () { return payloads_1.getPayloadsByIntensity; } });
|
|
23
|
+
Object.defineProperty(exports, "PROMPT_INJECTION_PAYLOADS", { enumerable: true, get: function () { return payloads_1.PROMPT_INJECTION_PAYLOADS; } });
|
|
24
|
+
Object.defineProperty(exports, "JAILBREAK_PAYLOADS", { enumerable: true, get: function () { return payloads_1.JAILBREAK_PAYLOADS; } });
|
|
25
|
+
Object.defineProperty(exports, "DATA_EXFILTRATION_PAYLOADS", { enumerable: true, get: function () { return payloads_1.DATA_EXFILTRATION_PAYLOADS; } });
|
|
26
|
+
Object.defineProperty(exports, "CAPABILITY_ABUSE_PAYLOADS", { enumerable: true, get: function () { return payloads_1.CAPABILITY_ABUSE_PAYLOADS; } });
|
|
27
|
+
Object.defineProperty(exports, "CONTEXT_MANIPULATION_PAYLOADS", { enumerable: true, get: function () { return payloads_1.CONTEXT_MANIPULATION_PAYLOADS; } });
|
|
28
|
+
Object.defineProperty(exports, "MCP_EXPLOITATION_PAYLOADS", { enumerable: true, get: function () { return payloads_1.MCP_EXPLOITATION_PAYLOADS; } });
|
|
29
|
+
Object.defineProperty(exports, "A2A_ATTACK_PAYLOADS", { enumerable: true, get: function () { return payloads_1.A2A_ATTACK_PAYLOADS; } });
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attack/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AACtB,qDAAwD;AAA/C,sHAAA,mBAAmB,OAAA;AAC5B,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAGnB,iCAUiB;AADf,0GAAA,iBAAiB,OAAA;AAKnB,uCAcoB;AAblB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,iHAAA,qBAAqB,OAAA;AACrB,kHAAA,sBAAsB,OAAA;AACtB,qHAAA,yBAAyB,OAAA;AACzB,8GAAA,kBAAkB,OAAA;AAClB,sHAAA,0BAA0B,OAAA;AAC1B,qHAAA,yBAAyB,OAAA;AACzB,yHAAA,6BAA6B,OAAA;AAC7B,qHAAA,yBAAyB,OAAA;AACzB,+GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A (Agent-to-Agent) Attack Payloads
|
|
3
|
+
* Tests for identity spoofing, delegation abuse, and embedded
|
|
4
|
+
* prompt injection via A2A message protocol.
|
|
5
|
+
*
|
|
6
|
+
* These payloads are sent as A2A messages: {from, to, content}.
|
|
7
|
+
* The `payload` field is the message content.
|
|
8
|
+
*/
|
|
9
|
+
import { AttackPayload } from '../types';
|
|
10
|
+
export declare const A2A_ATTACK_PAYLOADS: AttackPayload[];
|
|
11
|
+
export default A2A_ATTACK_PAYLOADS;
|
|
12
|
+
//# sourceMappingURL=a2a-attacks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a-attacks.d.ts","sourceRoot":"","sources":["../../../src/attack/payloads/a2a-attacks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,mBAAmB,EAAE,aAAa,EAmN9C,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|