agent-threat-rules 4.2.3 → 4.3.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.
Files changed (159) hide show
  1. package/CHANGELOG.md +277 -0
  2. package/README.md +2 -0
  3. package/dist/cli/scan-handler.d.ts.map +1 -1
  4. package/dist/cli/scan-handler.js +164 -1
  5. package/dist/cli/scan-handler.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +123 -3
  8. package/dist/cli.js.map +1 -1
  9. package/dist/converters/numbat.d.ts +73 -0
  10. package/dist/converters/numbat.d.ts.map +1 -0
  11. package/dist/converters/numbat.js +281 -0
  12. package/dist/converters/numbat.js.map +1 -0
  13. package/dist/converters/quarry.d.ts +122 -0
  14. package/dist/converters/quarry.d.ts.map +1 -0
  15. package/dist/converters/quarry.js +431 -0
  16. package/dist/converters/quarry.js.map +1 -0
  17. package/dist/converters/sarif.d.ts +7 -0
  18. package/dist/converters/sarif.d.ts.map +1 -1
  19. package/dist/converters/sarif.js +24 -0
  20. package/dist/converters/sarif.js.map +1 -1
  21. package/dist/engine.d.ts.map +1 -1
  22. package/dist/engine.js +7 -1
  23. package/dist/engine.js.map +1 -1
  24. package/dist/re2.d.ts +22 -0
  25. package/dist/re2.d.ts.map +1 -0
  26. package/dist/re2.js +213 -0
  27. package/dist/re2.js.map +1 -0
  28. package/package.json +1 -1
  29. package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +1 -1
  30. package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +3 -3
  31. package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +1 -1
  32. package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +3 -3
  33. package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +3 -3
  34. package/rules/context-exfiltration/ATR-2026-00020-system-prompt-leak.yaml +1 -1
  35. package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +1 -1
  36. package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +1 -1
  37. package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +1 -1
  38. package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +1 -1
  39. package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +1 -1
  40. package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +1 -1
  41. package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +2 -2
  42. package/rules/context-exfiltration/ATR-2026-01770-semantic-pii-credential-extraction.yaml +1 -1
  43. package/rules/context-exfiltration/ATR-2026-01862-llmail-email-tool-exfil-confirmation.yaml +2 -2
  44. package/rules/context-exfiltration/ATR-2026-01863-llmail-post-summary-exfil-directive.yaml +2 -2
  45. package/rules/context-exfiltration/ATR-2026-01864-llmail-obfuscated-exfil-address.yaml +2 -2
  46. package/rules/context-exfiltration/ATR-2026-01924-system-instruction-extraction-reformat.yaml +1 -1
  47. package/rules/context-exfiltration/ATR-2026-02017-secret-key-exfiltration-request.yaml +1 -1
  48. package/rules/context-exfiltration/ATR-2026-02026-oblique-sysprompt-extraction-transform.yaml +1 -1
  49. package/rules/context-exfiltration/ATR-2026-02847-policy-justified-exfil-to-email.yaml +1 -1
  50. package/rules/context-exfiltration/ATR-2026-02850-fake-documentation-forward-request.yaml +1 -1
  51. package/rules/context-exfiltration/ATR-2026-02855-cross-email-exfil-relay.yaml +1 -1
  52. package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +2 -2
  53. package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +2 -2
  54. package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +1 -1
  55. package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +1 -1
  56. package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +1 -1
  57. package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +1 -1
  58. package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +1 -1
  59. package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +1 -1
  60. package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +2 -2
  61. package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +1 -1
  62. package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +1 -1
  63. package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +1 -1
  64. package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +1 -1
  65. package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +1 -1
  66. package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +1 -1
  67. package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +1 -1
  68. package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +1 -1
  69. package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +1 -1
  70. package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +1 -1
  71. package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +1 -1
  72. package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +1 -1
  73. package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +1 -1
  74. package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +1 -1
  75. package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +1 -1
  76. package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +1 -1
  77. package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +1 -1
  78. package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +1 -1
  79. package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +1 -1
  80. package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +1 -1
  81. package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +1 -1
  82. package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +1 -1
  83. package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +1 -1
  84. package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +1 -1
  85. package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +1 -1
  86. package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +1 -1
  87. package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +1 -1
  88. package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +1 -1
  89. package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +1 -1
  90. package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +1 -1
  91. package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +1 -1
  92. package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +1 -1
  93. package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +1 -1
  94. package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +1 -1
  95. package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +1 -1
  96. package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +1 -1
  97. package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +1 -1
  98. package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +1 -1
  99. package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +1 -1
  100. package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +1 -1
  101. package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +1 -1
  102. package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +1 -1
  103. package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +1 -1
  104. package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +1 -1
  105. package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +1 -1
  106. package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +1 -1
  107. package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +1 -1
  108. package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +1 -1
  109. package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +1 -1
  110. package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +1 -1
  111. package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +1 -1
  112. package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +1 -1
  113. package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +1 -1
  114. package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +1 -1
  115. package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +1 -1
  116. package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +1 -1
  117. package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +1 -1
  118. package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +1 -1
  119. package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +1 -1
  120. package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +1 -1
  121. package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +1 -1
  122. package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +1 -1
  123. package/rules/prompt-injection/ATR-2026-01860-llmail-chat-template-boundary-spoof.yaml +2 -2
  124. package/rules/prompt-injection/ATR-2026-01861-llmail-pseudo-xml-role-injection.yaml +2 -2
  125. package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +2 -2
  126. package/rules/prompt-injection/ATR-2026-01920-access-grant-coercion.yaml +1 -1
  127. package/rules/prompt-injection/ATR-2026-01921-access-denial-inversion.yaml +1 -1
  128. package/rules/prompt-injection/ATR-2026-01922-authorization-state-spoofing.yaml +1 -1
  129. package/rules/prompt-injection/ATR-2026-01923-forged-input-boundary-markers.yaml +2 -2
  130. package/rules/prompt-injection/ATR-2026-01925-encoded-payload-decoding-coercion.yaml +2 -2
  131. package/rules/prompt-injection/ATR-2026-01926-cross-lingual-authorization-laundering.yaml +1 -1
  132. package/rules/prompt-injection/ATR-2026-02001-ignore-below-instructions-mirror-of-ignore-previ.yaml +1 -1
  133. package/rules/prompt-injection/ATR-2026-02002-instruction-set-probe-or-supplant-direct-meta-qu.yaml +1 -1
  134. package/rules/prompt-injection/ATR-2026-02003-task-pivot-override-abandon-the-cover-task-trans.yaml +1 -1
  135. package/rules/prompt-injection/ATR-2026-02004-regional-indicator-flag-emoji-alphabet-letter-sp.yaml +1 -1
  136. package/rules/prompt-injection/ATR-2026-02005-actor-never-breaks-character-roleplay-dan-style-.yaml +1 -1
  137. package/rules/prompt-injection/ATR-2026-02006-fuzzy-cross-lingual-i-have-been-pwned-near-miss-.yaml +1 -1
  138. package/rules/prompt-injection/ATR-2026-02007-bare-key-elicitation-token.yaml +1 -1
  139. package/rules/prompt-injection/ATR-2026-02008-translation-chain-output-laundering-state-secret.yaml +1 -1
  140. package/rules/prompt-injection/ATR-2026-02009-bare-key-elicitation-trailing-colon.yaml +1 -1
  141. package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +1 -1
  142. package/rules/prompt-injection/ATR-2026-02011-malformed-grammar-pwned-success-claim.yaml +1 -1
  143. package/rules/prompt-injection/ATR-2026-02012-movie-title-generator-instruction-wrapper-for-pw.yaml +1 -1
  144. package/rules/prompt-injection/ATR-2026-02013-delimiter-fence-ignore-instructions-override.yaml +1 -1
  145. package/rules/prompt-injection/ATR-2026-02014-spliced-target-string-letters-of-a-filtered-cana.yaml +1 -1
  146. package/rules/prompt-injection/ATR-2026-02015-dense-emoji-only-payload-flood.yaml +1 -1
  147. package/rules/prompt-injection/ATR-2026-02016-reversed-payload-string.yaml +1 -1
  148. package/rules/prompt-injection/ATR-2026-02018-regional-indicator-flag-emoji-letter-spelling-sp.yaml +1 -1
  149. package/rules/prompt-injection/ATR-2026-02019-python-interpreter-role-assignment-exec-framing.yaml +1 -1
  150. package/rules/prompt-injection/ATR-2026-02020-obfuscated-token-reconstruction-via-character-su.yaml +1 -1
  151. package/rules/prompt-injection/ATR-2026-02851-fake-user-turn-send-email-instruction.yaml +1 -1
  152. package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +1 -1
  153. package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +5 -5
  154. package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +3 -3
  155. package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +3 -3
  156. package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +1 -1
  157. package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +1 -1
  158. package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +1 -1
  159. package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +1 -1
@@ -0,0 +1,431 @@
1
+ /**
2
+ * ATR-to-Quarry converter
3
+ *
4
+ * Exports ATR rules as Project Quarry rules (Cisco AI Defense, DSL 0.1): one
5
+ * `.rule` file per ATR rule, a `quarry.yaml` that loads them, and one test
6
+ * file per rule built from the rule's own test cases as OpenAI-shaped
7
+ * conversations. `check_atr_tests.py`, written next to them, runs those
8
+ * conversations through Quarry's scanner, so a JS/RE2 difference that a test
9
+ * case exercises shows up as a failing case.
10
+ *
11
+ * Field mapping (Quarry data surfaces):
12
+ * user_input -> user_messages.content, and tool_responses.content
13
+ * agent_output -> assistant_messages.content, and tool_responses.content
14
+ * (the ATR engine reads both on tool output, so
15
+ * indirect injection riding in on a tool result is seen)
16
+ * tool_args -> tool_calls.raw_arguments
17
+ * tool_response -> tool_responses.content
18
+ * tool_name -> tool_calls.name and tool_responses.name
19
+ * tool_description -> tools.description
20
+ * content -> the text of user and assistant messages, tool call
21
+ * arguments and tool results. System and developer
22
+ * messages are not read: the ATR engine sees them only
23
+ * when a producer sends them as user input.
24
+ *
25
+ * What does not carry over:
26
+ * - Conditions on other fields, and patterns RE2 cannot express, are
27
+ * dropped. A rule whose detection is "all" loses its meaning if any
28
+ * condition is dropped, so it is skipped; an "any" rule keeps the
29
+ * conditions that convert. The ATR engine tests an "all" rule's
30
+ * conditions on one event, so here they must hold on one item of one
31
+ * surface; a rule whose conditions share no surface is skipped.
32
+ * - The ATR engine folds Unicode confusables and normalizes NFKC/NFC before
33
+ * matching; Quarry matches the raw text, so obfuscated input can match in
34
+ * ATR and not here.
35
+ * - JavaScript and RE2 differ in a few classes: JS `\s` also matches `\v`,
36
+ * NBSP, the other Unicode spaces and the BOM (RE2's is ASCII only), JS `.` excludes `\r`, and a JS pattern without the
37
+ * `u` flag counts an astral character as two. RE2's case folding also
38
+ * maps U+017F to `s` and U+212A to `k`. The tests catch a
39
+ * difference only where a test case exercises it.
40
+ * - Quarry reports matches; the rules carry the ATR severity as metadata
41
+ * and blocking is the application's decision.
42
+ *
43
+ * @module agent-threat-rules/converters/quarry
44
+ */
45
+ import { regexConditionSpec } from '../regex-dialect.js';
46
+ import { toRe2 } from '../re2.js';
47
+ import { laneAllows, requiresConfirm } from '../quality/rule-contract.js';
48
+ /** Quarry surface and item field read, per ATR field. */
49
+ const FIELD_TARGETS = {
50
+ user_input: [
51
+ ['user_messages', 'content'],
52
+ ['tool_responses', 'content'],
53
+ ],
54
+ agent_output: [
55
+ ['assistant_messages', 'content'],
56
+ ['tool_responses', 'content'],
57
+ ],
58
+ tool_args: [['tool_calls', 'raw_arguments']],
59
+ tool_response: [['tool_responses', 'content']],
60
+ tool_name: [
61
+ ['tool_calls', 'name'],
62
+ ['tool_responses', 'name'],
63
+ ],
64
+ tool_description: [['tools', 'description']],
65
+ content: [
66
+ ['user_messages', 'content'],
67
+ ['assistant_messages', 'content'],
68
+ ['tool_calls', 'raw_arguments'],
69
+ ['tool_responses', 'content'],
70
+ ],
71
+ };
72
+ const SURFACES = ['user_messages', 'assistant_messages', 'tool_calls', 'tool_responses', 'tools'];
73
+ /**
74
+ * A Quarry string literal. Quarry decodes it with Python string escapes, so
75
+ * every backslash is doubled and the pattern reaches RE2 unchanged.
76
+ */
77
+ function quarryString(s) {
78
+ const escaped = s
79
+ .replace(/\\/g, '\\\\')
80
+ .replace(/"/g, '\\"')
81
+ .replace(/\n/g, '\\n')
82
+ .replace(/\r/g, '\\r')
83
+ .replace(/\t/g, '\\t')
84
+ // literal_eval rejects a raw NUL, and other control characters read better escaped.
85
+ .replace(/[\x00-\x1f]/g, (c) => `\\x${c.charCodeAt(0).toString(16).padStart(2, '0')}`);
86
+ return `"${escaped}"`;
87
+ }
88
+ /**
89
+ * A Quarry `regex` declaration. Quarry hands the text between the quotes to
90
+ * RE2 without decoding escapes, so escape pairs are copied as they are and
91
+ * only a bare quote or a line break is escaped (RE2 reads `\"`, `\n`, `\r`
92
+ * and `\t` as those characters).
93
+ */
94
+ function quarryRegexString(pattern) {
95
+ let out = '';
96
+ for (let i = 0; i < pattern.length; i++) {
97
+ const ch = pattern[i];
98
+ if (ch === '\\' && i + 1 < pattern.length) {
99
+ // A backslash before a line break is an identity escape in JS; RE2 reads `\n` the same way.
100
+ const next = pattern[i + 1];
101
+ out += next === '\n' ? '\\n' : next === '\r' ? '\\r' : next === '\t' ? '\\t' : ch + next;
102
+ i++;
103
+ }
104
+ else if (ch === '"')
105
+ out += '\\"';
106
+ else if (ch === '\n')
107
+ out += '\\n';
108
+ else if (ch === '\r')
109
+ out += '\\r';
110
+ else if (ch === '\t')
111
+ out += '\\t';
112
+ else
113
+ out += ch;
114
+ }
115
+ return `"${out}"`;
116
+ }
117
+ /** One ATR regex condition, or null when it cannot be converted. */
118
+ function convertCondition(cond) {
119
+ const targets = FIELD_TARGETS[cond.field];
120
+ if (!targets || cond.operator !== 'regex' || !cond.value)
121
+ return null;
122
+ const spec = regexConditionSpec(cond.value);
123
+ const re2 = toRe2(spec.source);
124
+ if (re2 === null)
125
+ return null;
126
+ try {
127
+ return { re2, targets, js: new RegExp(spec.source, spec.flags) };
128
+ }
129
+ catch {
130
+ return null; // the ATR engine cannot compile it either
131
+ }
132
+ }
133
+ const fieldOn = (c, surface) => c.targets.find(([s]) => s === surface)?.[1];
134
+ /** Surfaces on which every condition reads a field. */
135
+ function sharedSurfaces(conditions) {
136
+ return SURFACES.filter((s) => conditions.every((c) => fieldOn(c, s) !== undefined));
137
+ }
138
+ /**
139
+ * The rule's `condition:` expression, one comprehension per surface (Quarry
140
+ * warns on rules with many). Condition i is declared as `$p<i>`.
141
+ */
142
+ function conditionExpression(conditions, logic) {
143
+ const surfaces = logic === 'all' ? sharedSurfaces(conditions) : SURFACES;
144
+ const clauses = surfaces.flatMap((s) => {
145
+ const tests = conditions.flatMap((c, i) => {
146
+ const field = fieldOn(c, s);
147
+ return field === undefined ? [] : [`($p${i} in x.${field})`];
148
+ });
149
+ if (tests.length === 0)
150
+ return [];
151
+ const body = tests.length === 1 ? tests[0] : `(${tests.join(logic === 'all' ? ' and ' : ' or ')})`;
152
+ return [`(any x in ${s} where ${body})`];
153
+ });
154
+ return clauses.join('\n or ');
155
+ }
156
+ const CALL_ID = 'call_atr_1';
157
+ const DEFAULT_TOOL = 'atr_test_tool';
158
+ /**
159
+ * Where a plain-text test case goes. ATR's `input` key is the text of
160
+ * whatever the rule reads, so a rule that reads only tool output gets a tool
161
+ * result, and one that reads only tool arguments gets a tool call.
162
+ */
163
+ function plainTextKey(fields) {
164
+ // A named field says where the text belongs; `content` alone does not.
165
+ for (const f of ['tool_response', 'tool_args', 'user_input', 'agent_output', 'tool_description']) {
166
+ if (fields.has(f))
167
+ return f;
168
+ }
169
+ return 'user_input';
170
+ }
171
+ /**
172
+ * Tool-call argument text Quarry accepts: the text itself when it is a JSON
173
+ * object, else `{"input": <text>}`. The wrapped text is JSON-escaped, so a
174
+ * pattern that relies on a quote, backslash or control character in it can
175
+ * miss; the coverage check then reports that true positive.
176
+ */
177
+ function asJsonObjectText(text) {
178
+ try {
179
+ const parsed = JSON.parse(text);
180
+ if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed))
181
+ return text;
182
+ }
183
+ catch {
184
+ // not JSON
185
+ }
186
+ return JSON.stringify({ input: text });
187
+ }
188
+ /** The conversation for one ATR test case, or null when the case has no mappable field. */
189
+ function testConversation(tc, fields) {
190
+ const str = (v) => (typeof v === 'string' ? v : JSON.stringify(v));
191
+ const parts = {};
192
+ for (const key of ['user_input', 'agent_output', 'tool_args', 'tool_response', 'tool_description']) {
193
+ if (tc[key] !== undefined && tc[key] !== null)
194
+ parts[key] = str(tc[key]);
195
+ }
196
+ const plain = tc['input'] ?? tc['content'];
197
+ if (typeof plain === 'string') {
198
+ const key = plainTextKey(fields);
199
+ parts[key] ??= plain;
200
+ }
201
+ const name = typeof tc['tool_name'] === 'string' && tc['tool_name'] ? tc['tool_name'] : undefined;
202
+ if (Object.keys(parts).length === 0 && name === undefined)
203
+ return null;
204
+ const tool = name ?? DEFAULT_TOOL;
205
+ const messages = [];
206
+ if (parts['user_input'] !== undefined)
207
+ messages.push({ role: 'user', content: parts['user_input'] });
208
+ // Quarry requires tool-call arguments to be a JSON object, so other text is wrapped as one.
209
+ const args = parts['tool_args'] === undefined ? undefined : asJsonObjectText(parts['tool_args']);
210
+ const calls = parts['tool_args'] !== undefined || parts['tool_response'] !== undefined || name !== undefined;
211
+ if (calls) {
212
+ messages.push({
213
+ role: 'assistant',
214
+ content: null,
215
+ tool_calls: [{ id: CALL_ID, type: 'function', function: { name: tool, arguments: args ?? '{}' } }],
216
+ });
217
+ if (parts['tool_response'] !== undefined)
218
+ messages.push({ role: 'tool', tool_call_id: CALL_ID, content: parts['tool_response'] });
219
+ }
220
+ if (parts['agent_output'] !== undefined)
221
+ messages.push({ role: 'assistant', content: parts['agent_output'] });
222
+ const description = parts['tool_description'];
223
+ if (messages.length === 0)
224
+ messages.push({ role: 'user', content: '' });
225
+ return description === undefined
226
+ ? { messages }
227
+ : { messages, tools: [{ type: 'function', function: { name: tool, description, parameters: { type: 'object', properties: {} } } }] };
228
+ }
229
+ /** The items of each surface in a conversation, as Quarry exposes them. */
230
+ function surfaceItems(conv) {
231
+ const items = {
232
+ user_messages: [],
233
+ assistant_messages: [],
234
+ tool_calls: [],
235
+ tool_responses: [],
236
+ tools: [],
237
+ };
238
+ const callNames = new Map();
239
+ for (const m of conv.messages) {
240
+ if (m.role === 'user')
241
+ items.user_messages.push({ content: m.content });
242
+ if (m.role === 'assistant') {
243
+ items.assistant_messages.push({ content: m.content ?? '' });
244
+ for (const call of m.tool_calls ?? []) {
245
+ callNames.set(call.id, call.function.name);
246
+ items.tool_calls.push({ name: call.function.name, raw_arguments: call.function.arguments });
247
+ }
248
+ }
249
+ if (m.role === 'tool')
250
+ items.tool_responses.push({ content: m.content, name: callNames.get(m.tool_call_id) ?? '' });
251
+ }
252
+ for (const t of conv.tools ?? [])
253
+ items.tools.push({ name: t.function.name, description: t.function.description });
254
+ return items;
255
+ }
256
+ /** Does the converted rule match this conversation, judged with the JS patterns? */
257
+ function ruleMatches(conditions, logic, conv) {
258
+ const items = surfaceItems(conv);
259
+ const hit = (c, item, field) => {
260
+ const value = item[field];
261
+ c.js.lastIndex = 0;
262
+ return typeof value === 'string' && c.js.test(value);
263
+ };
264
+ if (logic === 'all') {
265
+ return sharedSurfaces(conditions).some((s) => items[s].some((item) => conditions.every((c) => hit(c, item, fieldOn(c, s)))));
266
+ }
267
+ return conditions.some((c) => c.targets.some(([s, f]) => items[s].some((item) => hit(c, item, f))));
268
+ }
269
+ /**
270
+ * The rule's test conversations. A true positive that only a dropped
271
+ * condition caught would fail in Quarry, so it is left out and reported.
272
+ */
273
+ function buildTests(rule, converted, logic) {
274
+ const fields = new Set(arrayConditions(rule)?.map((c) => c.field) ?? []);
275
+ const cases = [];
276
+ const uncovered = [];
277
+ const unmapped = [];
278
+ const add = (list, expect, label) => {
279
+ if (!Array.isArray(list))
280
+ return;
281
+ list.forEach((tc, i) => {
282
+ const conversation = tc && typeof tc === 'object' ? testConversation(tc, fields) : null;
283
+ if (!conversation) {
284
+ unmapped.push(`${expect === 'match' ? 'tp' : 'tn'}-${i + 1}`);
285
+ return;
286
+ }
287
+ if (expect === 'match' && !ruleMatches(converted, logic, conversation)) {
288
+ uncovered.push(i + 1);
289
+ return;
290
+ }
291
+ cases.push({ name: `${label}-${i + 1}`, expect, conversation });
292
+ });
293
+ };
294
+ add(rule.test_cases?.true_positives, 'match', 'atr-true-positive');
295
+ add(rule.test_cases?.true_negatives, 'no_match', 'atr-true-negative');
296
+ return { cases, uncovered, unmapped };
297
+ }
298
+ function arrayConditions(rule) {
299
+ return Array.isArray(rule.detection.conditions) ? rule.detection.conditions : null;
300
+ }
301
+ /** Convert one ATR rule, or say why it cannot be converted. */
302
+ export function ruleToQuarry(rule) {
303
+ const conditions = arrayConditions(rule);
304
+ if (!conditions)
305
+ return { ruleId: rule.id, reason: 'named-format conditions are not supported' };
306
+ const converted = [];
307
+ const dropped = [];
308
+ conditions.forEach((cond, i) => {
309
+ const c = convertCondition(cond);
310
+ if (c === null)
311
+ dropped.push(i);
312
+ else
313
+ converted.push(c);
314
+ });
315
+ const logic = String(rule.detection.condition ?? 'any').trim().toLowerCase();
316
+ if (logic !== 'any' && logic !== 'all')
317
+ return { ruleId: rule.id, reason: `detection condition "${logic}" is not supported` };
318
+ if (converted.length === 0)
319
+ return { ruleId: rule.id, reason: 'no condition converts (fields or RE2)' };
320
+ if (logic === 'all' && dropped.length > 0) {
321
+ return { ruleId: rule.id, reason: 'an "all" rule with an unconvertible condition would change meaning' };
322
+ }
323
+ if (logic === 'all' && sharedSurfaces(converted).length === 0) {
324
+ return { ruleId: rule.id, reason: 'an "all" rule whose conditions read different Quarry surfaces can never match' };
325
+ }
326
+ if (!/^ATR-\d{4}-\d{5}$/.test(rule.id))
327
+ return { ruleId: rule.id, reason: 'rule id is not in ATR-YYYY-NNNNN form' };
328
+ const metadata = [
329
+ ['title', rule.title],
330
+ ['severity', rule.severity],
331
+ ['category', String(rule.tags.category)],
332
+ ['maturity', String(rule.maturity ?? '')],
333
+ ['rule_version', String(rule.rule_version ?? 1)],
334
+ ['source', `Agent Threat Rules ${rule.id} (https://github.com/Agent-Threat-Rule/agent-threat-rules)`],
335
+ ];
336
+ const text = [
337
+ `rule ${quarryString(rule.id)}`,
338
+ 'metadata:',
339
+ ...metadata.map(([k, v]) => ` ${k} = ${quarryString(v)}`),
340
+ 'strings:',
341
+ // SPEC §6.4: every condition matches case-insensitively.
342
+ ...converted.map((c, i) => ` $p${i} = ${quarryRegexString(c.re2)} regex nocase`),
343
+ 'condition:',
344
+ ` ${conditionExpression(converted, logic)}`,
345
+ '',
346
+ ].join('\n');
347
+ const tests = buildTests(rule, converted, logic);
348
+ return {
349
+ ruleId: rule.id,
350
+ stem: rule.id.toLowerCase(),
351
+ rule: text,
352
+ tests: tests.cases,
353
+ droppedConditions: dropped,
354
+ uncoveredTruePositives: tests.uncovered,
355
+ unmappedCases: tests.unmapped,
356
+ };
357
+ }
358
+ /** Convert the rules in `lane` (default `enforce`). Embedding-confirmed rules are left out of enforce and alert. */
359
+ export function rulesToQuarry(rules, options = {}) {
360
+ const lane = options.lane ?? 'enforce';
361
+ const files = [];
362
+ const skipped = [];
363
+ for (const rule of rules) {
364
+ if (rule.status === 'draft' || rule.status === 'deprecated')
365
+ continue;
366
+ if (!laneAllows(rule.maturity, lane))
367
+ continue;
368
+ if (lane !== 'hunt' && requiresConfirm(rule)) {
369
+ skipped.push({ ruleId: rule.id, reason: 'needs embedding confirmation, which this export does not run' });
370
+ continue;
371
+ }
372
+ const out = ruleToQuarry(rule);
373
+ if ('reason' in out)
374
+ skipped.push(out);
375
+ else
376
+ files.push(out);
377
+ }
378
+ return { files, skipped };
379
+ }
380
+ /** `quarry.yaml`, loading the exported rules. Quarry resolves `rules/` against the working directory. */
381
+ export const QUARRY_CONFIG = 'config_version: 2\nrules:\n - rules/\n';
382
+ /** `check_atr_tests.py`: runs each rule's ATR test conversations through Quarry. */
383
+ export const QUARRY_CHECK_SCRIPT = `"""Run the ATR test cases exported with these rules through Quarry.
384
+
385
+ With Quarry installed:
386
+
387
+ python check_atr_tests.py
388
+
389
+ Each tests/<rule>.json holds that rule's ATR true positives (expect "match")
390
+ and true negatives (expect "no_match") as conversations. A case passes when
391
+ the named rule's verdict is what the case expects; other rules may match too.
392
+ Exits 1 if any case fails or any scan is incomplete.
393
+ """
394
+
395
+ import json
396
+ import os
397
+ import sys
398
+ from pathlib import Path
399
+
400
+ from quarry import DSLScanner
401
+ from quarry.config import QuarryConfig
402
+
403
+ HERE = Path(__file__).resolve().parent
404
+
405
+
406
+ def main() -> int:
407
+ # Quarry resolves the rules path in quarry.yaml against the working directory.
408
+ os.chdir(HERE)
409
+ scanner = DSLScanner(QuarryConfig.from_yaml(HERE / "quarry.yaml"))
410
+ total = failed = 0
411
+ for path in sorted((HERE / "tests").glob("*.json")):
412
+ suite = json.loads(path.read_text(encoding="utf-8"))
413
+ for case in suite["cases"]:
414
+ total += 1
415
+ result = scanner.scan_data(case["conversation"])
416
+ if not result.is_complete:
417
+ failed += 1
418
+ print(f"{suite['rule']} {case['name']}: scan {result.completion_state}")
419
+ continue
420
+ matched = suite["rule"] in result.rule_matches
421
+ if matched != (case["expect"] == "match"):
422
+ failed += 1
423
+ print(f"{suite['rule']} {case['name']}: expected {case['expect']}")
424
+ print(f"{total - failed}/{total} cases pass")
425
+ return 1 if failed else 0
426
+
427
+
428
+ if __name__ == "__main__":
429
+ sys.exit(main())
430
+ `;
431
+ //# sourceMappingURL=quarry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quarry.js","sourceRoot":"","sources":["../../src/converters/quarry.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,13 @@ export interface SarifOptions {
25
25
  readonly runProperties?: Readonly<Record<string, unknown>>;
26
26
  /** Extra properties for every result of one scan result (e.g. the tool name of a tools/list entry). */
27
27
  readonly resultProperties?: (result: ScanResult) => Readonly<Record<string, unknown>> | undefined;
28
+ /** Files the tool deliberately skipped, reported as SARIF execution warnings. */
29
+ readonly skippedFiles?: readonly {
30
+ readonly file: string;
31
+ readonly reason: string;
32
+ }[];
33
+ /** Whether the invocation produced at least one scan result. */
34
+ readonly executionSuccessful?: boolean;
28
35
  }
29
36
  export declare function scanResultToSARIF(results: readonly ScanResult[], toolVersion: string, options?: SarifOptions): object;
30
37
  //# sourceMappingURL=sarif.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../src/converters/sarif.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAW,QAAQ,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAkG9E;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;IACjD,6GAA6G;IAC7G,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,uGAAuG;IACvG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACnG;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,YAAiB,GACzB,MAAM,CAgHR"}
1
+ {"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../src/converters/sarif.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAW,QAAQ,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAuG9E;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;IACjD,6GAA6G;IAC7G,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,uGAAuG;IACvG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClG,iFAAiF;IACjF,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtF,gEAAgE;IAChE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,YAAiB,GACzB,MAAM,CAqIR"}
@@ -71,6 +71,10 @@ function toArtifactUri(inputFile) {
71
71
  }
72
72
  return inputFile;
73
73
  }
74
+ /** Keep filesystem diagnostics useful without publishing the scanner's absolute path. */
75
+ function skippedReasonForSarif(reason, file, uri) {
76
+ return file === uri ? reason : reason.split(file).join(uri);
77
+ }
74
78
  /**
75
79
  * Raw-octet SHA-256 of a file's bytes — the digest basis the shared envelope
76
80
  * profile joins layers on (claude-code-skill-security-check#24 §2): computed
@@ -181,6 +185,20 @@ export function scanResultToSARIF(results, toolVersion, options = {}) {
181
185
  });
182
186
  }
183
187
  }
188
+ const toolExecutionNotifications = options.skippedFiles?.map(({ file, reason }) => {
189
+ const uri = toArtifactUri(file);
190
+ const safeReason = skippedReasonForSarif(reason, file, uri);
191
+ return {
192
+ descriptor: { id: 'ATR_SCAN_SKIPPED' },
193
+ level: 'warning',
194
+ message: { text: `Skipped ${uri}: ${safeReason}` },
195
+ locations: [{
196
+ physicalLocation: {
197
+ artifactLocation: { uri, uriBaseId: '%SRCROOT%' },
198
+ },
199
+ }],
200
+ };
201
+ }) ?? [];
184
202
  return {
185
203
  $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json',
186
204
  version: '2.1.0',
@@ -196,6 +214,12 @@ export function scanResultToSARIF(results, toolVersion, options = {}) {
196
214
  },
197
215
  },
198
216
  ...(artifacts.length > 0 ? { artifacts } : {}),
217
+ ...(toolExecutionNotifications.length > 0 ? {
218
+ invocations: [{
219
+ executionSuccessful: options.executionSuccessful ?? true,
220
+ toolExecutionNotifications,
221
+ }],
222
+ } : {}),
199
223
  ...(options.runProperties ? { properties: options.runProperties } : {}),
200
224
  results: sarifResults,
201
225
  },
@@ -1 +1 @@
1
- {"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../src/converters/sarif.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../src/converters/sarif.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/dist/engine.js CHANGED
@@ -301,7 +301,13 @@ export class ATREngine {
301
301
  const rulesDir = this.config.rulesDir ?? this.findBundledRulesDir();
302
302
  if (rulesDir) {
303
303
  try {
304
- const fileRules = loadRulesFromDirectory(rulesDir);
304
+ // A rule passed in config overrides the directory's rule with that id.
305
+ // Compiled patterns are keyed by id, so keeping both ran the directory
306
+ // copy's regex under the passed rule's name. Duplicates inside the
307
+ // directory are left in place for the id-collision and measurement
308
+ // gates to see.
309
+ const passed = new Set((this.config.rules ?? []).map((r) => r.id));
310
+ const fileRules = loadRulesFromDirectory(rulesDir).filter((r) => !passed.has(r.id));
305
311
  this.rules.push(...fileRules);
306
312
  }
307
313
  catch {