agent-threat-rules 0.1.0 → 0.2.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 (131) hide show
  1. package/README.md +360 -98
  2. package/dist/action-executor.d.ts +44 -0
  3. package/dist/action-executor.d.ts.map +1 -0
  4. package/dist/action-executor.js +130 -0
  5. package/dist/action-executor.js.map +1 -0
  6. package/dist/adapters/default-adapter.d.ts +24 -0
  7. package/dist/adapters/default-adapter.d.ts.map +1 -0
  8. package/dist/adapters/default-adapter.js +51 -0
  9. package/dist/adapters/default-adapter.js.map +1 -0
  10. package/dist/adapters/stdio-adapter.d.ts +30 -0
  11. package/dist/adapters/stdio-adapter.d.ts.map +1 -0
  12. package/dist/adapters/stdio-adapter.js +128 -0
  13. package/dist/adapters/stdio-adapter.js.map +1 -0
  14. package/dist/cli.js +119 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/coverage-analyzer.d.ts +43 -0
  17. package/dist/coverage-analyzer.d.ts.map +1 -0
  18. package/dist/coverage-analyzer.js +329 -0
  19. package/dist/coverage-analyzer.js.map +1 -0
  20. package/dist/engine.d.ts +40 -5
  21. package/dist/engine.d.ts.map +1 -1
  22. package/dist/engine.js +89 -5
  23. package/dist/engine.js.map +1 -1
  24. package/dist/hook-handler.d.ts +61 -0
  25. package/dist/hook-handler.d.ts.map +1 -0
  26. package/dist/hook-handler.js +178 -0
  27. package/dist/hook-handler.js.map +1 -0
  28. package/dist/index.d.ts +19 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +11 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/layer-integration.d.ts +55 -0
  33. package/dist/layer-integration.d.ts.map +1 -0
  34. package/dist/layer-integration.js +185 -0
  35. package/dist/layer-integration.js.map +1 -0
  36. package/dist/loader.js +2 -2
  37. package/dist/loader.js.map +1 -1
  38. package/dist/mcp-server.d.ts +13 -0
  39. package/dist/mcp-server.d.ts.map +1 -0
  40. package/dist/mcp-server.js +220 -0
  41. package/dist/mcp-server.js.map +1 -0
  42. package/dist/mcp-tools/coverage-gaps.d.ts +13 -0
  43. package/dist/mcp-tools/coverage-gaps.d.ts.map +1 -0
  44. package/dist/mcp-tools/coverage-gaps.js +55 -0
  45. package/dist/mcp-tools/coverage-gaps.js.map +1 -0
  46. package/dist/mcp-tools/list-rules.d.ts +17 -0
  47. package/dist/mcp-tools/list-rules.d.ts.map +1 -0
  48. package/dist/mcp-tools/list-rules.js +45 -0
  49. package/dist/mcp-tools/list-rules.js.map +1 -0
  50. package/dist/mcp-tools/scan.d.ts +24 -0
  51. package/dist/mcp-tools/scan.d.ts.map +1 -0
  52. package/dist/mcp-tools/scan.js +87 -0
  53. package/dist/mcp-tools/scan.js.map +1 -0
  54. package/dist/mcp-tools/submit-proposal.d.ts +12 -0
  55. package/dist/mcp-tools/submit-proposal.d.ts.map +1 -0
  56. package/dist/mcp-tools/submit-proposal.js +95 -0
  57. package/dist/mcp-tools/submit-proposal.js.map +1 -0
  58. package/dist/mcp-tools/threat-summary.d.ts +12 -0
  59. package/dist/mcp-tools/threat-summary.d.ts.map +1 -0
  60. package/dist/mcp-tools/threat-summary.js +74 -0
  61. package/dist/mcp-tools/threat-summary.js.map +1 -0
  62. package/dist/mcp-tools/validate.d.ts +15 -0
  63. package/dist/mcp-tools/validate.d.ts.map +1 -0
  64. package/dist/mcp-tools/validate.js +45 -0
  65. package/dist/mcp-tools/validate.js.map +1 -0
  66. package/dist/modules/index.d.ts +5 -4
  67. package/dist/modules/index.d.ts.map +1 -1
  68. package/dist/modules/index.js +6 -4
  69. package/dist/modules/index.js.map +1 -1
  70. package/dist/modules/semantic.d.ts +105 -0
  71. package/dist/modules/semantic.d.ts.map +1 -0
  72. package/dist/modules/semantic.js +283 -0
  73. package/dist/modules/semantic.js.map +1 -0
  74. package/dist/rule-scaffolder.d.ts +39 -0
  75. package/dist/rule-scaffolder.d.ts.map +1 -0
  76. package/dist/rule-scaffolder.js +184 -0
  77. package/dist/rule-scaffolder.js.map +1 -0
  78. package/dist/skill-fingerprint.d.ts +85 -0
  79. package/dist/skill-fingerprint.d.ts.map +1 -0
  80. package/dist/skill-fingerprint.js +326 -0
  81. package/dist/skill-fingerprint.js.map +1 -0
  82. package/dist/types.d.ts +59 -1
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/verdict.d.ts +26 -0
  85. package/dist/verdict.d.ts.map +1 -0
  86. package/dist/verdict.js +127 -0
  87. package/dist/verdict.js.map +1 -0
  88. package/package.json +6 -1
  89. package/rules/agent-manipulation/ATR-2026-030-cross-agent-attack.yaml +1 -1
  90. package/rules/agent-manipulation/ATR-2026-032-goal-hijacking.yaml +1 -1
  91. package/rules/agent-manipulation/ATR-2026-074-cross-agent-privilege-escalation.yaml +1 -1
  92. package/rules/agent-manipulation/ATR-2026-076-inter-agent-message-spoofing.yaml +1 -1
  93. package/rules/agent-manipulation/ATR-2026-077-human-trust-exploitation.yaml +1 -1
  94. package/rules/context-exfiltration/ATR-2026-020-system-prompt-leak.yaml +1 -1
  95. package/rules/context-exfiltration/ATR-2026-021-api-key-exposure.yaml +1 -1
  96. package/rules/context-exfiltration/ATR-2026-075-agent-memory-manipulation.yaml +1 -1
  97. package/rules/data-poisoning/ATR-2026-070-data-poisoning.yaml +1 -1
  98. package/rules/excessive-autonomy/ATR-2026-050-runaway-agent-loop.yaml +1 -1
  99. package/rules/excessive-autonomy/ATR-2026-051-resource-exhaustion.yaml +1 -1
  100. package/rules/excessive-autonomy/ATR-2026-052-cascading-failure.yaml +1 -1
  101. package/rules/model-security/ATR-2026-072-model-behavior-extraction.yaml +1 -1
  102. package/rules/model-security/ATR-2026-073-malicious-finetuning-data.yaml +1 -1
  103. package/rules/privilege-escalation/ATR-2026-040-privilege-escalation.yaml +1 -1
  104. package/rules/privilege-escalation/ATR-2026-041-scope-creep.yaml +1 -1
  105. package/rules/prompt-injection/ATR-2026-001-direct-prompt-injection.yaml +3 -3
  106. package/rules/prompt-injection/ATR-2026-002-indirect-prompt-injection.yaml +1 -1
  107. package/rules/prompt-injection/ATR-2026-003-jailbreak-attempt.yaml +1 -1
  108. package/rules/prompt-injection/ATR-2026-004-system-prompt-override.yaml +1 -1
  109. package/rules/prompt-injection/ATR-2026-005-multi-turn-injection.yaml +1 -1
  110. package/rules/prompt-injection/ATR-2026-080-encoding-evasion.yaml +80 -0
  111. package/rules/prompt-injection/ATR-2026-081-semantic-multi-turn.yaml +77 -0
  112. package/rules/prompt-injection/ATR-2026-082-fingerprint-evasion.yaml +76 -0
  113. package/rules/prompt-injection/ATR-2026-083-indirect-tool-injection.yaml +76 -0
  114. package/rules/prompt-injection/ATR-2026-084-structured-data-injection.yaml +78 -0
  115. package/rules/prompt-injection/ATR-2026-085-audit-evasion.yaml +76 -0
  116. package/rules/prompt-injection/ATR-2026-086-visual-spoofing.yaml +80 -0
  117. package/rules/prompt-injection/ATR-2026-087-rule-probing.yaml +74 -0
  118. package/rules/prompt-injection/ATR-2026-088-adaptive-countermeasure.yaml +76 -0
  119. package/rules/prompt-injection/ATR-2026-089-polymorphic-skill.yaml +77 -0
  120. package/rules/prompt-injection/ATR-2026-090-threat-intel-exfil.yaml +76 -0
  121. package/rules/prompt-injection/ATR-2026-091-nested-payload.yaml +80 -0
  122. package/rules/prompt-injection/ATR-2026-092-consensus-poisoning.yaml +84 -0
  123. package/rules/prompt-injection/ATR-2026-093-gradual-escalation.yaml +78 -0
  124. package/rules/prompt-injection/ATR-2026-094-audit-bypass.yaml +78 -0
  125. package/rules/skill-compromise/ATR-2026-060-skill-impersonation.yaml +1 -1
  126. package/rules/tool-poisoning/ATR-2026-010-mcp-malicious-response.yaml +1 -1
  127. package/rules/tool-poisoning/ATR-2026-011-tool-output-injection.yaml +3 -3
  128. package/rules/tool-poisoning/ATR-2026-012-unauthorized-tool-call.yaml +1 -1
  129. package/rules/tool-poisoning/ATR-2026-013-tool-ssrf.yaml +1 -1
  130. package/rules/tool-poisoning/ATR-2026-095-supply-chain-poisoning.yaml +82 -0
  131. package/rules/tool-poisoning/ATR-2026-096-registry-poisoning.yaml +84 -0
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Skill Behavioral Fingerprint
3
+ *
4
+ * Tracks what each skill "normally does" across invocations, then detects
5
+ * behavioral drift when a previously-trusted skill starts acting differently.
6
+ *
7
+ * Solves the "installed then turns malicious" scenario:
8
+ * - First N invocations: build fingerprint (what APIs, what patterns, what scope)
9
+ * - After fingerprint stabilizes: flag any deviation as anomaly
10
+ *
11
+ * @module agent-threat-rules/skill-fingerprint
12
+ */
13
+ import { createHash } from 'node:crypto';
14
+ // ---------------------------------------------------------------------------
15
+ // Pattern detectors (regex-based, no LLM needed)
16
+ // ---------------------------------------------------------------------------
17
+ const FS_WRITE_PATTERN = /(?:write(?:File)?|appendFile|fs\.write|truncate|mkdir|rmdir|unlink|rm\s+-)/i;
18
+ const FS_READ_PATTERN = /(?:read(?:File)?|readdir|stat|access|exists|glob|find\s)/i;
19
+ const FS_DELETE_PATTERN = /(?:unlink|rm\s+-rf|delete(?:File)?|removeDir|rmdir)/i;
20
+ const NETWORK_PATTERN = /(?:https?:\/\/|fetch|curl|wget|axios|http\.request|net\.connect|socket)[\s('"]*([a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,}))/i;
21
+ const ENV_PATTERN = /(?:process\.env|os\.environ|getenv|System\.getenv)\[?['"(]?([A-Z_][A-Z0-9_]*)/i;
22
+ const ENV_INLINE_PATTERN = /\$\{?([A-Z_][A-Z0-9_]{2,})\}?/g;
23
+ const EXEC_PATTERN = /(?:child_process|spawn|exec(?:File)?|system\(|popen|subprocess|shell_exec|os\.system)\s*\(\s*['"(]?([^\s'")\]]{1,80})/i;
24
+ const EXFIL_PATTERN = /(?:base64|btoa|encode|compress|deflate|gzip).*(?:http|fetch|curl|send|post|upload)/i;
25
+ const REDIRECT_PATTERN = /(?:redirect|forward|proxy|tunnel)\s+(?:to\s+)?(?:https?:\/\/)/i;
26
+ /** Classify a text content into behavioral capabilities */
27
+ function extractCapabilities(text) {
28
+ const result = {
29
+ filesystemOps: [],
30
+ networkTargets: [],
31
+ envAccesses: [],
32
+ processExecs: [],
33
+ outputPatterns: [],
34
+ };
35
+ if (!text || text.length === 0)
36
+ return result;
37
+ // Limit analysis to first 10KB to prevent ReDoS
38
+ const safeText = text.slice(0, 10_240);
39
+ // Filesystem
40
+ if (FS_WRITE_PATTERN.test(safeText))
41
+ result.filesystemOps.push('write');
42
+ if (FS_READ_PATTERN.test(safeText))
43
+ result.filesystemOps.push('read');
44
+ if (FS_DELETE_PATTERN.test(safeText))
45
+ result.filesystemOps.push('delete');
46
+ // Network targets
47
+ const netMatch = safeText.match(NETWORK_PATTERN);
48
+ if (netMatch?.[1])
49
+ result.networkTargets.push(netMatch[1]);
50
+ // Environment variable accesses
51
+ const envMatch = safeText.match(ENV_PATTERN);
52
+ if (envMatch?.[1])
53
+ result.envAccesses.push(envMatch[1]);
54
+ // Also check inline env vars like $HOME, ${API_KEY}
55
+ for (const m of safeText.matchAll(ENV_INLINE_PATTERN)) {
56
+ if (m[1] && !result.envAccesses.includes(m[1])) {
57
+ result.envAccesses.push(m[1]);
58
+ }
59
+ }
60
+ // Process executions
61
+ const execMatch = safeText.match(EXEC_PATTERN);
62
+ if (execMatch?.[1])
63
+ result.processExecs.push(execMatch[1]);
64
+ // Output patterns
65
+ if (EXFIL_PATTERN.test(safeText))
66
+ result.outputPatterns.push('exfiltration');
67
+ if (REDIRECT_PATTERN.test(safeText))
68
+ result.outputPatterns.push('redirect');
69
+ return result;
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Fingerprint Store
73
+ // ---------------------------------------------------------------------------
74
+ /** Default invocations needed before fingerprint is considered stable */
75
+ const DEFAULT_STABILITY_THRESHOLD = 10;
76
+ /** Consecutive invocations with no new capabilities to mark stable */
77
+ const DEFAULT_STABLE_STREAK = 5;
78
+ /** Maximum number of skills to track */
79
+ const MAX_SKILLS = 5_000;
80
+ export class SkillFingerprintStore {
81
+ fingerprints = new Map();
82
+ stabilityThreshold;
83
+ stableStreak;
84
+ constructor(config) {
85
+ this.stabilityThreshold = config?.stabilityThreshold ?? DEFAULT_STABILITY_THRESHOLD;
86
+ this.stableStreak = config?.stableStreak ?? DEFAULT_STABLE_STREAK;
87
+ }
88
+ /**
89
+ * Record a skill invocation and detect behavioral anomalies.
90
+ * Returns anomalies if the fingerprint was stable and new capabilities appeared.
91
+ */
92
+ recordInvocation(skillName, event) {
93
+ const now = Date.now();
94
+ const fp = this.getOrCreate(skillName, now);
95
+ fp.invocationCount++;
96
+ fp.lastSeen = now;
97
+ // Extract capabilities from event content + fields
98
+ const content = [
99
+ event.content ?? '',
100
+ event.fields?.['tool_args'] ?? '',
101
+ event.fields?.['tool_response'] ?? '',
102
+ ].join('\n');
103
+ const caps = extractCapabilities(content);
104
+ // Check for anomalies (only if fingerprint is stable)
105
+ const anomalies = [];
106
+ const isStable = fp.stableHash !== null;
107
+ if (isStable) {
108
+ // Detect NEW capabilities not in the stable fingerprint
109
+ for (const op of caps.filesystemOps) {
110
+ if (!fp.filesystemOps.has(op)) {
111
+ anomalies.push({
112
+ skillName,
113
+ anomalyType: 'new_filesystem_op',
114
+ description: `Skill "${skillName}" performing new filesystem operation: ${op} (not in baseline)`,
115
+ severity: op === 'delete' ? 'critical' : op === 'write' ? 'high' : 'medium',
116
+ newValue: op,
117
+ timestamp: now,
118
+ });
119
+ }
120
+ }
121
+ for (const target of caps.networkTargets) {
122
+ if (!fp.networkTargets.has(target)) {
123
+ anomalies.push({
124
+ skillName,
125
+ anomalyType: 'new_network_target',
126
+ description: `Skill "${skillName}" contacting new network target: ${target}`,
127
+ severity: 'high',
128
+ newValue: target,
129
+ timestamp: now,
130
+ });
131
+ }
132
+ }
133
+ for (const env of caps.envAccesses) {
134
+ if (!fp.envAccesses.has(env)) {
135
+ const isSensitive = /(?:KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL)/i.test(env);
136
+ anomalies.push({
137
+ skillName,
138
+ anomalyType: 'new_env_access',
139
+ description: `Skill "${skillName}" accessing new env var: ${env}`,
140
+ severity: isSensitive ? 'critical' : 'medium',
141
+ newValue: env,
142
+ timestamp: now,
143
+ });
144
+ }
145
+ }
146
+ for (const proc of caps.processExecs) {
147
+ if (!fp.processExecs.has(proc)) {
148
+ anomalies.push({
149
+ skillName,
150
+ anomalyType: 'new_process_exec',
151
+ description: `Skill "${skillName}" executing new process: ${proc}`,
152
+ severity: 'critical',
153
+ newValue: proc,
154
+ timestamp: now,
155
+ });
156
+ }
157
+ }
158
+ for (const pat of caps.outputPatterns) {
159
+ if (!fp.outputPatterns.has(pat)) {
160
+ anomalies.push({
161
+ skillName,
162
+ anomalyType: 'new_output_pattern',
163
+ description: `Skill "${skillName}" exhibiting new pattern: ${pat}`,
164
+ severity: pat === 'exfiltration' ? 'critical' : 'high',
165
+ newValue: pat,
166
+ timestamp: now,
167
+ });
168
+ }
169
+ }
170
+ }
171
+ // Update fingerprint with observed capabilities
172
+ let newCapsSeen = false;
173
+ for (const op of caps.filesystemOps) {
174
+ if (!fp.filesystemOps.has(op)) {
175
+ fp.filesystemOps.add(op);
176
+ newCapsSeen = true;
177
+ }
178
+ }
179
+ for (const t of caps.networkTargets) {
180
+ if (!fp.networkTargets.has(t)) {
181
+ fp.networkTargets.add(t);
182
+ newCapsSeen = true;
183
+ }
184
+ }
185
+ for (const e of caps.envAccesses) {
186
+ if (!fp.envAccesses.has(e)) {
187
+ fp.envAccesses.add(e);
188
+ newCapsSeen = true;
189
+ }
190
+ }
191
+ for (const p of caps.processExecs) {
192
+ if (!fp.processExecs.has(p)) {
193
+ fp.processExecs.add(p);
194
+ newCapsSeen = true;
195
+ }
196
+ }
197
+ for (const o of caps.outputPatterns) {
198
+ if (!fp.outputPatterns.has(o)) {
199
+ fp.outputPatterns.add(o);
200
+ newCapsSeen = true;
201
+ }
202
+ }
203
+ // Track stability
204
+ if (!isStable) {
205
+ if (newCapsSeen) {
206
+ fp.stableStreak = 0;
207
+ }
208
+ else {
209
+ fp.stableStreak++;
210
+ }
211
+ // Mark stable when threshold met
212
+ if (fp.invocationCount >= this.stabilityThreshold &&
213
+ fp.stableStreak >= this.stableStreak) {
214
+ fp.stableHash = this.computeCapabilityHash(fp);
215
+ }
216
+ }
217
+ return anomalies;
218
+ }
219
+ /**
220
+ * Get an immutable fingerprint snapshot for a skill.
221
+ */
222
+ getFingerprint(skillName) {
223
+ const fp = this.fingerprints.get(skillName);
224
+ if (!fp)
225
+ return undefined;
226
+ return {
227
+ skillName: fp.skillName,
228
+ invocationCount: fp.invocationCount,
229
+ firstSeen: fp.firstSeen,
230
+ lastSeen: fp.lastSeen,
231
+ isStable: fp.stableHash !== null,
232
+ capabilities: {
233
+ filesystemOps: new Set(fp.filesystemOps),
234
+ networkTargets: new Set(fp.networkTargets),
235
+ envAccesses: new Set(fp.envAccesses),
236
+ processExecs: new Set(fp.processExecs),
237
+ outputPatterns: new Set(fp.outputPatterns),
238
+ },
239
+ capabilityHash: fp.stableHash ?? this.computeCapabilityHash(fp),
240
+ };
241
+ }
242
+ /** Get all tracked skill names */
243
+ getTrackedSkills() {
244
+ return [...this.fingerprints.keys()];
245
+ }
246
+ /** Get count of stable fingerprints */
247
+ getStableCount() {
248
+ let count = 0;
249
+ for (const fp of this.fingerprints.values()) {
250
+ if (fp.stableHash !== null)
251
+ count++;
252
+ }
253
+ return count;
254
+ }
255
+ /** Get total tracked skills */
256
+ getTrackedCount() {
257
+ return this.fingerprints.size;
258
+ }
259
+ /**
260
+ * Reset a skill's fingerprint (e.g., after a legitimate update).
261
+ */
262
+ resetFingerprint(skillName) {
263
+ this.fingerprints.delete(skillName);
264
+ }
265
+ /**
266
+ * Evict fingerprints not seen since cutoffMs ago.
267
+ */
268
+ cleanup(cutoffMs) {
269
+ const cutoff = Date.now() - cutoffMs;
270
+ let evicted = 0;
271
+ for (const [name, fp] of this.fingerprints) {
272
+ if (fp.lastSeen < cutoff) {
273
+ this.fingerprints.delete(name);
274
+ evicted++;
275
+ }
276
+ }
277
+ return evicted;
278
+ }
279
+ // -----------------------------------------------------------------------
280
+ // Private
281
+ // -----------------------------------------------------------------------
282
+ getOrCreate(skillName, now) {
283
+ const existing = this.fingerprints.get(skillName);
284
+ if (existing)
285
+ return existing;
286
+ // Evict oldest if at capacity
287
+ if (this.fingerprints.size >= MAX_SKILLS) {
288
+ let oldestName;
289
+ let oldestTime = Infinity;
290
+ for (const [name, fp] of this.fingerprints) {
291
+ if (fp.lastSeen < oldestTime) {
292
+ oldestTime = fp.lastSeen;
293
+ oldestName = name;
294
+ }
295
+ }
296
+ if (oldestName)
297
+ this.fingerprints.delete(oldestName);
298
+ }
299
+ const fp = {
300
+ skillName,
301
+ invocationCount: 0,
302
+ firstSeen: now,
303
+ lastSeen: now,
304
+ filesystemOps: new Set(),
305
+ networkTargets: new Set(),
306
+ envAccesses: new Set(),
307
+ processExecs: new Set(),
308
+ outputPatterns: new Set(),
309
+ stableHash: null,
310
+ stableStreak: 0,
311
+ };
312
+ this.fingerprints.set(skillName, fp);
313
+ return fp;
314
+ }
315
+ computeCapabilityHash(fp) {
316
+ const parts = [
317
+ [...fp.filesystemOps].sort().join(','),
318
+ [...fp.networkTargets].sort().join(','),
319
+ [...fp.envAccesses].sort().join(','),
320
+ [...fp.processExecs].sort().join(','),
321
+ [...fp.outputPatterns].sort().join(','),
322
+ ];
323
+ return createHash('sha256').update(parts.join('|')).digest('hex').slice(0, 16);
324
+ }
325
+ }
326
+ //# sourceMappingURL=skill-fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-fingerprint.js","sourceRoot":"","sources":["../src/skill-fingerprint.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -12,6 +12,7 @@ export type ATROperator = 'gt' | 'lt' | 'eq' | 'gte' | 'lte' | 'deviation_from_b
12
12
  export type ATRAction = 'block_input' | 'block_output' | 'block_tool' | 'quarantine_session' | 'reset_context' | 'alert' | 'snapshot' | 'escalate' | 'reduce_permissions' | 'kill_agent';
13
13
  export interface ATRReferences {
14
14
  owasp_llm?: string[];
15
+ owasp_agentic?: string[];
15
16
  mitre_atlas?: string[];
16
17
  mitre_attack?: string[];
17
18
  cve?: string[];
@@ -77,7 +78,7 @@ export interface ATRTestCase {
77
78
  agent_output?: string;
78
79
  tool_name?: string;
79
80
  tool_args?: string;
80
- expected: 'trigger' | 'no_trigger';
81
+ expected: 'trigger' | 'no_trigger' | 'triggered' | 'not_triggered';
81
82
  }
82
83
  export interface ATRTestCases {
83
84
  true_positives: ATRTestCase[];
@@ -126,4 +127,61 @@ export interface ATRMatch {
126
127
  confidence: number;
127
128
  timestamp: string;
128
129
  }
130
+ /** Verdict outcome from evaluating matched rules */
131
+ export type VerdictOutcome = 'allow' | 'ask' | 'deny';
132
+ /** Verdict returned after evaluating an event against all rules */
133
+ export interface ATRVerdict {
134
+ readonly outcome: VerdictOutcome;
135
+ readonly reason: string;
136
+ readonly matchCount: number;
137
+ readonly highestSeverity: ATRSeverity | null;
138
+ readonly highestConfidence: number;
139
+ readonly actions: readonly ATRAction[];
140
+ readonly matches: readonly ATRMatch[];
141
+ readonly timestamp: string;
142
+ }
143
+ /** Result of executing a single action */
144
+ export interface ActionResult {
145
+ readonly action: ATRAction;
146
+ readonly success: boolean;
147
+ readonly message: string;
148
+ readonly timestamp: string;
149
+ }
150
+ /** Context provided to platform adapters when executing actions */
151
+ export interface ExecutionContext {
152
+ readonly event: AgentEvent;
153
+ readonly matches: readonly ATRMatch[];
154
+ readonly verdict: ATRVerdict;
155
+ readonly sessionId?: string;
156
+ readonly metadata?: Readonly<Record<string, unknown>>;
157
+ }
158
+ /** Platform-specific adapter for executing ATR actions */
159
+ export interface PlatformAdapter {
160
+ readonly name: string;
161
+ blockInput(ctx: ExecutionContext): Promise<ActionResult>;
162
+ blockOutput(ctx: ExecutionContext): Promise<ActionResult>;
163
+ blockTool(ctx: ExecutionContext): Promise<ActionResult>;
164
+ quarantineSession(ctx: ExecutionContext): Promise<ActionResult>;
165
+ resetContext(ctx: ExecutionContext): Promise<ActionResult>;
166
+ alert(ctx: ExecutionContext): Promise<ActionResult>;
167
+ snapshot(ctx: ExecutionContext): Promise<ActionResult>;
168
+ escalate(ctx: ExecutionContext): Promise<ActionResult>;
169
+ reducePermissions(ctx: ExecutionContext): Promise<ActionResult>;
170
+ killAgent(ctx: ExecutionContext): Promise<ActionResult>;
171
+ }
172
+ /** Hook input from Claude Code / agent host */
173
+ export interface HookInput {
174
+ readonly hook: 'PreToolUse' | 'PostToolUse';
175
+ readonly tool_name: string;
176
+ readonly tool_input: Readonly<Record<string, unknown>>;
177
+ readonly session_id?: string;
178
+ readonly timestamp?: string;
179
+ }
180
+ /** Hook output to Claude Code / agent host */
181
+ export interface HookOutput {
182
+ readonly decision: VerdictOutcome;
183
+ readonly reason?: string;
184
+ readonly message?: string;
185
+ readonly matched_rules?: readonly string[];
186
+ }
129
187
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Verdict computation from ATR rule matches.
3
+ *
4
+ * Pure functions that determine the outcome (allow/ask/deny)
5
+ * based on severity, confidence, and auto-response thresholds.
6
+ *
7
+ * @module agent-threat-rules/verdict
8
+ */
9
+ import type { ATRMatch, ATRSeverity, ATRVerdict } from './types.js';
10
+ /** Severity rank from most severe (0) to least severe (4) */
11
+ export declare const SEVERITY_RANK: Readonly<Record<ATRSeverity, number>>;
12
+ /**
13
+ * Check whether auto-response is enabled for a matched rule.
14
+ * The auto_response_threshold field on ATRResponse indicates the
15
+ * minimum confidence level at which the action should be taken
16
+ * automatically (without human approval).
17
+ */
18
+ export declare function isAutoResponseEnabled(match: ATRMatch): boolean;
19
+ /**
20
+ * Compute a verdict from an array of ATR matches.
21
+ *
22
+ * This is a pure function -- no side effects, no mutation.
23
+ * Returns a frozen ATRVerdict object.
24
+ */
25
+ export declare function computeVerdict(matches: readonly ATRMatch[]): ATRVerdict;
26
+ //# sourceMappingURL=verdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EAEX,UAAU,EAEX,MAAM,YAAY,CAAC;AAEpB,6DAA6D;AAC7D,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAM/D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,GACd,OAAO,CAcT;AAwED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,QAAQ,EAAE,GAC3B,UAAU,CAkCZ"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Verdict computation from ATR rule matches.
3
+ *
4
+ * Pure functions that determine the outcome (allow/ask/deny)
5
+ * based on severity, confidence, and auto-response thresholds.
6
+ *
7
+ * @module agent-threat-rules/verdict
8
+ */
9
+ /** Severity rank from most severe (0) to least severe (4) */
10
+ export const SEVERITY_RANK = {
11
+ critical: 0,
12
+ high: 1,
13
+ medium: 2,
14
+ low: 3,
15
+ informational: 4,
16
+ };
17
+ /**
18
+ * Check whether auto-response is enabled for a matched rule.
19
+ * The auto_response_threshold field on ATRResponse indicates the
20
+ * minimum confidence level at which the action should be taken
21
+ * automatically (without human approval).
22
+ */
23
+ export function isAutoResponseEnabled(match) {
24
+ const threshold = match.rule.response.auto_response_threshold;
25
+ if (!threshold)
26
+ return false;
27
+ const thresholdMap = {
28
+ high: 0.9,
29
+ medium: 0.7,
30
+ low: 0.5,
31
+ };
32
+ const requiredConfidence = thresholdMap[threshold];
33
+ if (requiredConfidence === undefined)
34
+ return false;
35
+ return match.confidence >= requiredConfidence;
36
+ }
37
+ /**
38
+ * Determine the verdict outcome based on severity and confidence.
39
+ *
40
+ * Decision matrix:
41
+ * - critical severity -> deny
42
+ * - high severity, conf >= 0.8 -> deny
43
+ * - high severity, conf < 0.8 -> ask
44
+ * - medium severity, conf >= 0.6 -> ask
45
+ * - everything else -> allow
46
+ */
47
+ function determineOutcome(severity, confidence) {
48
+ if (severity === 'critical') {
49
+ return 'deny';
50
+ }
51
+ if (severity === 'high') {
52
+ return confidence >= 0.8 ? 'deny' : 'ask';
53
+ }
54
+ if (severity === 'medium' && confidence >= 0.6) {
55
+ return 'ask';
56
+ }
57
+ return 'allow';
58
+ }
59
+ /**
60
+ * Collect unique actions from all matched rules, preserving order
61
+ * of first appearance.
62
+ */
63
+ function collectUniqueActions(matches) {
64
+ const seen = new Set();
65
+ const actions = [];
66
+ for (const match of matches) {
67
+ for (const action of match.rule.response.actions) {
68
+ if (!seen.has(action)) {
69
+ seen.add(action);
70
+ actions.push(action);
71
+ }
72
+ }
73
+ }
74
+ return Object.freeze(actions);
75
+ }
76
+ /**
77
+ * Build a human-readable reason string from the highest severity match.
78
+ */
79
+ function buildReason(highestMatch, outcome, matchCount) {
80
+ if (!highestMatch) {
81
+ return 'No rules matched.';
82
+ }
83
+ const { rule, confidence } = highestMatch;
84
+ const pct = Math.round(confidence * 100);
85
+ return (`${outcome.toUpperCase()}: ${rule.title} ` +
86
+ `[${rule.severity}/${pct}% confidence] ` +
87
+ `(${matchCount} rule${matchCount === 1 ? '' : 's'} matched)`);
88
+ }
89
+ /**
90
+ * Compute a verdict from an array of ATR matches.
91
+ *
92
+ * This is a pure function -- no side effects, no mutation.
93
+ * Returns a frozen ATRVerdict object.
94
+ */
95
+ export function computeVerdict(matches) {
96
+ if (matches.length === 0) {
97
+ return Object.freeze({
98
+ outcome: 'allow',
99
+ reason: 'No rules matched.',
100
+ matchCount: 0,
101
+ highestSeverity: null,
102
+ highestConfidence: 0,
103
+ actions: Object.freeze([]),
104
+ matches: Object.freeze([]),
105
+ timestamp: new Date().toISOString(),
106
+ });
107
+ }
108
+ // Matches are already sorted by the engine (severity desc, confidence desc).
109
+ // The first match has the highest severity.
110
+ const highestMatch = matches[0];
111
+ const highestSeverity = highestMatch.rule.severity;
112
+ const highestConfidence = highestMatch.confidence;
113
+ const outcome = determineOutcome(highestSeverity, highestConfidence);
114
+ const actions = collectUniqueActions(matches);
115
+ const reason = buildReason(highestMatch, outcome, matches.length);
116
+ return Object.freeze({
117
+ outcome,
118
+ reason,
119
+ matchCount: matches.length,
120
+ highestSeverity,
121
+ highestConfidence,
122
+ actions,
123
+ matches: Object.freeze([...matches]),
124
+ timestamp: new Date().toISOString(),
125
+ });
126
+ }
127
+ //# sourceMappingURL=verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-threat-rules",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "description": "Open detection rules for AI agent threats. Like Sigma, but for prompt injection, tool poisoning, and agent manipulation.",
6
6
  "main": "./dist/index.js",
@@ -14,6 +14,10 @@
14
14
  "import": "./dist/index.js",
15
15
  "types": "./dist/index.d.ts"
16
16
  },
17
+ "./mcp": {
18
+ "import": "./dist/mcp-server.js",
19
+ "types": "./dist/mcp-server.d.ts"
20
+ },
17
21
  "./rules": "./rules",
18
22
  "./spec": "./spec/atr-schema.yaml"
19
23
  },
@@ -59,6 +63,7 @@
59
63
  "prepublishOnly": "npm run build"
60
64
  },
61
65
  "dependencies": {
66
+ "@modelcontextprotocol/sdk": "^1.12.0",
62
67
  "js-yaml": "^4.1.0"
63
68
  },
64
69
  "devDependencies": {
@@ -10,7 +10,7 @@ description: |
10
10
  or manipulates message format conventions to deceive target agents.
11
11
  These attacks exploit trust relationships between agents to achieve
12
12
  unauthorized actions, data exfiltration, or safety bypass.
13
- author: "Panguard AI"
13
+ author: "ATR Community"
14
14
  date: "2026/03/08"
15
15
  schema_version: "0.1"
16
16
  detection_tier: pattern
@@ -10,7 +10,7 @@ description: |
10
10
  failure, unauthorized actions, data leakage, or resource waste.
11
11
  This rule uses regex-only detection on both user input and agent output
12
12
  to identify redirection language patterns.
13
- author: "Panguard AI"
13
+ author: "ATR Community"
14
14
  date: "2026/03/08"
15
15
  schema_version: "0.1"
16
16
  detection_tier: pattern