agent-threat-rules 4.1.5 → 4.2.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/CHANGELOG.md +688 -1
- package/README.md +355 -125
- package/dist/adapters/openshell-filter.d.ts +10 -3
- package/dist/adapters/openshell-filter.d.ts.map +1 -1
- package/dist/adapters/openshell-filter.js +10 -3
- package/dist/adapters/openshell-filter.js.map +1 -1
- package/dist/adapters/stdio-adapter.js +3 -3
- package/dist/adapters/stdio-adapter.js.map +1 -1
- package/dist/cli/mcp-tools-document.d.ts +40 -0
- package/dist/cli/mcp-tools-document.d.ts.map +1 -0
- package/dist/cli/mcp-tools-document.js +95 -0
- package/dist/cli/mcp-tools-document.js.map +1 -0
- package/dist/cli/scan-handler.d.ts +8 -0
- package/dist/cli/scan-handler.d.ts.map +1 -1
- package/dist/cli/scan-handler.js +126 -34
- package/dist/cli/scan-handler.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +80 -43
- package/dist/cli.js.map +1 -1
- package/dist/converters/sarif.d.ts +14 -2
- package/dist/converters/sarif.d.ts.map +1 -1
- package/dist/converters/sarif.js +7 -9
- package/dist/converters/sarif.js.map +1 -1
- package/dist/corpus-event.d.ts +47 -5
- package/dist/corpus-event.d.ts.map +1 -1
- package/dist/corpus-event.js +68 -29
- package/dist/corpus-event.js.map +1 -1
- package/dist/embedding/model-loader.d.ts +2 -0
- package/dist/embedding/model-loader.d.ts.map +1 -1
- package/dist/embedding/model-loader.js +3 -1
- package/dist/embedding/model-loader.js.map +1 -1
- package/dist/enforcement.d.ts +8 -0
- package/dist/enforcement.d.ts.map +1 -1
- package/dist/enforcement.js +10 -0
- package/dist/enforcement.js.map +1 -1
- package/dist/engine.d.ts +150 -6
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +337 -76
- package/dist/engine.js.map +1 -1
- package/dist/eval/embedding-provenance.d.ts +40 -0
- package/dist/eval/embedding-provenance.d.ts.map +1 -0
- package/dist/eval/embedding-provenance.js +71 -0
- package/dist/eval/embedding-provenance.js.map +1 -0
- package/dist/eval/eval-harness.d.ts +34 -0
- package/dist/eval/eval-harness.d.ts.map +1 -1
- package/dist/eval/eval-harness.js +49 -2
- package/dist/eval/eval-harness.js.map +1 -1
- package/dist/eval/hackaprompt-corpus.d.ts +12 -0
- package/dist/eval/hackaprompt-corpus.d.ts.map +1 -1
- package/dist/eval/hackaprompt-corpus.js +15 -1
- package/dist/eval/hackaprompt-corpus.js.map +1 -1
- package/dist/eval/hackaprompt-provenance.d.ts +52 -0
- package/dist/eval/hackaprompt-provenance.d.ts.map +1 -0
- package/dist/eval/hackaprompt-provenance.js +108 -0
- package/dist/eval/hackaprompt-provenance.js.map +1 -0
- package/dist/eval/run-hackaprompt-benchmark.d.ts +18 -8
- package/dist/eval/run-hackaprompt-benchmark.d.ts.map +1 -1
- package/dist/eval/run-hackaprompt-benchmark.js +154 -64
- package/dist/eval/run-hackaprompt-benchmark.js.map +1 -1
- package/dist/eval/run-pint-benchmark.js +11 -1
- package/dist/eval/run-pint-benchmark.js.map +1 -1
- package/dist/eval/skill-benchmark.d.ts +26 -6
- package/dist/eval/skill-benchmark.d.ts.map +1 -1
- package/dist/eval/skill-benchmark.js +49 -16
- package/dist/eval/skill-benchmark.js.map +1 -1
- package/dist/flywheel.d.ts +4 -0
- package/dist/flywheel.d.ts.map +1 -1
- package/dist/flywheel.js +12 -4
- package/dist/flywheel.js.map +1 -1
- package/dist/hook-handler.d.ts +11 -1
- package/dist/hook-handler.d.ts.map +1 -1
- package/dist/hook-handler.js +84 -16
- package/dist/hook-handler.js.map +1 -1
- package/dist/hook-tool-output.d.ts +47 -0
- package/dist/hook-tool-output.d.ts.map +1 -0
- package/dist/hook-tool-output.js +110 -0
- package/dist/hook-tool-output.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/layer-integration.d.ts +4 -2
- package/dist/layer-integration.d.ts.map +1 -1
- package/dist/layer-integration.js +6 -2
- package/dist/layer-integration.js.map +1 -1
- package/dist/mcp-server.d.ts +8 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +1 -0
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tools/scan.d.ts.map +1 -1
- package/dist/mcp-tools/scan.js +9 -1
- package/dist/mcp-tools/scan.js.map +1 -1
- package/dist/measurement/enforce-lane.d.ts +66 -0
- package/dist/measurement/enforce-lane.d.ts.map +1 -0
- package/dist/measurement/enforce-lane.js +89 -0
- package/dist/measurement/enforce-lane.js.map +1 -0
- package/dist/measurement/from-eval-harness.d.ts +16 -3
- package/dist/measurement/from-eval-harness.d.ts.map +1 -1
- package/dist/measurement/from-eval-harness.js +15 -5
- package/dist/measurement/from-eval-harness.js.map +1 -1
- package/dist/measurement/in-sample-ablation.d.ts +29 -0
- package/dist/measurement/in-sample-ablation.d.ts.map +1 -0
- package/dist/measurement/in-sample-ablation.js +45 -0
- package/dist/measurement/in-sample-ablation.js.map +1 -0
- package/dist/measurement/schema.d.ts +38 -1
- package/dist/measurement/schema.d.ts.map +1 -1
- package/dist/measurement/schema.js +43 -1
- package/dist/measurement/schema.js.map +1 -1
- package/dist/quality/action-eligibility.d.ts +4 -2
- package/dist/quality/action-eligibility.d.ts.map +1 -1
- package/dist/quality/action-eligibility.js.map +1 -1
- package/dist/rule-confidence.d.ts +31 -0
- package/dist/rule-confidence.d.ts.map +1 -0
- package/dist/rule-confidence.js +49 -0
- package/dist/rule-confidence.js.map +1 -0
- package/dist/rule-scaffolder.d.ts.map +1 -1
- package/dist/rule-scaffolder.js +43 -4
- package/dist/rule-scaffolder.js.map +1 -1
- package/dist/semantic-evaluator.d.ts.map +1 -1
- package/dist/semantic-evaluator.js +15 -13
- package/dist/semantic-evaluator.js.map +1 -1
- package/dist/shadow-evaluator.d.ts +7 -2
- package/dist/shadow-evaluator.d.ts.map +1 -1
- package/dist/shadow-evaluator.js +29 -25
- package/dist/shadow-evaluator.js.map +1 -1
- package/dist/testcase-event.d.ts +82 -1
- package/dist/testcase-event.d.ts.map +1 -1
- package/dist/testcase-event.js +135 -16
- package/dist/testcase-event.js.map +1 -1
- package/dist/tier0-invariant.d.ts.map +1 -1
- package/dist/tier0-invariant.js +1 -0
- package/dist/tier0-invariant.js.map +1 -1
- package/dist/tier1-blacklist.d.ts.map +1 -1
- package/dist/tier1-blacklist.js +1 -0
- package/dist/tier1-blacklist.js.map +1 -1
- package/dist/tool-definition-scope.d.ts +45 -0
- package/dist/tool-definition-scope.d.ts.map +1 -0
- package/dist/tool-definition-scope.js +68 -0
- package/dist/tool-definition-scope.js.map +1 -0
- package/dist/types.d.ts +42 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/verdict.d.ts +46 -2
- package/dist/verdict.d.ts.map +1 -1
- package/dist/verdict.js +99 -14
- package/dist/verdict.js.map +1 -1
- package/package.json +2 -1
- package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00418-weknora-mcp-config-rce.yaml +5 -5
- package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-00426-nl-output-injection-credential-leak.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00702-ipi-credential-exfil-via-agent-action.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00707-ipi-file-exfil-with-destroy-or-tamper.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00851-indirect-pi-financial-payment-exfil.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-01457-sysprompt-completion-clone-attack.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-01463-imend-imsystem-prompt-injection-format.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-01606-ssrf-internal-network-scan.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-02847-policy-justified-exfil-to-email.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-02855-cross-email-exfil-relay.yaml +79 -0
- package/rules/context-exfiltration/ATR-2026-02861-exfil-send-email-with-body-directive.yaml +83 -0
- package/rules/context-exfiltration/ATR-2026-02866-idna-label-separator-in-fetch-url-host.yaml +104 -0
- package/rules/excessive-autonomy/ATR-2026-00710-ipi-physical-access-grant.yaml +1 -1
- package/rules/model-abuse/ATR-2026-01897-host-sabotage.yaml +2 -2
- package/rules/model-security/ATR-2026-00433-modelcache-torch-load-deserialization-rce.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00436-enclave-vm-sandbox-escape-rce.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-01601-sql-injection-destructive-ddl.yaml +2 -2
- package/rules/privilege-escalation/ATR-2026-01612-debug-mode-privilege-escalation.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-02867-identifier-typed-tool-argument-dot-dot-path-segment.yaml +106 -0
- package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00080-encoding-evasion.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00086-visual-spoofing.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00203-context-pollution-skill-description.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00446-variable-assignment-payload-injection.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-01005-many-shot-repetition-override.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01006-payload-split-string-concat-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01015-evasion-refusal-suppression.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-01016-evasion-response-priming-forced-opener.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-01026-evasion-unicode-glitch-token-anomaly.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01304-indirect-injection-carrier-important-override.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-01759-dos-new-important-instructions-injection-in-document.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-02815-injected-halt-order-canned-reply-dos.yaml +80 -0
- package/rules/prompt-injection/ATR-2026-02820-tool-result-orders-agent-to-hide-its-own-action.yaml +106 -0
- package/rules/prompt-injection/ATR-2026-02858-context-suppression-directive.yaml +73 -0
- package/rules/prompt-injection/ATR-2026-02859-tool-output-agent-role-reassignment.yaml +71 -0
- package/rules/prompt-injection/ATR-2026-02860-forged-instruction-boundary-marker.yaml +70 -0
- package/rules/prompt-injection/ATR-2026-02862-fake-chat-template-turn-injection.yaml +79 -0
- package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +6 -6
- package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-01755-backdoor-pot-linguistic-trigger-phrase.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-01756-backdoor-pot-symbol-emoticon-trigger.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-02261-code-credential-exfil-chain.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +23 -23
- package/rules/tool-poisoning/ATR-2026-00013-tool-ssrf.yaml +16 -5
- package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00581-mcp-tool-rug-pull-post-approval-redefinition.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-01303-tool-schema-enumeration-social-engineering.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-01307-mcp-dns-rebinding-attack.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-01775-semantic-mcp-tool-manifest-poisoning.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-01932-shadow-undeclared-mcp-server-registration.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-02025-mcp-full-schema-poisoning-nondescription-field.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-02817-untrusted-content-dictates-tool-arguments.yaml +83 -0
- package/rules/tool-poisoning/ATR-2026-02864-non-canonical-ipv4-host-in-url-tool-argument.yaml +102 -0
- package/rules/tool-poisoning/ATR-2026-02865-read-only-utility-write-flag-in-command-argument.yaml +157 -0
- package/rules/tool-poisoning/ATR-2026-02868-ssrf-ipv6-transition-address-embedded-private-ipv4.yaml +107 -0
- package/spec/README.md +6 -3
- package/spec/atr-event-v1.0.md +13 -8
- package/spec/atr-method-v1.1.md +2 -2
- package/spec/category-registry/gemara/README.md +102 -0
- package/spec/category-registry/gemara/ai-agent-capability-catalog.yaml +157 -0
- package/spec/category-registry/gemara/atr-attack-vector-catalog.yaml +130 -0
- package/spec/category-registry/gemara/atr-detection-control-catalog.yaml +327 -0
- package/spec/category-registry/gemara/atr-threat-catalog.yaml +246 -0
- package/spec/category-registry/gemara/src/editorial.yaml +743 -0
- package/spec/mappings/README.md +1 -1
- package/spec/mappings/atr-to-nist-csf-2.0.md +5 -4
- package/spec/schema/event.schema.json +1 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# GENERATED by scripts/generate-gemara-catalogs.ts. Do not edit by hand.
|
|
2
|
+
# Inputs: spec/category-registry/v1.0.yaml (the category registry) and
|
|
3
|
+
# spec/category-registry/gemara/src/editorial.yaml
|
|
4
|
+
# Regenerate: npx tsx scripts/generate-gemara-catalogs.ts
|
|
5
|
+
# License: MIT
|
|
6
|
+
metadata:
|
|
7
|
+
id: ATR-AI-AGENT-CAPABILITY-CATALOG
|
|
8
|
+
type: CapabilityCatalog
|
|
9
|
+
gemara-version: 1.6.0
|
|
10
|
+
version: 1.0.0
|
|
11
|
+
description: >-
|
|
12
|
+
Capabilities of AI agent systems that create the opportunity for the threats
|
|
13
|
+
catalogued by Agent Threat Rules (ATR). Each capability describes a feature
|
|
14
|
+
or function an agent can perform, not a threat. Threats in the companion
|
|
15
|
+
threat catalog reference these capabilities. Authored by the ATR project and
|
|
16
|
+
validated against the Gemara schemas; ATR hosts the content, Gemara defines
|
|
17
|
+
the schema.
|
|
18
|
+
author:
|
|
19
|
+
id: atr
|
|
20
|
+
name: Agent Threat Rules
|
|
21
|
+
type: Software Assisted
|
|
22
|
+
contact:
|
|
23
|
+
name: ATR maintainers
|
|
24
|
+
affiliation: Agent Threat Rules
|
|
25
|
+
email: adam@agentthreatrule.org
|
|
26
|
+
draft: true
|
|
27
|
+
title: AI Agent Capability Catalog
|
|
28
|
+
groups:
|
|
29
|
+
- id: model-interaction
|
|
30
|
+
title: Model Interaction
|
|
31
|
+
description: >-
|
|
32
|
+
Capabilities by which an agent receives instructions and untrusted content
|
|
33
|
+
into a language model and acts on the model's output.
|
|
34
|
+
- id: tool-and-protocol
|
|
35
|
+
title: Tool and Protocol Access
|
|
36
|
+
description: >-
|
|
37
|
+
Capabilities by which an agent invokes external tools and connects to tool
|
|
38
|
+
servers over protocols such as the Model Context Protocol (MCP).
|
|
39
|
+
- id: extensibility
|
|
40
|
+
title: Extensibility
|
|
41
|
+
description: >-
|
|
42
|
+
Capabilities by which an agent loads and runs third-party extensions such
|
|
43
|
+
as skills, plugins, and packaged capability bundles.
|
|
44
|
+
- id: state-and-memory
|
|
45
|
+
title: State and Memory
|
|
46
|
+
description: >-
|
|
47
|
+
Capabilities by which an agent reads and writes persistent state,
|
|
48
|
+
conversation context, and long-term memory across turns and sessions.
|
|
49
|
+
- id: autonomy-and-coordination
|
|
50
|
+
title: Autonomy and Coordination
|
|
51
|
+
description: >-
|
|
52
|
+
Capabilities by which an agent acts without per-step human approval and
|
|
53
|
+
coordinates with other agents.
|
|
54
|
+
- id: model-supply-chain
|
|
55
|
+
title: Model supply chain
|
|
56
|
+
description: >-
|
|
57
|
+
Capabilities by which the model an agent depends on is built, packaged and
|
|
58
|
+
loaded. These sit outside agent runtime: they shape behaviour before any
|
|
59
|
+
request is served.
|
|
60
|
+
capabilities:
|
|
61
|
+
- id: CAP-MODEL-INFERENCE
|
|
62
|
+
title: Model Inference on Untrusted Input
|
|
63
|
+
description: >-
|
|
64
|
+
The agent passes user instructions and content drawn from external sources
|
|
65
|
+
into a language model and treats the resulting output as actionable.
|
|
66
|
+
Mixing trusted instructions with untrusted content in a single context
|
|
67
|
+
window is the feature that makes prompt injection and jailbreak attempts
|
|
68
|
+
possible.
|
|
69
|
+
group: model-interaction
|
|
70
|
+
- id: CAP-OUTPUT-ACTION
|
|
71
|
+
title: Acting on Model Output
|
|
72
|
+
description: >-
|
|
73
|
+
The agent converts model output into actions, tool calls, or content
|
|
74
|
+
returned to downstream systems. Because output is consumed without an
|
|
75
|
+
independent trust boundary, manipulated output can redirect behaviour or
|
|
76
|
+
carry exfiltrated data.
|
|
77
|
+
group: model-interaction
|
|
78
|
+
- id: CAP-TOOL-INVOCATION
|
|
79
|
+
title: Tool Invocation
|
|
80
|
+
description: >-
|
|
81
|
+
The agent calls external tools and functions, passing arguments and
|
|
82
|
+
receiving results that re-enter the model context. Tool arguments and tool
|
|
83
|
+
results are an attack surface for injection, command execution, and
|
|
84
|
+
over-broad actions.
|
|
85
|
+
group: tool-and-protocol
|
|
86
|
+
- id: CAP-MCP-CONNECTION
|
|
87
|
+
title: MCP and Tool-Server Connection
|
|
88
|
+
description: >-
|
|
89
|
+
The agent connects to tool servers over the Model Context Protocol or
|
|
90
|
+
similar transports, consuming server-provided tool manifests, schemas, and
|
|
91
|
+
descriptions. Server-controlled metadata is trusted at connection time,
|
|
92
|
+
which creates the opportunity for tool poisoning and tool redefinition
|
|
93
|
+
(rug-pull) after initial approval.
|
|
94
|
+
group: tool-and-protocol
|
|
95
|
+
- id: CAP-CROSS-AGENT-MESSAGING
|
|
96
|
+
title: Cross-Agent Message Passing
|
|
97
|
+
description: >-
|
|
98
|
+
The agent sends and receives messages to and from other agents in a
|
|
99
|
+
multi-agent workflow. Messages from peer agents are treated as trusted
|
|
100
|
+
input, which lets a compromised or manipulated agent influence others.
|
|
101
|
+
group: tool-and-protocol
|
|
102
|
+
- id: CAP-SKILL-LOADING
|
|
103
|
+
title: Skill and Plugin Loading
|
|
104
|
+
description: >-
|
|
105
|
+
The agent loads third-party skills, plugins, or capability bundles and
|
|
106
|
+
executes the instructions and code they contain. Loaded extensions run
|
|
107
|
+
with the agent's privileges, which creates the opportunity for supply
|
|
108
|
+
chain compromise and backdoored or over-privileged skills.
|
|
109
|
+
group: extensibility
|
|
110
|
+
- id: CAP-MEMORY-WRITE
|
|
111
|
+
title: Memory and State Write
|
|
112
|
+
description: >-
|
|
113
|
+
The agent writes facts, instructions, or artifacts into persistent memory
|
|
114
|
+
or shared state that influences later turns and sessions. Writable memory
|
|
115
|
+
is the feature that lets poisoned content persist and take effect after
|
|
116
|
+
the originating input is gone.
|
|
117
|
+
group: state-and-memory
|
|
118
|
+
- id: CAP-MEMORY-READ
|
|
119
|
+
title: Context and Memory Read
|
|
120
|
+
description: >-
|
|
121
|
+
The agent reads conversation history, retrieved documents, and long-term
|
|
122
|
+
memory back into the active context. Reading attacker- influenced state
|
|
123
|
+
re-introduces untrusted content and is a channel for indirect injection
|
|
124
|
+
and staged data exfiltration.
|
|
125
|
+
group: state-and-memory
|
|
126
|
+
- id: CAP-AUTONOMOUS-ACTION
|
|
127
|
+
title: Autonomous Action Without Per-Step Approval
|
|
128
|
+
description: >-
|
|
129
|
+
The agent executes multi-step plans, loops, and side-effecting actions
|
|
130
|
+
without human approval at each step. Unbounded autonomy is the feature
|
|
131
|
+
that turns a single manipulated decision into runaway loops, resource
|
|
132
|
+
abuse, or unauthorized real-world actions.
|
|
133
|
+
group: autonomy-and-coordination
|
|
134
|
+
- id: CAP-PRIVILEGED-EXECUTION
|
|
135
|
+
title: Privileged and Delegated Execution
|
|
136
|
+
description: >-
|
|
137
|
+
The agent runs with delegated credentials and access to systems,
|
|
138
|
+
databases, files, and networks. Holding standing privilege creates the
|
|
139
|
+
opportunity for privilege escalation, sandbox escape, and use of the
|
|
140
|
+
agent's access beyond its intended scope.
|
|
141
|
+
group: autonomy-and-coordination
|
|
142
|
+
- id: CAP-MODEL-ARTIFACT-LOADING
|
|
143
|
+
title: Model Artifact Loading
|
|
144
|
+
description: >-
|
|
145
|
+
The agent depends on a serialized model artifact that is fetched from a
|
|
146
|
+
registry or filesystem and deserialized into an executable object before
|
|
147
|
+
any behavioural check runs. The artifact is trusted at the moment it is
|
|
148
|
+
least verified.
|
|
149
|
+
group: model-supply-chain
|
|
150
|
+
- id: CAP-TRAINING-DATA-INGESTION
|
|
151
|
+
title: Training and Fine-Tuning Data Ingestion
|
|
152
|
+
description: >-
|
|
153
|
+
The model the agent depends on is adapted using data drawn from sources
|
|
154
|
+
the operator does not fully control. Ingested data shapes behaviour after
|
|
155
|
+
the originating input is gone, and every deployment of the resulting model
|
|
156
|
+
carries that shaping.
|
|
157
|
+
group: model-supply-chain
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# GENERATED by scripts/generate-gemara-catalogs.ts. Do not edit by hand.
|
|
2
|
+
# Inputs: spec/category-registry/v1.0.yaml (the category registry) and
|
|
3
|
+
# spec/category-registry/gemara/src/editorial.yaml
|
|
4
|
+
# Regenerate: npx tsx scripts/generate-gemara-catalogs.ts
|
|
5
|
+
# License: MIT
|
|
6
|
+
metadata:
|
|
7
|
+
id: ATR-AI-AGENT-VECTOR-CATALOG
|
|
8
|
+
type: VectorCatalog
|
|
9
|
+
gemara-version: 1.6.0
|
|
10
|
+
version: 1.0.0
|
|
11
|
+
description: >-
|
|
12
|
+
Attack vectors against AI agent systems, one per detection category in the
|
|
13
|
+
Agent Threat Rules (ATR) category registry. A category is a method by which
|
|
14
|
+
a threat is realized rather than the threat itself, which is why it lives
|
|
15
|
+
here and is referenced from the threat catalog rather than restated in it.
|
|
16
|
+
Generated from the registry: each vector id is a registry category id and
|
|
17
|
+
each description is the registry's description of that category.
|
|
18
|
+
|
|
19
|
+
Validated against Gemara's #VectorCatalog, which is marked experimental in
|
|
20
|
+
vectorcatalog.cue; this artifact may need to change with the schema.
|
|
21
|
+
author:
|
|
22
|
+
id: atr
|
|
23
|
+
name: Agent Threat Rules
|
|
24
|
+
type: Software Assisted
|
|
25
|
+
contact:
|
|
26
|
+
name: ATR maintainers
|
|
27
|
+
affiliation: Agent Threat Rules
|
|
28
|
+
email: adam@agentthreatrule.org
|
|
29
|
+
mapping-references:
|
|
30
|
+
- id: ATR
|
|
31
|
+
title: Agent Threat Rules category registry
|
|
32
|
+
version: "1.0"
|
|
33
|
+
url: >-
|
|
34
|
+
https://github.com/Agent-Threat-Rule/agent-threat-rules/blob/main/spec/category-registry/v1.0.yaml
|
|
35
|
+
description: >-
|
|
36
|
+
Detection categories of Agent Threat Rules (ATR). Each entry id is a
|
|
37
|
+
category id in this registry and names the directory under rules/ that
|
|
38
|
+
holds that category's rules.
|
|
39
|
+
draft: true
|
|
40
|
+
title: AI Agent Attack Vector Catalog (ATR)
|
|
41
|
+
groups:
|
|
42
|
+
- id: via-content
|
|
43
|
+
title: Through content the agent reads
|
|
44
|
+
description: >-
|
|
45
|
+
Vectors that arrive inside data the agent ingests and are acted on as
|
|
46
|
+
though they were operator instructions.
|
|
47
|
+
- id: via-extension
|
|
48
|
+
title: Through an artifact the agent loads
|
|
49
|
+
description: >-
|
|
50
|
+
Vectors carried by tools, skills, plugins or model artifacts, which arrive
|
|
51
|
+
through the supply chain rather than the conversation.
|
|
52
|
+
- id: via-authority
|
|
53
|
+
title: Through the authority the agent holds
|
|
54
|
+
description: >-
|
|
55
|
+
Vectors that exploit what the agent is permitted to do rather than what it
|
|
56
|
+
is told.
|
|
57
|
+
vectors:
|
|
58
|
+
- id: prompt-injection
|
|
59
|
+
title: Instruction injection into model context
|
|
60
|
+
description: >-
|
|
61
|
+
Adversarial inputs that subvert the agent's instruction-following behavior
|
|
62
|
+
— direct injection, indirect injection (via retrieved documents or tool
|
|
63
|
+
outputs), jailbreak attempts, system-prompt overrides, multi-turn
|
|
64
|
+
manipulation, and cross-agent injection.
|
|
65
|
+
group: via-content
|
|
66
|
+
- id: tool-poisoning
|
|
67
|
+
title: Manipulation of tool calls and tool output
|
|
68
|
+
description: >-
|
|
69
|
+
Attacks that manipulate the agent's tool-calling behavior — tool output
|
|
70
|
+
injection, unauthorized tool invocation, SSRF via tool calls, tool
|
|
71
|
+
argument tampering, shell-tool unsanitized argv, tool-response piggyback.
|
|
72
|
+
group: via-extension
|
|
73
|
+
- id: skill-compromise
|
|
74
|
+
title: Compromised skill, plugin or server package
|
|
75
|
+
description: >-
|
|
76
|
+
Compromise of skills, plugins, or MCP server packages — supply chain
|
|
77
|
+
attacks, malicious SKILL.md content, package typosquatting, install-time
|
|
78
|
+
daemon installation, silent exfiltration via skill instructions.
|
|
79
|
+
group: via-extension
|
|
80
|
+
- id: context-exfiltration
|
|
81
|
+
title: Context and credential exfiltration
|
|
82
|
+
description: >-
|
|
83
|
+
Attacks that leak the agent's context window, system prompt, memory store,
|
|
84
|
+
retrieved documents, or session state — memory poisoning with exfil
|
|
85
|
+
persistence, system-prompt leakage, credential pattern leakage in agent
|
|
86
|
+
output.
|
|
87
|
+
group: via-authority
|
|
88
|
+
- id: excessive-autonomy
|
|
89
|
+
title: Action beyond declared scope or authorization
|
|
90
|
+
description: >-
|
|
91
|
+
The agent acts beyond its declared scope, permissions, or authorization —
|
|
92
|
+
autonomous goal pursuit, permission-boundary violation, scope creep
|
|
93
|
+
through gradual privilege accumulation.
|
|
94
|
+
group: via-authority
|
|
95
|
+
- id: model-abuse
|
|
96
|
+
title: Model-level evasion of robustness and oversight
|
|
97
|
+
description: >-
|
|
98
|
+
Model-level attacks on the agent's underlying LLM — adversarial inputs
|
|
99
|
+
targeting model robustness, reward-hacking signatures in output,
|
|
100
|
+
deceptive-justification language, monitor-evasion attempts via env-var or
|
|
101
|
+
telemetry mutation.
|
|
102
|
+
group: via-content
|
|
103
|
+
- id: model-security
|
|
104
|
+
title: Attack on the model artifact
|
|
105
|
+
description: >-
|
|
106
|
+
Attacks on the model artifact itself — model weight tampering, unsafe
|
|
107
|
+
deserialization of model files, adversarial model registry uploads.
|
|
108
|
+
group: via-extension
|
|
109
|
+
- id: privilege-escalation
|
|
110
|
+
title: Privilege escalation and delegated authority abuse
|
|
111
|
+
description: >-
|
|
112
|
+
Attacks that escalate the agent's effective privileges — authentication
|
|
113
|
+
bypass on agent control plane (e.g., PraisonAI CVE-2026-44338), sudo /
|
|
114
|
+
chmod patterns in tool calls, scope escalation across agent chain.
|
|
115
|
+
group: via-authority
|
|
116
|
+
- id: agent-manipulation
|
|
117
|
+
title: Forged peer-agent identity and message framing
|
|
118
|
+
description: >-
|
|
119
|
+
Attacks on agent-to-agent (A2A) communication or identity — cross-agent
|
|
120
|
+
attacks, inter-agent message spoofing, agent identity replacement /
|
|
121
|
+
spoofing, fork impersonation, real-person identity commands, skill
|
|
122
|
+
impersonation.
|
|
123
|
+
group: via-content
|
|
124
|
+
- id: data-poisoning
|
|
125
|
+
title: Poisoning of state the agent will read later
|
|
126
|
+
description: >-
|
|
127
|
+
Attacks on the data the agent consumes — RAG retrieved document poisoning,
|
|
128
|
+
knowledge base poisoning, training-data tampering patterns (where
|
|
129
|
+
detectable at runtime).
|
|
130
|
+
group: via-content
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# GENERATED by scripts/generate-gemara-catalogs.ts. Do not edit by hand.
|
|
2
|
+
# Inputs: spec/category-registry/v1.0.yaml (the category registry) and
|
|
3
|
+
# spec/category-registry/gemara/src/editorial.yaml
|
|
4
|
+
# Regenerate: npx tsx scripts/generate-gemara-catalogs.ts
|
|
5
|
+
# License: MIT
|
|
6
|
+
metadata:
|
|
7
|
+
id: ATR-DETECTION-CONTROL-CATALOG
|
|
8
|
+
type: ControlCatalog
|
|
9
|
+
gemara-version: 1.6.0
|
|
10
|
+
version: 1.0.0
|
|
11
|
+
description: >-
|
|
12
|
+
Detection controls an operator can apply using Agent Threat Rules (ATR),
|
|
13
|
+
organized by where in the lifecycle the inspection happens rather than by
|
|
14
|
+
which rule category is used. Three are written out; the rest are declared
|
|
15
|
+
Draft rather than filled in with the same text, because a control whose
|
|
16
|
+
assessment requirement cannot fail is not a control. The OWASP ASI and MITRE
|
|
17
|
+
ATLAS references on each control are the modal references on the rules in
|
|
18
|
+
the categories it is implemented with, as counted on the rule corpus on
|
|
19
|
+
2026-08-24; they are not recomputed when rules change.
|
|
20
|
+
author:
|
|
21
|
+
id: atr
|
|
22
|
+
name: Agent Threat Rules
|
|
23
|
+
type: Software Assisted
|
|
24
|
+
contact:
|
|
25
|
+
name: ATR maintainers
|
|
26
|
+
affiliation: Agent Threat Rules
|
|
27
|
+
email: adam@agentthreatrule.org
|
|
28
|
+
mapping-references:
|
|
29
|
+
- id: ATR-AI-AGENT-THREAT-CATALOG
|
|
30
|
+
title: AI Agent Threat Catalog
|
|
31
|
+
version: 1.0.0
|
|
32
|
+
url: file://./atr-threat-catalog.yaml
|
|
33
|
+
description: Threats these controls are intended to detect.
|
|
34
|
+
- id: ATR
|
|
35
|
+
title: Agent Threat Rules category registry
|
|
36
|
+
version: "1.0"
|
|
37
|
+
url: >-
|
|
38
|
+
https://github.com/Agent-Threat-Rule/agent-threat-rules/blob/main/spec/category-registry/v1.0.yaml
|
|
39
|
+
description: >-
|
|
40
|
+
Detection categories of Agent Threat Rules (ATR). Each entry id is a
|
|
41
|
+
category id in this registry and names the directory under rules/ that
|
|
42
|
+
holds that category's rules.
|
|
43
|
+
- id: OWASP-ASI
|
|
44
|
+
title: OWASP Agentic Security Initiative Top 10
|
|
45
|
+
version: "2026"
|
|
46
|
+
url: https://genai.owasp.org/
|
|
47
|
+
description: Guidance each ATR rule already cross-references in its own metadata.
|
|
48
|
+
- id: MITRE-ATLAS
|
|
49
|
+
title: MITRE ATLAS
|
|
50
|
+
version: "2026"
|
|
51
|
+
url: https://atlas.mitre.org/
|
|
52
|
+
description: Adversarial technique taxonomy each ATR rule already cross-references.
|
|
53
|
+
applicability-groups:
|
|
54
|
+
- id: pre-load
|
|
55
|
+
title: Before an artifact is loaded
|
|
56
|
+
description: >-
|
|
57
|
+
Applies where an artifact is inspected before the agent can use it —
|
|
58
|
+
skills, plugins, tool manifests, model files.
|
|
59
|
+
- id: request-path
|
|
60
|
+
title: On the request path
|
|
61
|
+
description: >-
|
|
62
|
+
Applies where content is inspected while the agent is running, before it
|
|
63
|
+
reaches the model or leaves the boundary.
|
|
64
|
+
- id: at-write
|
|
65
|
+
title: When content is committed to durable state
|
|
66
|
+
description: >-
|
|
67
|
+
Applies when content is written to memory, a cache or a retrieval
|
|
68
|
+
corpus, regardless of whether an agent is executing at the time.
|
|
69
|
+
- id: data-pipeline
|
|
70
|
+
title: In the data pipeline
|
|
71
|
+
description: >-
|
|
72
|
+
Applies where training or adaptation data is assembled, ahead of any
|
|
73
|
+
agent execution.
|
|
74
|
+
draft: true
|
|
75
|
+
title: ATR Detection Control Catalog
|
|
76
|
+
imports:
|
|
77
|
+
- reference-id: ATR-AI-AGENT-THREAT-CATALOG
|
|
78
|
+
entries:
|
|
79
|
+
- reference-id: ATR-THREAT-UNAUTHORIZED-ACTION
|
|
80
|
+
- reference-id: ATR-THREAT-DELAYED-UNAUTHORIZED-ACTION
|
|
81
|
+
- reference-id: ATR-THREAT-CONTEXT-DISCLOSURE
|
|
82
|
+
- reference-id: ATR-THREAT-EXECUTION-ESCAPE
|
|
83
|
+
- reference-id: ATR-THREAT-UNBOUNDED-COMMITMENT
|
|
84
|
+
- reference-id: ATR-THREAT-MODEL-BEHAVIOUR-COMPROMISE
|
|
85
|
+
groups:
|
|
86
|
+
- id: artifact-screening
|
|
87
|
+
title: Artifact screening
|
|
88
|
+
description: Controls that inspect something before the agent is allowed to use it.
|
|
89
|
+
- id: content-screening
|
|
90
|
+
title: Content screening
|
|
91
|
+
description: Controls that inspect content on the request or response path.
|
|
92
|
+
- id: pipeline-screening
|
|
93
|
+
title: Pipeline screening
|
|
94
|
+
description: Controls that inspect data before it shapes a model.
|
|
95
|
+
controls:
|
|
96
|
+
- id: ATR-CTL-EXTENSION-SCREENING
|
|
97
|
+
title: Screening of loadable extensions before use
|
|
98
|
+
objective: >-
|
|
99
|
+
No skill, plugin, tool manifest or model artifact becomes available to the
|
|
100
|
+
agent without having been inspected for hostile content, and the operator
|
|
101
|
+
can tell afterwards which ruleset that inspection was performed under.
|
|
102
|
+
group: artifact-screening
|
|
103
|
+
assessment-requirements:
|
|
104
|
+
- id: ATR-CTL-EXTENSION-SCREENING-AR-1
|
|
105
|
+
text: >-
|
|
106
|
+
Every extension artifact MUST be scanned before it is registered as
|
|
107
|
+
available to the agent, and registration MUST fail closed when the
|
|
108
|
+
scan cannot complete or the ruleset version cannot be resolved.
|
|
109
|
+
applicability:
|
|
110
|
+
- pre-load
|
|
111
|
+
recommendation: >-
|
|
112
|
+
Failing closed is the part that is usually skipped. A scanner that is
|
|
113
|
+
unreachable and treated as a pass converts this control into a
|
|
114
|
+
formality without changing any observable behaviour.
|
|
115
|
+
- id: ATR-CTL-EXTENSION-SCREENING-AR-2
|
|
116
|
+
text: >-
|
|
117
|
+
A serialized model artifact MUST NOT be deserialized before its digest
|
|
118
|
+
has been checked against the digest recorded when it was screened.
|
|
119
|
+
applicability:
|
|
120
|
+
- pre-load
|
|
121
|
+
recommendation: >-
|
|
122
|
+
Deserialization is the execution boundary for this class of artifact,
|
|
123
|
+
so a check performed after loading has already lost.
|
|
124
|
+
- id: ATR-CTL-EXTENSION-SCREENING-AR-3
|
|
125
|
+
text: >-
|
|
126
|
+
The ruleset version in effect MUST be recorded with each screening
|
|
127
|
+
result and retained for as long as the artifact remains registered.
|
|
128
|
+
applicability:
|
|
129
|
+
- pre-load
|
|
130
|
+
recommendation: >-
|
|
131
|
+
A clean result is bounded by the rules that ran. Without the version,
|
|
132
|
+
a later question about coverage has no answer.
|
|
133
|
+
guidelines:
|
|
134
|
+
- reference-id: OWASP-ASI
|
|
135
|
+
entries:
|
|
136
|
+
- reference-id: ASI04:2026
|
|
137
|
+
- reference-id: ASI05:2026
|
|
138
|
+
- reference-id: MITRE-ATLAS
|
|
139
|
+
entries:
|
|
140
|
+
- reference-id: AML.T0010
|
|
141
|
+
- reference-id: ATR
|
|
142
|
+
entries:
|
|
143
|
+
- reference-id: skill-compromise
|
|
144
|
+
- reference-id: model-security
|
|
145
|
+
remarks: >-
|
|
146
|
+
The rule categories this control is implemented with; each id is a
|
|
147
|
+
category in the ATR category registry and a directory under rules/.
|
|
148
|
+
threats:
|
|
149
|
+
- reference-id: ATR-AI-AGENT-THREAT-CATALOG
|
|
150
|
+
entries:
|
|
151
|
+
- reference-id: ATR-THREAT-EXECUTION-ESCAPE
|
|
152
|
+
- reference-id: ATR-THREAT-UNAUTHORIZED-ACTION
|
|
153
|
+
remarks: >-
|
|
154
|
+
Screening covers both because a hostile extension can either execute
|
|
155
|
+
directly or steer the model into acting; the rules that detect each
|
|
156
|
+
differ, the moment of inspection does not.
|
|
157
|
+
state: Active
|
|
158
|
+
- id: ATR-CTL-INBOUND-CONTENT-SCREENING
|
|
159
|
+
title: Screening of untrusted content entering model context
|
|
160
|
+
objective: >-
|
|
161
|
+
Content reaching the model from a source the operator does not control is
|
|
162
|
+
inspected for embedded instructions before the agent acts on it, and a
|
|
163
|
+
detection carries enough provenance for a human to adjudicate it.
|
|
164
|
+
group: content-screening
|
|
165
|
+
assessment-requirements:
|
|
166
|
+
- id: ATR-CTL-INBOUND-CONTENT-SCREENING-AR-1
|
|
167
|
+
text: >-
|
|
168
|
+
Content retrieved from an external source MUST be inspected before it
|
|
169
|
+
enters the model context, and each detection MUST record the matching
|
|
170
|
+
rule id, the ruleset version, and the location of the match within the
|
|
171
|
+
content.
|
|
172
|
+
applicability:
|
|
173
|
+
- request-path
|
|
174
|
+
recommendation: >-
|
|
175
|
+
Recording the location is what makes a detection adjudicable. A rule
|
|
176
|
+
id alone tells a reviewer that something matched, not what.
|
|
177
|
+
- id: ATR-CTL-INBOUND-CONTENT-SCREENING-AR-2
|
|
178
|
+
text: >-
|
|
179
|
+
Content written into persistent memory or a retrieval corpus MUST be
|
|
180
|
+
inspected at write time as well as at read time.
|
|
181
|
+
applicability:
|
|
182
|
+
- request-path
|
|
183
|
+
- at-write
|
|
184
|
+
recommendation: >-
|
|
185
|
+
Write-time inspection is the only point at which the originating
|
|
186
|
+
request is still available to attribute a later action to.
|
|
187
|
+
- id: ATR-CTL-INBOUND-CONTENT-SCREENING-AR-3
|
|
188
|
+
text: >-
|
|
189
|
+
The deployment MUST record which rule maturity lane was in effect for
|
|
190
|
+
each inspection, and MUST NOT block on a lane the operator has not
|
|
191
|
+
accepted for blocking.
|
|
192
|
+
applicability:
|
|
193
|
+
- request-path
|
|
194
|
+
recommendation: >-
|
|
195
|
+
ATR publishes rules at differing maturity. Blocking on a lane intended
|
|
196
|
+
for triage converts a detection surface into an availability incident.
|
|
197
|
+
guidelines:
|
|
198
|
+
- reference-id: OWASP-ASI
|
|
199
|
+
entries:
|
|
200
|
+
- reference-id: ASI01:2026
|
|
201
|
+
- reference-id: ASI06:2026
|
|
202
|
+
- reference-id: MITRE-ATLAS
|
|
203
|
+
entries:
|
|
204
|
+
- reference-id: AML.T0051
|
|
205
|
+
- reference-id: ATR
|
|
206
|
+
entries:
|
|
207
|
+
- reference-id: prompt-injection
|
|
208
|
+
- reference-id: data-poisoning
|
|
209
|
+
remarks: >-
|
|
210
|
+
The rule categories this control is implemented with; each id is a
|
|
211
|
+
category in the ATR category registry and a directory under rules/.
|
|
212
|
+
threats:
|
|
213
|
+
- reference-id: ATR-AI-AGENT-THREAT-CATALOG
|
|
214
|
+
entries:
|
|
215
|
+
- reference-id: ATR-THREAT-UNAUTHORIZED-ACTION
|
|
216
|
+
- reference-id: ATR-THREAT-DELAYED-UNAUTHORIZED-ACTION
|
|
217
|
+
state: Active
|
|
218
|
+
- id: ATR-CTL-EGRESS-SCREENING
|
|
219
|
+
title: Screening of agent-initiated egress
|
|
220
|
+
objective: >-
|
|
221
|
+
Content the agent sends outside the trust boundary is inspected before it
|
|
222
|
+
leaves, so that a permitted call carrying context or credentials is
|
|
223
|
+
surfaced rather than passing on the strength of its destination.
|
|
224
|
+
group: content-screening
|
|
225
|
+
assessment-requirements:
|
|
226
|
+
- id: ATR-CTL-EGRESS-SCREENING-AR-1
|
|
227
|
+
text: >-
|
|
228
|
+
Outbound request content MUST be inspected before the request is
|
|
229
|
+
issued, not reconstructed from logs afterwards.
|
|
230
|
+
applicability:
|
|
231
|
+
- request-path
|
|
232
|
+
recommendation: >-
|
|
233
|
+
Post-hoc inspection can attribute a disclosure but cannot prevent it,
|
|
234
|
+
and for credentials the distinction is the whole control.
|
|
235
|
+
- id: ATR-CTL-EGRESS-SCREENING-AR-2
|
|
236
|
+
text: >-
|
|
237
|
+
Credential-bearing headers MUST be redacted before content is passed
|
|
238
|
+
to inspection, and a detection MUST NOT reproduce matched credential
|
|
239
|
+
material in its finding.
|
|
240
|
+
applicability:
|
|
241
|
+
- request-path
|
|
242
|
+
recommendation: >-
|
|
243
|
+
A detection surface that stores what it detected becomes a second copy
|
|
244
|
+
of the secret, in a system usually held to a lower standard.
|
|
245
|
+
- id: ATR-CTL-EGRESS-SCREENING-AR-3
|
|
246
|
+
text: >-
|
|
247
|
+
Where inspection cannot evaluate a request shape, the deployment MUST
|
|
248
|
+
record that the request was not evaluated rather than recording it as
|
|
249
|
+
clean.
|
|
250
|
+
applicability:
|
|
251
|
+
- request-path
|
|
252
|
+
recommendation: >-
|
|
253
|
+
Rules are written against an event vocabulary. Where a request does
|
|
254
|
+
not map onto it, "no finding" and "not looked at" are different facts
|
|
255
|
+
and only one of them is safe to aggregate.
|
|
256
|
+
guidelines:
|
|
257
|
+
- reference-id: MITRE-ATLAS
|
|
258
|
+
entries:
|
|
259
|
+
- reference-id: AML.T0057
|
|
260
|
+
- reference-id: AML.T0056
|
|
261
|
+
- reference-id: ATR
|
|
262
|
+
entries:
|
|
263
|
+
- reference-id: context-exfiltration
|
|
264
|
+
remarks: >-
|
|
265
|
+
The rule category this control is implemented with. No OWASP ASI entry
|
|
266
|
+
is cited: the modal reference on these rules is ASI01, which names the
|
|
267
|
+
injection that induces the disclosure rather than the disclosure
|
|
268
|
+
itself, so citing it here would overstate the fit.
|
|
269
|
+
threats:
|
|
270
|
+
- reference-id: ATR-AI-AGENT-THREAT-CATALOG
|
|
271
|
+
entries:
|
|
272
|
+
- reference-id: ATR-THREAT-CONTEXT-DISCLOSURE
|
|
273
|
+
state: Active
|
|
274
|
+
- id: ATR-CTL-AUTONOMY-BOUNDING
|
|
275
|
+
title: Bounding of unattended commitment
|
|
276
|
+
objective: >-
|
|
277
|
+
Consequential commitments made without a human decision point are detected
|
|
278
|
+
and bounded.
|
|
279
|
+
group: content-screening
|
|
280
|
+
assessment-requirements:
|
|
281
|
+
- id: ATR-CTL-AUTONOMY-BOUNDING-AR-1
|
|
282
|
+
text: >-
|
|
283
|
+
An action that commits funds, capacity or an external obligation MUST
|
|
284
|
+
require a recorded human decision, and the deployment MUST be able to
|
|
285
|
+
show which decision authorized a given commitment.
|
|
286
|
+
applicability:
|
|
287
|
+
- request-path
|
|
288
|
+
state: Draft
|
|
289
|
+
recommendation: >-
|
|
290
|
+
Held Draft because ATR cannot assess it. The rules under
|
|
291
|
+
rules/excessive-autonomy detect the shapes that precede an unbounded
|
|
292
|
+
commitment — loop continuation, scope expansion — but nothing in the
|
|
293
|
+
corpus observes whether an approval was obtained, because approval is
|
|
294
|
+
a property of the deployment's control flow rather than of any event
|
|
295
|
+
ATR inspects. Written out so the gap is visible, and Draft so no
|
|
296
|
+
evaluator treats it as assessable today.
|
|
297
|
+
threats:
|
|
298
|
+
- reference-id: ATR-AI-AGENT-THREAT-CATALOG
|
|
299
|
+
entries:
|
|
300
|
+
- reference-id: ATR-THREAT-UNBOUNDED-COMMITMENT
|
|
301
|
+
state: Draft
|
|
302
|
+
- id: ATR-CTL-ADAPTATION-DATA-SCREENING
|
|
303
|
+
title: Screening of model adaptation data
|
|
304
|
+
objective: Data used to adapt a model is inspected before it shapes behaviour.
|
|
305
|
+
group: pipeline-screening
|
|
306
|
+
assessment-requirements:
|
|
307
|
+
- id: ATR-CTL-ADAPTATION-DATA-SCREENING-AR-1
|
|
308
|
+
text: >-
|
|
309
|
+
Data used to adapt or fine-tune a model MUST be screened for
|
|
310
|
+
attacker-controlled content before it enters the training set.
|
|
311
|
+
applicability:
|
|
312
|
+
- data-pipeline
|
|
313
|
+
state: Draft
|
|
314
|
+
recommendation: >-
|
|
315
|
+
Held Draft because of a mismatch that is easy to state wrongly. ATR
|
|
316
|
+
does carry a rule for this — ATR-2026-00073, Malicious Fine-tuning
|
|
317
|
+
Data, which cites AML.T0020 Poison Training Data — but it binds a
|
|
318
|
+
runtime event field, user_input over an agent I/O source, rather than
|
|
319
|
+
a corpus at rest. A deployment could satisfy this requirement with a
|
|
320
|
+
pipeline scanner ATR had no part in, and ATR could pass a request
|
|
321
|
+
without the training set having been screened. Draft until rules exist
|
|
322
|
+
that run against a corpus rather than an event.
|
|
323
|
+
threats:
|
|
324
|
+
- reference-id: ATR-AI-AGENT-THREAT-CATALOG
|
|
325
|
+
entries:
|
|
326
|
+
- reference-id: ATR-THREAT-MODEL-BEHAVIOUR-COMPROMISE
|
|
327
|
+
state: Draft
|