agent-threat-rules 2.1.5 → 3.0.5

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 (172) hide show
  1. package/README.md +365 -327
  2. package/dist/engine.d.ts +46 -1
  3. package/dist/engine.d.ts.map +1 -1
  4. package/dist/engine.js +242 -1
  5. package/dist/engine.js.map +1 -1
  6. package/dist/eval/eval-harness.d.ts.map +1 -1
  7. package/dist/eval/eval-harness.js +9 -0
  8. package/dist/eval/eval-harness.js.map +1 -1
  9. package/dist/eval/run-hackaprompt-benchmark.js +9 -0
  10. package/dist/eval/run-hackaprompt-benchmark.js.map +1 -1
  11. package/dist/eval/run-pint-benchmark.js +9 -0
  12. package/dist/eval/run-pint-benchmark.js.map +1 -1
  13. package/dist/eval/skill-benchmark.d.ts +11 -0
  14. package/dist/eval/skill-benchmark.d.ts.map +1 -1
  15. package/dist/eval/skill-benchmark.js +57 -0
  16. package/dist/eval/skill-benchmark.js.map +1 -1
  17. package/dist/measurement/from-eval-harness.d.ts +70 -0
  18. package/dist/measurement/from-eval-harness.d.ts.map +1 -0
  19. package/dist/measurement/from-eval-harness.js +49 -0
  20. package/dist/measurement/from-eval-harness.js.map +1 -0
  21. package/dist/measurement/schema.d.ts +152 -0
  22. package/dist/measurement/schema.d.ts.map +1 -0
  23. package/dist/measurement/schema.js +178 -0
  24. package/dist/measurement/schema.js.map +1 -0
  25. package/dist/measurement/write.d.ts +64 -0
  26. package/dist/measurement/write.d.ts.map +1 -0
  27. package/dist/measurement/write.js +163 -0
  28. package/dist/measurement/write.js.map +1 -0
  29. package/dist/semantic-evaluator.d.ts +48 -0
  30. package/dist/semantic-evaluator.d.ts.map +1 -0
  31. package/dist/semantic-evaluator.js +107 -0
  32. package/dist/semantic-evaluator.js.map +1 -0
  33. package/dist/trace-evaluator.d.ts +22 -0
  34. package/dist/trace-evaluator.d.ts.map +1 -0
  35. package/dist/trace-evaluator.js +249 -0
  36. package/dist/trace-evaluator.js.map +1 -0
  37. package/dist/types.d.ts +143 -0
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +5 -3
  40. package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +216 -0
  41. package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +126 -0
  42. package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +173 -0
  43. package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +164 -0
  44. package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +178 -0
  45. package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +202 -0
  46. package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +180 -0
  47. package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +257 -0
  48. package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +177 -0
  49. package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +152 -0
  50. package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +168 -0
  51. package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +174 -0
  52. package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +158 -0
  53. package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +187 -0
  54. package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +192 -0
  55. package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +292 -0
  56. package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +162 -0
  57. package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +167 -0
  58. package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +193 -0
  59. package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +198 -0
  60. package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +172 -0
  61. package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +165 -0
  62. package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +162 -0
  63. package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +153 -0
  64. package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +168 -0
  65. package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +160 -0
  66. package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +143 -0
  67. package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +136 -0
  68. package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +162 -0
  69. package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +140 -0
  70. package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +141 -0
  71. package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +142 -0
  72. package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +139 -0
  73. package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +145 -0
  74. package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +141 -0
  75. package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +140 -0
  76. package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +141 -0
  77. package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +140 -0
  78. package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +155 -0
  79. package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +150 -0
  80. package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +140 -0
  81. package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +133 -0
  82. package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +136 -0
  83. package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +157 -0
  84. package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +143 -0
  85. package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +136 -0
  86. package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +146 -0
  87. package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +137 -0
  88. package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +153 -0
  89. package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +128 -0
  90. package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +141 -0
  91. package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +138 -0
  92. package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +141 -0
  93. package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +125 -0
  94. package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +134 -0
  95. package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +137 -0
  96. package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +158 -0
  97. package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +158 -0
  98. package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +156 -0
  99. package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +158 -0
  100. package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +177 -0
  101. package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +148 -0
  102. package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +179 -0
  103. package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +169 -0
  104. package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +150 -0
  105. package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +160 -0
  106. package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +149 -0
  107. package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +154 -0
  108. package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +154 -0
  109. package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +168 -0
  110. package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +189 -0
  111. package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +185 -0
  112. package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +181 -0
  113. package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +194 -0
  114. package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +154 -0
  115. package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +151 -0
  116. package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +153 -0
  117. package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +199 -0
  118. package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +199 -0
  119. package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +5 -2
  120. package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +221 -0
  121. package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +220 -0
  122. package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +201 -0
  123. package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +179 -0
  124. package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +167 -0
  125. package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +176 -0
  126. package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +219 -0
  127. package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +167 -0
  128. package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +158 -0
  129. package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +184 -0
  130. package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +174 -0
  131. package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +155 -0
  132. package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +151 -0
  133. package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +155 -0
  134. package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +199 -0
  135. package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +226 -0
  136. package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +244 -0
  137. package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +186 -0
  138. package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +183 -0
  139. package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +166 -0
  140. package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +168 -0
  141. package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +172 -0
  142. package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +170 -0
  143. package/spec/README.md +279 -0
  144. package/spec/atr-correlation-v1.0.md +281 -0
  145. package/spec/atr-event-v1.0.md +294 -0
  146. package/spec/atr-language-detection-v1.0.md +218 -0
  147. package/spec/atr-method-v1.1.md +557 -0
  148. package/spec/atr-profile-v1.0.md +307 -0
  149. package/spec/atr-schema.yaml +279 -8
  150. package/spec/category-registry/v1.0.yaml +200 -0
  151. package/spec/conformance/README.md +244 -0
  152. package/spec/conformance/SIGNING.md +191 -0
  153. package/spec/conformance/baseline/fixtures/ATR-2026-00001-tp-001/expected.json +36 -0
  154. package/spec/conformance/baseline/fixtures/ATR-2026-00001-tp-001/input.json +16 -0
  155. package/spec/conformance/baseline/fixtures/README.md +120 -0
  156. package/spec/conformance/baseline/manifest.json +56 -0
  157. package/spec/conformance/expected-results.schema.json +121 -0
  158. package/spec/external-registries/cccs-yara.md +142 -0
  159. package/spec/internet-drafts/draft-lin-atr-core-00.html +1925 -0
  160. package/spec/internet-drafts/draft-lin-atr-core-00.md +288 -0
  161. package/spec/internet-drafts/draft-lin-atr-core-00.txt +560 -0
  162. package/spec/internet-drafts/draft-lin-atr-core-00.xml +424 -0
  163. package/spec/mappings/README.md +43 -0
  164. package/spec/mappings/atr-to-nist-csf-2.0.md +234 -0
  165. package/spec/schema/correlation.schema.json +144 -0
  166. package/spec/schema/event.schema.json +233 -0
  167. package/spec/schema/profile.schema.json +196 -0
  168. package/spec/schema/rule.schema.json +224 -0
  169. package/spec/stix-extension/README.md +76 -13
  170. package/spec/stix-extension/examples/atr-rule-trace-method-example.json +85 -0
  171. package/spec/stix-extension/extension-definition.json +23 -3
  172. package/spec/stix-extension/x-atr-rule-schema.json +107 -11
@@ -0,0 +1,424 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <rfc xmlns:xi="http://www.w3.org/2001/XInclude"
3
+ ipr="trust200902"
4
+ docName="draft-lin-atr-core-00"
5
+ category="info"
6
+ submissionType="independent"
7
+ xml:lang="en"
8
+ tocInclude="true"
9
+ tocDepth="3"
10
+ version="3">
11
+
12
+ <front>
13
+ <title abbrev="ATR Core">Agent Threat Rules (ATR): An Open Detection Standard for AI Agent Security Threats</title>
14
+ <seriesInfo name="Internet-Draft" value="draft-lin-atr-core-00"/>
15
+
16
+ <author initials="K-H." surname="Lin" fullname="Kuan-Hsin Lin">
17
+ <organization>ATR Project / Panguard AI, Inc.</organization>
18
+ <address>
19
+ <postal>
20
+ <city>Taipei</city>
21
+ <country>Taiwan</country>
22
+ </postal>
23
+ <email>adam@agentthreatrule.org</email>
24
+ <uri>https://agentthreatrule.org</uri>
25
+ </address>
26
+ </author>
27
+
28
+ <date year="2026" month="May" day="16"/>
29
+ <area>Security</area>
30
+ <workgroup>Independent Submission</workgroup>
31
+
32
+ <keyword>AI agent</keyword>
33
+ <keyword>prompt injection</keyword>
34
+ <keyword>tool poisoning</keyword>
35
+ <keyword>MCP</keyword>
36
+ <keyword>detection rule</keyword>
37
+ <keyword>YAML</keyword>
38
+
39
+ <abstract>
40
+ <t>This document specifies the Agent Threat Rules (ATR) Core
41
+ Specification, an open, vendor-neutral detection rule standard for
42
+ AI agent security threats. ATR is analogous in role to Sigma for
43
+ SIEM but applies to AI agent artifacts (skill descriptions, MCP
44
+ tool definitions, agent configurations) and AI agent runtime events
45
+ (LLM input/output, tool invocations, context windows). The
46
+ specification defines the rule wire format in YAML 1.2, the
47
+ canonical rule identifier scheme, evaluation semantics with
48
+ explicit combinator and operator vocabularies, match output
49
+ structure, ten canonical threat categories, and three conformance
50
+ levels. The intent is to enable interoperable detection across
51
+ independent implementations and to provide a machine-readable
52
+ layer that operationalizes policy frameworks such as NIST AI RMF,
53
+ the NIST Generative AI Profile (AI 600-1), OWASP Agentic Top 10,
54
+ and MITRE ATLAS.</t>
55
+ </abstract>
56
+ </front>
57
+
58
+ <middle>
59
+
60
+ <section anchor="introduction"><name>Introduction</name>
61
+ <t>AI agents now browse the web, run code, and invoke external
62
+ tools. The attack surface they expose is observable: prompt
63
+ injections, tool description poisoning, context window
64
+ exfiltration, credential leakage through agent-controlled HTTP
65
+ traffic, and configuration files that take effect before any
66
+ human trust dialog. Several policy frameworks describe these
67
+ risks, but none of them are directly executable by a scanner. ATR
68
+ fills that gap with a vendor-neutral rule format, a stable
69
+ identifier scheme, and a conformance test suite that lets
70
+ independent implementations agree on whether a given input
71
+ matches a given rule.</t>
72
+
73
+ <t>ATR rules are YAML documents. Each rule has a globally unique
74
+ identifier of the form ATR-YYYY-NNNNN assigned by the project's
75
+ Numbering Authority. A conforming engine loads the rule corpus
76
+ and emits Match outputs for inputs that satisfy the rule's
77
+ detection condition. The Specification is intentionally narrow:
78
+ it defines wire format, identifiers, evaluation semantics, match
79
+ output, and three conformance levels. Higher-level governance
80
+ (rule contribution, deprecation, trademark policy) lives in
81
+ companion documents in the project repository.</t>
82
+
83
+ <section anchor="relationship"><name>Relationship to Existing Standards</name>
84
+ <t>ATR is the executable detection layer for AI agent threats.
85
+ It cites adjacent standards rather than replacing them:</t>
86
+ <ul>
87
+ <li><xref target="NIST-AI-RMF"/> and
88
+ <xref target="NIST-GAI-PROFILE"/> define risk management
89
+ functions (Govern, Map, Measure, Manage). ATR provides
90
+ detection rules that populate the Measure function at scan
91
+ time, with a crosswalk in <xref target="cross-walk"/>.</li>
92
+ <li><xref target="OWASP-AGENTIC"/> and
93
+ <xref target="MITRE-ATLAS"/> categorize adversarial
94
+ behaviors. ATR rule metadata maps each rule to specific
95
+ categories and techniques in these frameworks. The format
96
+ itself is inspired by <xref target="SIGMA"/>.</li>
97
+ <li><xref target="STIX21"/> provides a CTI interchange
98
+ envelope. ATR Match output can be emitted in STIX 2.1 via
99
+ the x-atr-rule extension defined in the project
100
+ repository.</li>
101
+ </ul>
102
+ </section>
103
+ </section>
104
+
105
+ <section anchor="conventions"><name>Conventions and Terminology</name>
106
+ <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
107
+ "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
108
+ NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
109
+ "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
110
+ "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this
111
+ document are to be interpreted as described in BCP 14
112
+ <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
113
+ when, they appear in all capitals, as shown here.</t>
114
+
115
+ <table>
116
+ <thead>
117
+ <tr><th>Term</th><th>Definition</th></tr>
118
+ </thead>
119
+ <tbody>
120
+ <tr><td>Rule</td><td>A YAML document conforming to <xref target="rule-document-structure"/> that describes one detection pattern.</td></tr>
121
+ <tr><td>Rule ID</td><td>A globally unique identifier in the form ATR-YYYY-NNNNN, see <xref target="rule-identifier"/>.</td></tr>
122
+ <tr><td>Engine</td><td>Software that loads Rules and evaluates Inputs against them.</td></tr>
123
+ <tr><td>Input</td><td>A structured artifact or AgentEvent submitted for evaluation.</td></tr>
124
+ <tr><td>Match</td><td>An Engine's output indicating that a Rule's detection condition evaluated to true for a given Input.</td></tr>
125
+ <tr><td>Numbering Authority</td><td>The body authorized to assign permanent Rule IDs (see project Governance document).</td></tr>
126
+ <tr><td>Conformance Level</td><td>One of L1, L2, L3, see <xref target="conformance-levels"/>.</td></tr>
127
+ <tr><td>Corpus</td><td>The set of Rules officially published under a given ATR version.</td></tr>
128
+ </tbody>
129
+ </table>
130
+ </section>
131
+
132
+ <section anchor="rule-identifier"><name>Rule Identifier</name>
133
+ <section anchor="rule-id-format"><name>Format</name>
134
+ <t>A Rule ID conforms to the following ABNF
135
+ <xref target="RFC5234"/>:</t>
136
+ <sourcecode type="abnf"><![CDATA[
137
+ rule-id = "ATR" "-" year "-" sequence
138
+ year = 4DIGIT
139
+ sequence = 5DIGIT
140
+ DIGIT = %x30-39
141
+ ]]></sourcecode>
142
+ </section>
143
+
144
+ <section anchor="rule-id-assignment"><name>Assignment Rules</name>
145
+ <ol>
146
+ <li>Rule IDs <bcp14>MUST</bcp14> be assigned by the Numbering
147
+ Authority and <bcp14>MUST NOT</bcp14> be self-assigned by
148
+ contributors.</li>
149
+ <li>Once assigned, a Rule ID <bcp14>MUST</bcp14> be considered
150
+ permanent and <bcp14>MUST NOT</bcp14> be reassigned, even if
151
+ the originally-assigned Rule is deprecated.</li>
152
+ <li>A Rule ID <bcp14>MUST NOT</bcp14> encode classification
153
+ information (category, severity, scan target). Classification
154
+ is carried in metadata fields per
155
+ <xref target="rule-document-structure"/>.</li>
156
+ <li>A Rule ID <bcp14>MUST</bcp14> be globally unique within
157
+ the official Corpus.</li>
158
+ <li>Contributors <bcp14>SHOULD</bcp14> use a placeholder
159
+ identifier of the form ATR-YYYY-DRAFT-&lt;hex&gt; in pull
160
+ requests prior to merge.</li>
161
+ </ol>
162
+ </section>
163
+ </section>
164
+
165
+ <section anchor="rule-document-structure"><name>Rule Document Structure</name>
166
+ <t>A conforming Rule is a UTF-8 encoded <xref target="YAML12"/>
167
+ document whose top-level value is a mapping containing at minimum
168
+ the fields defined in this section. Engines <bcp14>MUST</bcp14>
169
+ preserve unknown top-level fields when round-tripping Rules but
170
+ <bcp14>MUST NOT</bcp14> allow such fields to alter evaluation
171
+ outcomes.</t>
172
+
173
+ <t>The full field schema, including required and optional fields
174
+ with type constraints, is given in the project's
175
+ spec/atr-schema.yaml and tracked in this document by reference.
176
+ Required top-level keys are: id, title, status, description,
177
+ author, date, severity, tags, agent_source, detection, response,
178
+ test_cases.</t>
179
+ </section>
180
+
181
+ <section anchor="detection-semantics"><name>Detection Semantics</name>
182
+ <section anchor="match-definition"><name>Match Definition</name>
183
+ <t>Given a Rule R and an Input I, an Engine <bcp14>MUST</bcp14>
184
+ emit a Match if, and only if, all conditions in
185
+ R.detection.condition evaluate to true against I per the
186
+ combinator semantics in <xref target="condition-combinators"/>.</t>
187
+ </section>
188
+
189
+ <section anchor="condition-combinators"><name>Condition Combinators</name>
190
+ <t>R.detection.condition is a logical expression over named
191
+ selectors declared in R.detection.selectors. Engines
192
+ <bcp14>MUST</bcp14> implement:</t>
193
+ <table>
194
+ <thead><tr><th>Combinator</th><th>Semantics</th></tr></thead>
195
+ <tbody>
196
+ <tr><td>S</td><td>true iff selector S matches</td></tr>
197
+ <tr><td>S1 and S2</td><td>true iff both S1 and S2 match</td></tr>
198
+ <tr><td>S1 or S2</td><td>true iff S1 or S2 matches</td></tr>
199
+ <tr><td>not S</td><td>true iff S does not match</td></tr>
200
+ <tr><td>all of S*</td><td>true iff every selector matched by the wildcard matches</td></tr>
201
+ <tr><td>1 of S*</td><td>true iff at least one selector matched by the wildcard matches</td></tr>
202
+ </tbody>
203
+ </table>
204
+ </section>
205
+
206
+ <section anchor="selector-operators"><name>Selector Operators</name>
207
+ <t>Engines <bcp14>MUST</bcp14> implement the operators below
208
+ with the given semantics: contains, contains_i, regex
209
+ (ECMAScript-compatible), equals, startswith, endswith,
210
+ length_gt, length_lt, in.</t>
211
+ <t>Engines <bcp14>MUST</bcp14> reject Rules that use operators
212
+ outside this list, with a clear error message. Engines
213
+ <bcp14>MAY</bcp14> support additional operators as extensions
214
+ but <bcp14>MUST</bcp14> treat Rules using such extensions as
215
+ non-portable.</t>
216
+ </section>
217
+
218
+ <section anchor="determinism"><name>Determinism</name>
219
+ <t>For a given Engine version, a given Rule, and a given Input,
220
+ the Match outcome <bcp14>MUST</bcp14> be deterministic. Engines
221
+ <bcp14>MUST NOT</bcp14> introduce non-determinism (e.g.,
222
+ sampling, time-of-day branching) into Rule evaluation.</t>
223
+ </section>
224
+ </section>
225
+
226
+ <section anchor="match-output"><name>Match Output</name>
227
+ <t>An Engine <bcp14>MUST</bcp14> emit Match output that includes,
228
+ at minimum, a rule_id, the corpus_version it was loaded from, a
229
+ stable input_identifier, the matched_at timestamp (ISO 8601), the
230
+ rule severity, the rule category, and the list of
231
+ matched_selectors. Engines <bcp14>MAY</bcp14> emit additional
232
+ fields and <bcp14>MAY</bcp14> use JSON, SARIF, STIX 2.1, or other
233
+ serializations.</t>
234
+ </section>
235
+
236
+ <section anchor="canonical-categories"><name>Canonical Categories</name>
237
+ <t>The following ten categories are normative for the current
238
+ Specification. New categories are introduced only by
239
+ Specification amendment.</t>
240
+ <ol>
241
+ <li>prompt-injection</li>
242
+ <li>agent-manipulation</li>
243
+ <li>skill-compromise</li>
244
+ <li>context-exfiltration</li>
245
+ <li>tool-poisoning</li>
246
+ <li>privilege-escalation</li>
247
+ <li>model-abuse</li>
248
+ <li>excessive-autonomy</li>
249
+ <li>model-security</li>
250
+ <li>data-poisoning</li>
251
+ </ol>
252
+ </section>
253
+
254
+ <section anchor="cross-walk"><name>Crosswalks</name>
255
+ <t>A Rule <bcp14>MAY</bcp14> include a compliance object mapping
256
+ its detection to external frameworks. Identifiers
257
+ <bcp14>MUST</bcp14> come from the authoritative source for each
258
+ framework. Where ambiguity exists, Rule authors
259
+ <bcp14>SHOULD</bcp14> include a references entry pointing to the
260
+ source document. Crosswalks defined for the current Specification
261
+ include <xref target="OWASP-AGENTIC"/>, OWASP LLM Top 10,
262
+ <xref target="MITRE-ATLAS"/>, <xref target="NIST-AI-RMF"/>,
263
+ ISO/IEC 42001, EU AI Act, and <xref target="SAFE-MCP"/>.</t>
264
+ </section>
265
+
266
+ <section anchor="conformance-levels"><name>Conformance Levels</name>
267
+ <table>
268
+ <thead><tr><th>Level</th><th>Requirement</th></tr></thead>
269
+ <tbody>
270
+ <tr><td>L1</td><td>Engine loads the published Corpus without parse errors and emits Match output for at least one Rule.</td></tr>
271
+ <tr><td>L2</td><td>Engine passes 100 percent of the Conformance Test Suite for the declared Spec version.</td></tr>
272
+ <tr><td>L3</td><td>Engine passes L2, emits Match output in at least two interchange formats (JSON plus one of SARIF, STIX 2.1, MISP, OpenCTI), and publishes its results against the public benign Corpus with documented false-positive rate.</td></tr>
273
+ </tbody>
274
+ </table>
275
+ <t>An implementation <bcp14>MAY</bcp14> claim "ATR-Compatible"
276
+ only with a declared Conformance Level and a reproducible test
277
+ report.</t>
278
+ </section>
279
+
280
+ <section anchor="security-considerations"><name>Security Considerations</name>
281
+ <t>Rules are content that an Engine evaluates against potentially
282
+ untrusted Inputs. An Engine <bcp14>MUST NOT</bcp14> permit a
283
+ Rule's free-form metadata fields (description, references) to
284
+ alter evaluation behavior. Only fields listed in
285
+ <xref target="rule-document-structure"/>,
286
+ <xref target="detection-semantics"/>, and the match-output
287
+ section affect evaluation.</t>
288
+
289
+ <t>A malformed regex selector may cause catastrophic backtracking.
290
+ Engines <bcp14>MUST</bcp14> apply a per-rule execution timeout
291
+ (<bcp14>RECOMMENDED</bcp14>: 100 ms per Input per Rule) and
292
+ <bcp14>MUST</bcp14> report a timeout as a non-match rather than
293
+ an error.</t>
294
+
295
+ <t>If a Rule's matched substring contains PII or sensitive
296
+ credentials, Engines <bcp14>SHOULD</bcp14> provide a redaction
297
+ option that hashes or truncates the matched substring before
298
+ emitting Match output.</t>
299
+ </section>
300
+
301
+ <section anchor="iana-considerations"><name>IANA Considerations</name>
302
+ <t>This document requests registration of the following media
303
+ types:</t>
304
+ <ul>
305
+ <li>application/vnd.atr.rule+yaml — a single ATR Rule</li>
306
+ <li>application/vnd.atr.corpus+yaml — a corpus manifest listing multiple Rules</li>
307
+ <li>application/vnd.atr.match+json — Match output</li>
308
+ </ul>
309
+ <t>Registration templates are provided in Appendix B of the
310
+ project's SPEC.md and will be filed with IANA on advancement of
311
+ this document.</t>
312
+ </section>
313
+
314
+ </middle>
315
+
316
+ <back>
317
+ <references>
318
+ <name>Normative References</name>
319
+ <reference anchor="RFC2119">
320
+ <front>
321
+ <title>Key words for use in RFCs to Indicate Requirement Levels</title>
322
+ <author initials="S." surname="Bradner" fullname="S. Bradner"/>
323
+ <date year="1997" month="March"/>
324
+ </front>
325
+ <seriesInfo name="BCP" value="14"/>
326
+ <seriesInfo name="RFC" value="2119"/>
327
+ </reference>
328
+
329
+ <reference anchor="RFC8174">
330
+ <front>
331
+ <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
332
+ <author initials="B." surname="Leiba" fullname="B. Leiba"/>
333
+ <date year="2017" month="May"/>
334
+ </front>
335
+ <seriesInfo name="BCP" value="14"/>
336
+ <seriesInfo name="RFC" value="8174"/>
337
+ </reference>
338
+
339
+ <reference anchor="RFC5234">
340
+ <front>
341
+ <title>Augmented BNF for Syntax Specifications: ABNF</title>
342
+ <author initials="D." surname="Crocker" fullname="D. Crocker" role="editor"/>
343
+ <author initials="P." surname="Overell" fullname="P. Overell"/>
344
+ <date year="2008" month="January"/>
345
+ </front>
346
+ <seriesInfo name="STD" value="68"/>
347
+ <seriesInfo name="RFC" value="5234"/>
348
+ </reference>
349
+
350
+ <reference anchor="YAML12" target="https://yaml.org/spec/1.2.2/">
351
+ <front>
352
+ <title>YAML Ain't Markup Language (YAML) Version 1.2 (3rd Edition)</title>
353
+ <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki"/>
354
+ <author initials="C." surname="Evans" fullname="Clark Evans"/>
355
+ <author initials="I." surname="dot Net" fullname="Ingy dot Net"/>
356
+ <date year="2021" month="October"/>
357
+ </front>
358
+ </reference>
359
+
360
+ </references>
361
+
362
+ <references>
363
+ <name>Informative References</name>
364
+ <reference anchor="SIGMA" target="https://github.com/SigmaHQ/sigma-specification">
365
+ <front>
366
+ <title>Sigma Rule Specification</title>
367
+ <author><organization>SigmaHQ</organization></author>
368
+ <date year="2024"/>
369
+ </front>
370
+ </reference>
371
+ <reference anchor="STIX21" target="https://docs.oasis-open.org/cti/stix/v2.1/stix-v2.1.html">
372
+ <front>
373
+ <title>STIX Version 2.1 OASIS Standard</title>
374
+ <author><organization>OASIS</organization></author>
375
+ <date year="2021"/>
376
+ </front>
377
+ </reference>
378
+ <reference anchor="NIST-AI-RMF" target="https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.100-1.pdf">
379
+ <front>
380
+ <title>Artificial Intelligence Risk Management Framework (AI 100-1)</title>
381
+ <author><organization>NIST</organization></author>
382
+ <date year="2023"/>
383
+ </front>
384
+ </reference>
385
+ <reference anchor="NIST-GAI-PROFILE" target="https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf">
386
+ <front>
387
+ <title>NIST AI 600-1 Generative AI Profile</title>
388
+ <author><organization>NIST</organization></author>
389
+ <date year="2024"/>
390
+ </front>
391
+ </reference>
392
+ <reference anchor="OWASP-AGENTIC" target="https://genai.owasp.org/llm-top-10/agentic-top-10/">
393
+ <front>
394
+ <title>OWASP Agentic Security Initiative Top 10 (2026)</title>
395
+ <author><organization>OWASP Gen AI Security Project</organization></author>
396
+ <date year="2026"/>
397
+ </front>
398
+ </reference>
399
+ <reference anchor="MITRE-ATLAS" target="https://atlas.mitre.org/">
400
+ <front>
401
+ <title>Adversarial Threat Landscape for AI Systems</title>
402
+ <author><organization>MITRE Corporation</organization></author>
403
+ <date year="2024"/>
404
+ </front>
405
+ </reference>
406
+
407
+ <reference anchor="SAFE-MCP" target="https://github.com/safe-agentic-framework/safe-mcp">
408
+ <front>
409
+ <title>Secure AI Framework for Enterprise — Model Context Protocol</title>
410
+ <author><organization>safe-agentic-framework</organization></author>
411
+ <date year="2026"/>
412
+ </front>
413
+ </reference>
414
+ </references>
415
+
416
+ <section anchor="acknowledgments"><name>Acknowledgments</name>
417
+ <t>The author acknowledges contributions from external maintainers
418
+ at Cisco AI Defense, MISP / CIRCL, Microsoft Agent Governance
419
+ Toolkit, Gen Digital Sage, and the OWASP Gen AI Security Project,
420
+ as well as researchers at NVIDIA garak and the HackAPrompt 2023
421
+ competition whose attack payloads seeded the rule corpus.</t>
422
+ </section>
423
+ </back>
424
+ </rfc>
@@ -0,0 +1,43 @@
1
+ # ATR Crosswalk Mappings
2
+
3
+ Detailed mappings from the ATR rule corpus to external standards bodies'
4
+ control catalogs. Each file enumerates which ATR rules (or rule categories)
5
+ supply evidence for which control subcategory.
6
+
7
+ These are **Informative Reference** documents — they describe how an
8
+ ATR-conformant engine's match output can be cited as runtime evidence
9
+ within an external assessment framework. They are not normative for ATR
10
+ itself; the normative crosswalk fields live on individual Rules under
11
+ `references.<framework>` (atr-method-v1.1.md §9.3).
12
+
13
+ ## Index
14
+
15
+ | File | External framework | Status | Purpose |
16
+ |------|--------------------|--------|---------|
17
+ | [atr-to-nist-csf-2.0.md](./atr-to-nist-csf-2.0.md) | NIST CSF 2.0 (CSWP 29, Feb 2024) | Draft v1.0.0 | NIST IR 8596 Cyber AI Profile Informative Reference submission |
18
+
19
+ Planned (not yet drafted):
20
+
21
+ | File | External framework |
22
+ |------|--------------------|
23
+ | atr-to-etsi-ts-104223.md | ETSI TS 104 223 (UK NCSC AI Cyber Code of Practice upstream) |
24
+ | atr-to-eu-ai-act.md | EU AI Act Articles 10 + 14 + 15 |
25
+ | atr-to-iso-42001.md | ISO/IEC 42001 (AI Management System) |
26
+ | atr-to-oscal-aram.md | NIST OSCAL Assessment Layer (assessment-plan / assessment-results) |
27
+
28
+ ## Convention
29
+
30
+ Each mapping file MUST:
31
+
32
+ 1. State the source ATR version (`Mapped corpus`) and target framework version.
33
+ 2. Map at the most granular level the target framework supports (CSF
34
+ subcategory, ETSI sub-principle, EU AI Act article, etc).
35
+ 3. Cite at least one example ATR Rule ID per external control where Rules
36
+ exist for that control.
37
+ 4. Be self-contained — readable by a reviewer who is not an ATR expert.
38
+ 5. Carry an explicit "Open Items" section listing known gaps.
39
+
40
+ Updates to this index require a PR. New mapping files SHOULD be paired
41
+ with corresponding `references.<framework>` field additions in the
42
+ schema (`spec/atr-schema.yaml`) so individual Rules can declare their
43
+ contribution.