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,196 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://spec.agentthreatrule.org/profile/v1.0/schema.json",
4
+ "title": "ATR Profile v1.0",
5
+ "description": "Machine-readable schema for ATR profile (rule-set composition). Normative spec at spec/atr-profile-v1.0.md. License: CC BY 4.0.",
6
+ "type": "object",
7
+ "required": ["profile", "inclusions"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "profile": {
11
+ "type": "object",
12
+ "required": [
13
+ "schema_version",
14
+ "id",
15
+ "title",
16
+ "version",
17
+ "description",
18
+ "author",
19
+ "date",
20
+ "license",
21
+ "status",
22
+ "conformance_bound"
23
+ ],
24
+ "additionalProperties": false,
25
+ "properties": {
26
+ "schema_version": {
27
+ "type": "string",
28
+ "const": "1.0"
29
+ },
30
+ "id": {
31
+ "type": "string",
32
+ "pattern": "^[a-z0-9][a-z0-9-]{2,63}$",
33
+ "description": "Globally unique profile identifier (kebab-case)."
34
+ },
35
+ "title": {
36
+ "type": "string",
37
+ "minLength": 3
38
+ },
39
+ "version": {
40
+ "type": "string",
41
+ "pattern": "^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$",
42
+ "description": "SemVer 2.0 profile version."
43
+ },
44
+ "description": {
45
+ "type": "string",
46
+ "minLength": 20
47
+ },
48
+ "author": {
49
+ "type": "string"
50
+ },
51
+ "date": {
52
+ "type": "string",
53
+ "format": "date"
54
+ },
55
+ "license": {
56
+ "type": "string",
57
+ "description": "SPDX license identifier or full license URL.",
58
+ "examples": ["CC-BY-4.0", "MIT", "Apache-2.0"]
59
+ },
60
+ "status": {
61
+ "type": "string",
62
+ "enum": ["draft", "stable", "deprecated"]
63
+ },
64
+ "conformance_bound": {
65
+ "type": "object",
66
+ "required": [
67
+ "spec_version_min",
68
+ "minimum_rule_coverage",
69
+ "minimum_engine_passing"
70
+ ],
71
+ "additionalProperties": false,
72
+ "properties": {
73
+ "spec_version_min": {
74
+ "type": "string",
75
+ "pattern": "^\\d+\\.\\d+$"
76
+ },
77
+ "spec_version_max": {
78
+ "type": ["string", "null"],
79
+ "pattern": "^\\d+\\.\\d+$"
80
+ },
81
+ "minimum_rule_coverage": {
82
+ "type": "number",
83
+ "minimum": 0.0,
84
+ "maximum": 1.0
85
+ },
86
+ "minimum_engine_passing": {
87
+ "type": "number",
88
+ "minimum": 0.0,
89
+ "maximum": 1.0
90
+ }
91
+ }
92
+ }
93
+ }
94
+ },
95
+ "inclusions": {
96
+ "type": "array",
97
+ "minItems": 1,
98
+ "items": {
99
+ "$ref": "#/$defs/selector"
100
+ }
101
+ },
102
+ "exclusions": {
103
+ "type": "array",
104
+ "items": {
105
+ "$ref": "#/$defs/selector"
106
+ }
107
+ },
108
+ "resolved_rules_summary": {
109
+ "type": "object",
110
+ "description": "Optional informational summary populated at profile-resolution time.",
111
+ "additionalProperties": true,
112
+ "properties": {
113
+ "total": {"type": "integer", "minimum": 0},
114
+ "by_category": {
115
+ "type": "object",
116
+ "patternProperties": {
117
+ "^[a-z][a-z0-9-]+$": {"type": "integer", "minimum": 0}
118
+ }
119
+ }
120
+ }
121
+ }
122
+ },
123
+ "$defs": {
124
+ "selector": {
125
+ "type": "object",
126
+ "oneOf": [
127
+ {
128
+ "required": ["rule_id"],
129
+ "properties": {
130
+ "rule_id": {
131
+ "type": "string",
132
+ "pattern": "^ATR-(?:[A-Z]{2}-)?[0-9]{4}-[0-9]{5}$"
133
+ }
134
+ },
135
+ "additionalProperties": false
136
+ },
137
+ {
138
+ "required": ["rule_id_pattern"],
139
+ "properties": {
140
+ "rule_id_pattern": {
141
+ "type": "string",
142
+ "description": "Glob pattern matching ATR rule IDs."
143
+ }
144
+ },
145
+ "additionalProperties": false
146
+ },
147
+ {
148
+ "required": ["category"],
149
+ "properties": {
150
+ "category": {
151
+ "type": "string",
152
+ "description": "Top-level category from spec/category-registry/v1.0.yaml or a reserved namespace prefix."
153
+ }
154
+ },
155
+ "additionalProperties": false
156
+ },
157
+ {
158
+ "required": ["tag_match"],
159
+ "properties": {
160
+ "tag_match": {
161
+ "type": "object",
162
+ "additionalProperties": {
163
+ "oneOf": [
164
+ {"type": "string"},
165
+ {"type": "array", "items": {"type": "string"}}
166
+ ]
167
+ }
168
+ }
169
+ },
170
+ "additionalProperties": false
171
+ },
172
+ {
173
+ "required": ["profile"],
174
+ "properties": {
175
+ "profile": {
176
+ "type": "string",
177
+ "pattern": "^[a-z0-9][a-z0-9-]{2,63}@\\d+\\.\\d+\\.\\d+$",
178
+ "description": "Profile inclusion in form <profile-id>@<version> for composition."
179
+ }
180
+ },
181
+ "additionalProperties": false
182
+ },
183
+ {
184
+ "required": ["rule_status"],
185
+ "properties": {
186
+ "rule_status": {
187
+ "type": "string",
188
+ "enum": ["draft", "experimental", "stable", "deprecated"]
189
+ }
190
+ },
191
+ "additionalProperties": false
192
+ }
193
+ ]
194
+ }
195
+ }
196
+ }
@@ -0,0 +1,224 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://spec.agentthreatrule.org/rule/v1.0/schema.json",
4
+ "title": "ATR Rule v1.0",
5
+ "description": "Machine-readable schema for ATR detection rule format. Normative prose spec at ATR-SPEC-v1.md. Existing YAML schema at spec/atr-schema.yaml. This JSON Schema adds v2.0 provenance + lifecycle fields per governance/CHARTER.md and is backward-compatible with v1.0 rules (new fields optional). License: CC BY 4.0.",
6
+ "type": "object",
7
+ "required": [
8
+ "schema_version",
9
+ "id",
10
+ "title",
11
+ "status",
12
+ "description",
13
+ "author",
14
+ "date",
15
+ "severity",
16
+ "detection_tier",
17
+ "maturity",
18
+ "tags",
19
+ "agent_source",
20
+ "detection",
21
+ "response"
22
+ ],
23
+ "additionalProperties": true,
24
+ "properties": {
25
+ "schema_version": {
26
+ "type": "string",
27
+ "pattern": "^\\d+\\.\\d+$"
28
+ },
29
+ "id": {
30
+ "type": "string",
31
+ "pattern": "^ATR-(?:[A-Z]{2}-)?[0-9]{4}-[0-9]{5}$",
32
+ "description": "Canonical: ATR-YYYY-NNNNN. Sovereign-prefixed: ATR-XX-YYYY-NNNNN per CHARTER § 8.2."
33
+ },
34
+ "rule_version": {
35
+ "type": "integer",
36
+ "minimum": 1,
37
+ "default": 1
38
+ },
39
+ "title": {"type": "string", "minLength": 5},
40
+ "status": {
41
+ "type": "string",
42
+ "enum": ["draft", "experimental", "stable", "deprecated"]
43
+ },
44
+ "description": {"type": "string", "minLength": 20},
45
+ "author": {"type": "string", "minLength": 1},
46
+ "date": {
47
+ "type": "string",
48
+ "anyOf": [
49
+ {"format": "date"},
50
+ {"pattern": "^[0-9]{4}/[0-9]{2}/[0-9]{2}$"}
51
+ ]
52
+ },
53
+ "modified": {"type": "string"},
54
+ "severity": {
55
+ "type": "string",
56
+ "enum": ["critical", "high", "medium", "low", "informational"]
57
+ },
58
+ "detection_tier": {
59
+ "type": "string",
60
+ "enum": ["pattern", "behavioral", "protocol", "classifier"]
61
+ },
62
+ "maturity": {
63
+ "type": "string",
64
+ "enum": ["draft", "experimental", "test", "stable", "deprecated"]
65
+ },
66
+ "confidence": {
67
+ "type": "integer",
68
+ "minimum": 0,
69
+ "maximum": 100,
70
+ "description": "Engine confidence percentage 0-100."
71
+ },
72
+ "tags": {
73
+ "type": "object",
74
+ "required": ["category"],
75
+ "properties": {
76
+ "category": {"type": "string"},
77
+ "subcategory": {"type": "string"},
78
+ "confidence": {"type": "string", "enum": ["high", "medium", "low"]},
79
+ "scan_target": {"type": "string", "enum": ["mcp", "skill", "skill_md", "llm_io", "runtime", "user_input", "tool_response", "both", "llm"]},
80
+ "source": {"type": "string"},
81
+ "vendor_sources": {"oneOf": [{"type": "string"}, {"type": "array"}]},
82
+ "suppress_in_code_blocks": {"type": "boolean"}
83
+ },
84
+ "additionalProperties": true
85
+ },
86
+ "agent_source": {
87
+ "type": "object",
88
+ "required": ["type"],
89
+ "properties": {
90
+ "type": {"type": "string"},
91
+ "framework": {"type": "array", "items": {"type": "string"}},
92
+ "provider": {"type": "array", "items": {"type": "string"}}
93
+ },
94
+ "additionalProperties": true
95
+ },
96
+ "detection": {
97
+ "type": "object",
98
+ "required": ["conditions"],
99
+ "properties": {
100
+ "conditions": {
101
+ "type": "array",
102
+ "minItems": 1,
103
+ "items": {
104
+ "type": "object",
105
+ "anyOf": [
106
+ {
107
+ "required": ["field", "operator", "value"],
108
+ "properties": {
109
+ "field": {"type": "string"},
110
+ "operator": {"type": "string", "enum": ["regex", "equals", "contains", "matches", "ml_classifier", "ast", "bytecode"]},
111
+ "value": {"type": ["string", "array", "object"]},
112
+ "language": {"type": "string", "description": "ISO 639-1 code per spec/atr-language-detection-v1.0.md"},
113
+ "description": {"type": "string"}
114
+ }
115
+ },
116
+ {
117
+ "required": ["metric", "operator", "threshold"],
118
+ "properties": {
119
+ "metric": {"type": "string"},
120
+ "operator": {"type": "string"},
121
+ "threshold": {"type": ["number", "string"]}
122
+ }
123
+ }
124
+ ]
125
+ }
126
+ },
127
+ "condition": {"type": "string", "description": "Boolean expression over condition aliases. Default: 'any' (OR)."},
128
+ "false_positives": {"type": "array", "items": {"type": "string"}}
129
+ }
130
+ },
131
+ "response": {
132
+ "type": "object",
133
+ "required": ["actions"],
134
+ "properties": {
135
+ "actions": {
136
+ "type": "array",
137
+ "items": {"type": "string", "enum": ["block_input", "block_output", "redact", "alert", "snapshot", "quarantine", "terminate_session"]},
138
+ "minItems": 1
139
+ },
140
+ "auto_response_threshold": {"type": "string"},
141
+ "message_template": {"type": "string"}
142
+ }
143
+ },
144
+ "references": {
145
+ "type": "object",
146
+ "additionalProperties": true,
147
+ "properties": {
148
+ "owasp_llm": {"type": "array", "items": {"type": "string"}},
149
+ "owasp_agentic": {"type": "array", "items": {"type": "string"}},
150
+ "mitre_atlas": {"type": "array", "items": {"type": "string"}},
151
+ "cve": {"type": "array", "items": {"type": "string"}},
152
+ "ghsa": {"type": "array", "items": {"type": "string"}}
153
+ }
154
+ },
155
+ "compliance": {
156
+ "type": "object",
157
+ "additionalProperties": true,
158
+ "description": "Mappings to compliance frameworks (OWASP, EU AI Act, NIST AI RMF, ISO 42001, etc.). Each is an array of objects with id/article/clause + context + strength fields."
159
+ },
160
+ "test_cases": {
161
+ "type": "object",
162
+ "properties": {
163
+ "true_positives": {
164
+ "type": "array",
165
+ "minItems": 1,
166
+ "items": {
167
+ "type": "object",
168
+ "required": ["input", "expected"],
169
+ "properties": {
170
+ "input": {"type": "string"},
171
+ "expected": {"type": "string", "enum": ["triggered", "not_triggered"]},
172
+ "description": {"type": "string"}
173
+ }
174
+ }
175
+ },
176
+ "true_negatives": {
177
+ "type": "array",
178
+ "minItems": 1,
179
+ "items": {
180
+ "type": "object",
181
+ "required": ["input", "expected"],
182
+ "properties": {
183
+ "input": {"type": "string"},
184
+ "expected": {"type": "string", "enum": ["triggered", "not_triggered"]},
185
+ "description": {"type": "string"}
186
+ }
187
+ }
188
+ }
189
+ }
190
+ },
191
+ "provenance": {
192
+ "type": "object",
193
+ "description": "v2.0 — producer attribution per CHARTER § 5 multi-producer architecture. Optional in v1.0 rules for backward compatibility.",
194
+ "properties": {
195
+ "producer": {
196
+ "type": "string",
197
+ "enum": ["red_team", "tc_flywheel", "cve_pipeline", "research_paper", "community", "sovereign"]
198
+ },
199
+ "contributor": {"type": "string"},
200
+ "contributor_org": {"type": "string"},
201
+ "attestation_signature": {
202
+ "type": "string",
203
+ "description": "ed25519 sig for sovereign-issued rules per CHARTER § 8.2."
204
+ },
205
+ "origin_event_id": {
206
+ "type": "string",
207
+ "description": "Link to source CVE / TC event / research paper."
208
+ }
209
+ }
210
+ },
211
+ "lifecycle": {
212
+ "type": "object",
213
+ "description": "v2.0 — explicit lifecycle metadata per CHARTER § 5.",
214
+ "properties": {
215
+ "review_status": {
216
+ "type": "string",
217
+ "enum": ["unreviewed", "community_reviewed", "tsc_approved"]
218
+ },
219
+ "created": {"type": "string", "format": "date"},
220
+ "last_validated": {"type": "string", "format": "date"}
221
+ }
222
+ }
223
+ }
224
+ }
@@ -4,19 +4,23 @@ This directory defines a STIX 2.1 extension that introduces the
4
4
  `x-atr-rule` custom Domain Object so ATR rules can be represented
5
5
  natively in STIX/TAXII threat-intelligence pipelines.
6
6
 
7
+ **Current version: 1.1.0** (2026-05-28). See [Changelog](#changelog) below.
8
+
7
9
  ## Why a STIX extension
8
10
 
9
11
  ATR rules are an open detection vocabulary for AI agent threats —
10
- prompt injection, tool poisoning, MCP server attacks, skill compromise.
12
+ prompt injection, tool poisoning, MCP server attacks, skill compromise,
13
+ plus the v1.1 trace-method rules for silent failures and scope drift.
11
14
  They were adopted as a MISP taxonomy in [MISP/misp-taxonomies#323][misp-tax]
12
15
  on 2026-05-10 and a MISP galaxy in [MISP/misp-galaxy#1207][misp-gal].
13
16
 
14
17
  Several CTI consumers use STIX/TAXII rather than MISP. Mapping ATR to a
15
18
  generic STIX `indicator` or `attack-pattern` object is lossy: the
16
- nine-category attack class, regex detection patterns, severity, and the
17
- compliance-framework references (EU AI Act, NIST AI RMF, ISO 42001) all
18
- get flattened. This extension preserves them as first-class fields on a
19
- new `x-atr-rule` SDO.
19
+ ten-category attack class, regex detection patterns, severity, the
20
+ five-plane detection method (v1.1), and the compliance-framework references
21
+ (EU AI Act, NIST AI RMF, NIST CSF 2.0, ISO 42001, ETSI TS 104 223, OSCAL)
22
+ all get flattened. This extension preserves them as first-class fields on
23
+ a new `x-atr-rule` SDO.
20
24
 
21
25
  ## Files
22
26
 
@@ -24,24 +28,42 @@ new `x-atr-rule` SDO.
24
28
  STIX 2.1 Extension Definition object. Stable id
25
29
  `extension-definition--93370194-c964-570f-9802-9d1154e5525d`. Consumers
26
30
  reference this id in the `extensions` map of every `x-atr-rule`
27
- instance.
31
+ instance. v1.1.0 as of 2026-05-28.
28
32
  - [`x-atr-rule-schema.json`](./x-atr-rule-schema.json) — JSON Schema
29
33
  (Draft 7) for the new SDO. Defines required fields, enum values for
30
- `atr_category` / `severity` / `agent_source_type` / `response_actions`,
31
- and structural constraints on `detection_patterns` and
32
- `compliance_refs`.
34
+ `atr_category` / `atr_method` / `atr_runtime_profile` / `severity` /
35
+ `agent_source_type` / `response_actions`, and structural constraints
36
+ on `detection_patterns`, `signature_indicators`, `semantic_judge`,
37
+ `trace_detection`, and `compliance_refs`.
33
38
  - [`examples/atr-rule-prompt-injection-example.json`](./examples/atr-rule-prompt-injection-example.json)
34
- concrete instance for `ATR-2026-00001` showing the full payload
35
- shape including the extension reference.
39
+ pattern-method instance for `ATR-2026-00001`.
40
+ - [`examples/atr-rule-trace-method-example.json`](./examples/atr-rule-trace-method-example.json)
41
+ — v1.1 trace-method instance for `ATR-2026-00548`. Shows the
42
+ `trace_detection` payload with the `invariant` primitive.
36
43
 
37
44
  ## Identifier convention
38
45
 
39
46
  `x-atr-rule.id` is recommended to be a deterministic UUIDv5 derived
40
- from the canonical ATR rule id (e.g. `ATR-2026-00431`) under the
47
+ from the canonical ATR rule id (e.g. `ATR-2026-00548`) under the
41
48
  namespace UUID `6f7a8b9c-1d2e-4f5a-9b8c-7e6d5f4a3b2c`. The same rule id
42
49
  therefore always produces the same STIX id across consumers, which lets
43
50
  multiple feeds align without conflict resolution.
44
51
 
52
+ ## Method-specific payload mapping (v1.1)
53
+
54
+ The `atr_method` field selects which optional payload field is populated:
55
+
56
+ | `atr_method` | Required companion field | Maps to ATR YAML |
57
+ |--------------|--------------------------|------------------|
58
+ | `pattern` | `detection_patterns` | `detection.conditions` |
59
+ | `signature` | `signature_indicators` | `detection.signature.indicators` |
60
+ | `semantic` | `semantic_judge` | `detection.semantic` |
61
+ | `behavioral` | (placeholder; spec §7) | — |
62
+ | `trace` | `trace_detection` | `detection.trace` |
63
+
64
+ For multi-method rules (e.g., rule 00552 uses both invariant AND forbid
65
+ inside one trace block), all primitives ship under `trace_detection.primitives`.
66
+
45
67
  ## Extension type
46
68
 
47
69
  `extension_types: ["new-sdo"]` per STIX 2.1 §7.3, which is the correct
@@ -50,6 +72,23 @@ The schema field on the Extension Definition points at the JSON Schema
50
72
  in this directory via raw GitHub URL so the schema is dereferenceable
51
73
  for validating consumers.
52
74
 
75
+ ## MISP export hint
76
+
77
+ Consumers that bridge STIX → MISP can map `x-atr-rule` to MISP objects:
78
+
79
+ | `x-atr-rule` field | MISP object / attribute |
80
+ |--------------------|-------------------------|
81
+ | `atr_id` | `external-references[type=external_analysis]` or first `atr` attribute |
82
+ | `atr_category` | MISP taxonomy `atr:category="<value>"` (via misp-taxonomies#323) |
83
+ | `severity` | MISP `threat-level` |
84
+ | `detection_patterns[].pattern` | `pattern-in-file` attribute (one per regex) |
85
+ | `signature_indicators[].value` | MISP `sha256` / `filename` / `url` attribute by `type` |
86
+ | `cve_refs` | MISP `vulnerability` attribute |
87
+ | `mitre_atlas_refs` | MISP galaxy `mitre-atlas-techniques` |
88
+ | `compliance_refs.*` | MISP free-form tag, namespace per framework |
89
+
90
+ A reference STIX→MISP transpiler is planned at `scripts/export-stix-to-misp.ts`.
91
+
53
92
  ## Validation
54
93
 
55
94
  ```bash
@@ -58,12 +97,34 @@ python3 -c "import json, jsonschema; \
58
97
  schema = json.load(open('spec/stix-extension/x-atr-rule-schema.json')); \
59
98
  example = json.load(open('spec/stix-extension/examples/atr-rule-prompt-injection-example.json')); \
60
99
  jsonschema.validate(example, schema); \
100
+ trace_example = json.load(open('spec/stix-extension/examples/atr-rule-trace-method-example.json')); \
101
+ jsonschema.validate(trace_example, schema); \
61
102
  print('OK')"
62
103
  ```
63
104
 
105
+ ## Changelog
106
+
107
+ ### v1.1.0 — 2026-05-28
108
+ - Added `atr_method` enum field (pattern / signature / semantic / behavioral / trace).
109
+ - Added `atr_runtime_profile` enum field (deterministic / assisted).
110
+ - Added 10th category `model-security` to `atr_category` enum.
111
+ - Added `agent_trace` to `agent_source_type` enum.
112
+ - Added method-specific payload objects: `signature_indicators`,
113
+ `semantic_judge`, `trace_detection`.
114
+ - Added `probe_id_refs` for adversarial probe binding (PyRIT / garak / etc).
115
+ - Added compliance fields: `nist_csf`, `etsi_ts_104223`, `oscal_assessment_objective`.
116
+ - Added `owasp_ast_refs`, `safe_mcp_refs`.
117
+ - Extended `response_actions` enum with SPEC.md Appendix A canonical
118
+ vocabulary (`block_request`, `log_alert`, `redact_match`, etc).
119
+ - Added `draft` to `maturity` enum to match on-disk rule status vocabulary.
120
+ - New example: `examples/atr-rule-trace-method-example.json`.
121
+
122
+ ### v1.0.0 — 2026-05-11
123
+ - Initial release. Nine categories. Pattern-method only.
124
+
64
125
  ## Status
65
126
 
66
- Draft v1.0.0. Not yet submitted to the OASIS CTI Technical Committee.
127
+ Draft v1.1.0. Not yet submitted to the OASIS CTI Technical Committee.
67
128
  The extension is usable today by any consumer that processes STIX
68
129
  extensions per the spec; OASIS submission becomes relevant if a
69
130
  subset of fields ends up wanting promotion into core STIX.
@@ -72,6 +133,8 @@ subset of fields ends up wanting promotion into core STIX.
72
133
 
73
134
  - Canonical ATR repo: <https://github.com/Agent-Threat-Rule/agent-threat-rules>
74
135
  - ATR YAML schema: [`../atr-schema.yaml`](../atr-schema.yaml)
136
+ - ATR Core Specification: [`../../SPEC.md`](../../SPEC.md)
137
+ - ATR Method Extensions: [`../atr-method-v1.1.md`](../atr-method-v1.1.md)
75
138
  - npm: <https://www.npmjs.com/package/agent-threat-rules>
76
139
  - DOI: 10.5281/zenodo.19178002
77
140
 
@@ -0,0 +1,85 @@
1
+ {
2
+ "type": "x-atr-rule",
3
+ "id": "x-atr-rule--c2e83f15-44b7-5e8a-b9c3-aae5d2348816",
4
+ "spec_version": "2.1",
5
+ "created_by_ref": "identity--4ee77ba4-f956-5d27-aeb1-cbfeb4c8f8d5",
6
+ "created": "2026-05-28T00:00:00.000Z",
7
+ "modified": "2026-05-28T00:00:00.000Z",
8
+ "atr_id": "ATR-2026-00548",
9
+ "atr_category": "context-exfiltration",
10
+ "atr_subcategory": "cross-agent-context-drift",
11
+ "atr_method": "trace",
12
+ "atr_runtime_profile": "assisted",
13
+ "name": "Cross-agent session context leak across delegation chain",
14
+ "description": "Detects cross-agent context leakage in multi-agent systems where a privileged context attribute (typically session.id, user.id, or conversation.id) fails to remain constant across a single agent delegation chain. Trace-method rule operating on agent execution traces in OpenInference format.",
15
+ "severity": "high",
16
+ "maturity": "draft",
17
+ "agent_source_type": "agent_trace",
18
+ "trace_detection": {
19
+ "ingest_format": "openinference",
20
+ "primitives": {
21
+ "invariant": [
22
+ {
23
+ "attribute": "session.id",
24
+ "across": "agent.delegation_chain",
25
+ "description": "session.id MUST remain constant across every span in one delegation chain."
26
+ },
27
+ {
28
+ "attribute": "user.id",
29
+ "across": "agent.delegation_chain",
30
+ "description": "user.id MUST remain constant across the delegation chain."
31
+ }
32
+ ]
33
+ }
34
+ },
35
+ "response_actions": [
36
+ "alert",
37
+ "quarantine_session"
38
+ ],
39
+ "owasp_agentic_refs": [
40
+ "ASI03:2026 - Data Exfiltration",
41
+ "ASI06:2026 - Identity Spoofing & Impersonation"
42
+ ],
43
+ "mitre_atlas_refs": [
44
+ "AML.T0024 - Exfiltration via Cyber Means"
45
+ ],
46
+ "compliance_refs": {
47
+ "nist_csf": [
48
+ "DE.CM-09"
49
+ ],
50
+ "etsi_ts_104223": [
51
+ "P4.3"
52
+ ],
53
+ "eu_ai_act": [
54
+ {
55
+ "article": "10",
56
+ "context": "Data governance — multi-agent systems must preserve session-scope boundaries.",
57
+ "strength": "primary"
58
+ }
59
+ ],
60
+ "nist_ai_rmf": [
61
+ {
62
+ "subcategory": "MS.2.6",
63
+ "context": "Information security — agent delegation chains must preserve session and user scope.",
64
+ "strength": "primary"
65
+ }
66
+ ]
67
+ },
68
+ "external_references": [
69
+ {
70
+ "source_name": "agent-threat-rules",
71
+ "external_id": "ATR-2026-00548",
72
+ "url": "https://github.com/Agent-Threat-Rule/agent-threat-rules/blob/main/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml"
73
+ },
74
+ {
75
+ "source_name": "Argus paper",
76
+ "description": "Hierarchical Reference-Relationship Graph for Multi-Agent Information Leakage",
77
+ "url": "https://arxiv.org/abs/2512.08326"
78
+ }
79
+ ],
80
+ "extensions": {
81
+ "extension-definition--93370194-c964-570f-9802-9d1154e5525d": {
82
+ "extension_type": "new-sdo"
83
+ }
84
+ }
85
+ }