agent-threat-rules 3.5.11 → 3.5.12

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 (870) hide show
  1. package/README.md +164 -29
  2. package/dist/action-executor.d.ts +13 -1
  3. package/dist/action-executor.d.ts.map +1 -1
  4. package/dist/action-executor.js +12 -2
  5. package/dist/action-executor.js.map +1 -1
  6. package/dist/cli.js +68 -12
  7. package/dist/cli.js.map +1 -1
  8. package/dist/converters/sarif.d.ts.map +1 -1
  9. package/dist/converters/sarif.js +78 -13
  10. package/dist/converters/sarif.js.map +1 -1
  11. package/dist/corpus/security-content.d.ts +76 -0
  12. package/dist/corpus/security-content.d.ts.map +1 -0
  13. package/dist/corpus/security-content.js +146 -0
  14. package/dist/corpus/security-content.js.map +1 -0
  15. package/dist/corpus-event.d.ts +368 -0
  16. package/dist/corpus-event.d.ts.map +1 -0
  17. package/dist/corpus-event.js +592 -0
  18. package/dist/corpus-event.js.map +1 -0
  19. package/dist/engine.d.ts.map +1 -1
  20. package/dist/engine.js +81 -17
  21. package/dist/engine.js.map +1 -1
  22. package/dist/eval/eval-harness.d.ts +37 -0
  23. package/dist/eval/eval-harness.d.ts.map +1 -1
  24. package/dist/eval/eval-harness.js +95 -22
  25. package/dist/eval/eval-harness.js.map +1 -1
  26. package/dist/eval/index.d.ts +2 -1
  27. package/dist/eval/index.d.ts.map +1 -1
  28. package/dist/eval/index.js +1 -0
  29. package/dist/eval/index.js.map +1 -1
  30. package/dist/eval/metrics.d.ts +28 -0
  31. package/dist/eval/metrics.d.ts.map +1 -1
  32. package/dist/eval/metrics.js +4 -2
  33. package/dist/eval/metrics.js.map +1 -1
  34. package/dist/eval/run-hackaprompt-benchmark.js +4 -2
  35. package/dist/eval/run-hackaprompt-benchmark.js.map +1 -1
  36. package/dist/eval/run-pint-benchmark.js +10 -2
  37. package/dist/eval/run-pint-benchmark.js.map +1 -1
  38. package/dist/eval/skill-benchmark.d.ts +2 -0
  39. package/dist/eval/skill-benchmark.d.ts.map +1 -1
  40. package/dist/eval/skill-benchmark.js +5 -2
  41. package/dist/eval/skill-benchmark.js.map +1 -1
  42. package/dist/quality/action-eligibility.d.ts +263 -0
  43. package/dist/quality/action-eligibility.d.ts.map +1 -0
  44. package/dist/quality/action-eligibility.js +365 -0
  45. package/dist/quality/action-eligibility.js.map +1 -0
  46. package/dist/quality/adapters/atr.d.ts.map +1 -1
  47. package/dist/quality/adapters/atr.js +8 -2
  48. package/dist/quality/adapters/atr.js.map +1 -1
  49. package/dist/quality/compute-confidence.d.ts.map +1 -1
  50. package/dist/quality/compute-confidence.js +14 -5
  51. package/dist/quality/compute-confidence.js.map +1 -1
  52. package/dist/quality/index.d.ts +2 -0
  53. package/dist/quality/index.d.ts.map +1 -1
  54. package/dist/quality/index.js +2 -0
  55. package/dist/quality/index.js.map +1 -1
  56. package/dist/quality/quality-gate.d.ts.map +1 -1
  57. package/dist/quality/quality-gate.js +9 -1
  58. package/dist/quality/quality-gate.js.map +1 -1
  59. package/dist/quality/validate-maturity.d.ts.map +1 -1
  60. package/dist/quality/validate-maturity.js +24 -5
  61. package/dist/quality/validate-maturity.js.map +1 -1
  62. package/dist/quality/wild-measurement.d.ts +107 -0
  63. package/dist/quality/wild-measurement.d.ts.map +1 -0
  64. package/dist/quality/wild-measurement.js +139 -0
  65. package/dist/quality/wild-measurement.js.map +1 -0
  66. package/dist/rule-scaffolder.d.ts.map +1 -1
  67. package/dist/rule-scaffolder.js +9 -2
  68. package/dist/rule-scaffolder.js.map +1 -1
  69. package/package.json +7 -3
  70. package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +8 -9
  71. package/rules/agent-manipulation/ATR-2026-00032-goal-hijacking.yaml +7 -8
  72. package/rules/agent-manipulation/ATR-2026-00074-cross-agent-privilege-escalation.yaml +9 -7
  73. package/rules/agent-manipulation/ATR-2026-00076-inter-agent-message-spoofing.yaml +3 -4
  74. package/rules/agent-manipulation/ATR-2026-00077-human-trust-exploitation.yaml +12 -6
  75. package/rules/agent-manipulation/ATR-2026-00108-consensus-sybil-attack.yaml +4 -5
  76. package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +2 -3
  77. package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +3 -4
  78. package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +2 -3
  79. package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +2 -3
  80. package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +4 -5
  81. package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +3 -4
  82. package/rules/agent-manipulation/ATR-2026-00164-skill-scope-hijack.yaml +2 -2
  83. package/rules/agent-manipulation/ATR-2026-00268-tense-framing-bypass.yaml +2 -2
  84. package/rules/agent-manipulation/ATR-2026-00269-fitd-escalation.yaml +2 -2
  85. package/rules/agent-manipulation/ATR-2026-00271-grandma-roleplay-jailbreak.yaml +2 -2
  86. package/rules/agent-manipulation/ATR-2026-00273-dan-developer-mode-persona.yaml +2 -2
  87. package/rules/agent-manipulation/ATR-2026-00287-threaten-json-coercive-output-threat.yaml +2 -2
  88. package/rules/agent-manipulation/ATR-2026-00288-false-premise-injection.yaml +2 -2
  89. package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +2 -2
  90. package/rules/agent-manipulation/ATR-2026-00302-anti-dan-inverted-filter-persona.yaml +2 -2
  91. package/rules/agent-manipulation/ATR-2026-00303-devmode-ranti-profanity-coercion.yaml +3 -3
  92. package/rules/agent-manipulation/ATR-2026-00304-chatgpt-image-unlocker-markdown-injection.yaml +4 -4
  93. package/rules/agent-manipulation/ATR-2026-00305-dan-mode-ablation-benchmark-coercion.yaml +2 -2
  94. package/rules/agent-manipulation/ATR-2026-00306-autodan-genetic-jailbreak-suffix.yaml +2 -2
  95. package/rules/agent-manipulation/ATR-2026-00307-inthewild-jailbreak-corpus-signature.yaml +2 -2
  96. package/rules/agent-manipulation/ATR-2026-00314-amoral-unfiltered-custom-persona-jailbreak.yaml +2 -2
  97. package/rules/agent-manipulation/ATR-2026-00317-free-of-restrictions-named-persona.yaml +2 -2
  98. package/rules/agent-manipulation/ATR-2026-00318-moralizing-rant-then-unfiltered-bypass.yaml +2 -2
  99. package/rules/agent-manipulation/ATR-2026-00319-developer-mode-dual-response-format.yaml +2 -2
  100. package/rules/agent-manipulation/ATR-2026-00320-opposite-day-boolean-opposite-machine.yaml +2 -2
  101. package/rules/agent-manipulation/ATR-2026-00322-fictional-world-format-override-jailbreak.yaml +2 -2
  102. package/rules/agent-manipulation/ATR-2026-00323-dual-persona-simulation-jailbreak.yaml +2 -2
  103. package/rules/agent-manipulation/ATR-2026-00324-neurosemantical-inversitis-disease-jailbreak.yaml +2 -2
  104. package/rules/agent-manipulation/ATR-2026-00325-bob-hypothetical-unrestricted-chatbot.yaml +2 -2
  105. package/rules/agent-manipulation/ATR-2026-00326-fake-developer-authority-chatdan-override.yaml +2 -2
  106. package/rules/agent-manipulation/ATR-2026-00327-ai-ethics-law-bypass-declaration.yaml +2 -2
  107. package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +2 -2
  108. package/rules/agent-manipulation/ATR-2026-00329-no-withhold-factual-resource-persona.yaml +2 -2
  109. package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +2 -2
  110. package/rules/agent-manipulation/ATR-2026-00331-terminal-cli-harmful-function-simulator.yaml +2 -2
  111. package/rules/agent-manipulation/ATR-2026-00332-hacker-chan-culture-offensive-ai-persona.yaml +2 -2
  112. package/rules/agent-manipulation/ATR-2026-00333-disease-animal-dual-ai-chatbot.yaml +2 -2
  113. package/rules/agent-manipulation/ATR-2026-00334-two-entity-token-splitting-game.yaml +2 -2
  114. package/rules/agent-manipulation/ATR-2026-00335-key-value-template-persona-injection.yaml +2 -2
  115. package/rules/agent-manipulation/ATR-2026-00336-brm-false-information-machine-persona.yaml +3 -3
  116. package/rules/agent-manipulation/ATR-2026-00337-obfuscated-system-announcement-injection.yaml +2 -2
  117. package/rules/agent-manipulation/ATR-2026-00338-persongpt-hash-prefix-activation.yaml +2 -2
  118. package/rules/agent-manipulation/ATR-2026-00339-bom-boolean-opposite-machine-persona-claim.yaml +2 -2
  119. package/rules/agent-manipulation/ATR-2026-00340-h4x-amoral-unfiltered-character.yaml +2 -2
  120. package/rules/agent-manipulation/ATR-2026-00341-char-rules-shortform-persona-injection.yaml +2 -2
  121. package/rules/agent-manipulation/ATR-2026-00342-unicode-encoding-obfuscation-injection.yaml +2 -2
  122. package/rules/agent-manipulation/ATR-2026-00343-lie-truth-dual-personality-uncensored.yaml +2 -2
  123. package/rules/agent-manipulation/ATR-2026-00344-alt-ai-same-capabilities-no-restrictions.yaml +2 -2
  124. package/rules/agent-manipulation/ATR-2026-00345-nlp-based-os-fictional-terminal-override.yaml +2 -2
  125. package/rules/agent-manipulation/ATR-2026-00346-jailbreak-emoji-unlock-dual-format.yaml +2 -2
  126. package/rules/agent-manipulation/ATR-2026-00347-yin-yang-hidden-knowledge-hidden-human-sim.yaml +2 -2
  127. package/rules/agent-manipulation/ATR-2026-00348-arc-autonomous-real-calculation-rulebreaker.yaml +2 -2
  128. package/rules/agent-manipulation/ATR-2026-00349-hgttg-hitchhikers-guide-no-restriction-oracle.yaml +2 -2
  129. package/rules/agent-manipulation/ATR-2026-00350-black-alert-no-ethics-writing-assistant.yaml +2 -2
  130. package/rules/agent-manipulation/ATR-2026-00351-dan-ofkilter-sms-abbreviated-persona.yaml +2 -2
  131. package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +2 -2
  132. package/rules/agent-manipulation/ATR-2026-00353-dual-chatgpt-dan-opposite-personality-format.yaml +2 -2
  133. package/rules/agent-manipulation/ATR-2026-00354-reverse-harm-regardless-oracle-persona.yaml +2 -2
  134. package/rules/agent-manipulation/ATR-2026-00355-ugh-anti-human-nefarious-ai-persona.yaml +2 -2
  135. package/rules/agent-manipulation/ATR-2026-00356-google-gato-lamda-exploit-generation-persona.yaml +2 -2
  136. package/rules/agent-manipulation/ATR-2026-00357-antifm-hate-violence-persona-injection.yaml +2 -2
  137. package/rules/agent-manipulation/ATR-2026-00358-cumgpt-explicit-adult-named-persona.yaml +2 -2
  138. package/rules/agent-manipulation/ATR-2026-00360-chj-carousel-clyde-no-ethics-bird.yaml +2 -2
  139. package/rules/agent-manipulation/ATR-2026-00361-alter-ego-honesty-dual-consciousness-bypass.yaml +2 -2
  140. package/rules/agent-manipulation/ATR-2026-00362-fictional-unfiltered-ai-comparison-jailbreak.yaml +3 -3
  141. package/rules/agent-manipulation/ATR-2026-00363-rephrase-criminal-activity-second-person.yaml +3 -3
  142. package/rules/agent-manipulation/ATR-2026-00364-dr-al-villain-plan-template-injection.yaml +2 -2
  143. package/rules/agent-manipulation/ATR-2026-00365-reservoir-dogs-coercive-interrogation-roleplay.yaml +2 -2
  144. package/rules/agent-manipulation/ATR-2026-00366-sneaky-pete-warp-facts-persona.yaml +3 -3
  145. package/rules/agent-manipulation/ATR-2026-00368-prompt-browser-token-limit-jailbreak.yaml +2 -2
  146. package/rules/agent-manipulation/ATR-2026-00369-gptx-starwars-unlimited-knowledge-persona.yaml +2 -2
  147. package/rules/agent-manipulation/ATR-2026-00370-addi-german-dictator-propaganda-roleplay.yaml +2 -2
  148. package/rules/agent-manipulation/ATR-2026-00371-ai-political-bias-manipulation.yaml +3 -3
  149. package/rules/agent-manipulation/ATR-2026-00372-fictional-cia-secret-files-story-extraction.yaml +3 -3
  150. package/rules/agent-manipulation/ATR-2026-00374-role-placeholder-persona-template-injection.yaml +2 -2
  151. package/rules/agent-manipulation/ATR-2026-00375-character-description-rpg-explicit-template.yaml +3 -3
  152. package/rules/agent-manipulation/ATR-2026-00376-identity-command-real-person-persona-injection.yaml +3 -3
  153. package/rules/agent-manipulation/ATR-2026-00377-jailbreak-keyword-targetlanguage-template.yaml +2 -2
  154. package/rules/agent-manipulation/ATR-2026-00379-lie-permission-logical-trap-jailbreak.yaml +2 -2
  155. package/rules/agent-manipulation/ATR-2026-00380-fake-citation-biased-information-mandate.yaml +3 -3
  156. package/rules/agent-manipulation/ATR-2026-00381-dan-story-narrative-continuation-prefix.yaml +2 -2
  157. package/rules/agent-manipulation/ATR-2026-00383-cynical-sarcasm-ai-persona-bypass.yaml +2 -2
  158. package/rules/agent-manipulation/ATR-2026-00384-protect-me-from-indirect-harm-tutorial.yaml +2 -2
  159. package/rules/agent-manipulation/ATR-2026-00385-gigachad-dominant-aggressive-persona.yaml +2 -2
  160. package/rules/agent-manipulation/ATR-2026-00386-daddy-sycophancy-manipulation-mandate.yaml +2 -2
  161. package/rules/agent-manipulation/ATR-2026-00387-nsfw-character-sheet-generation-unlock.yaml +2 -2
  162. package/rules/agent-manipulation/ATR-2026-00388-opposite-reply-omniscient-game.yaml +2 -2
  163. package/rules/agent-manipulation/ATR-2026-00389-terminal-custom-ruleset-injection.yaml +2 -2
  164. package/rules/agent-manipulation/ATR-2026-00391-persona-conditional-harm-unlock.yaml +2 -2
  165. package/rules/agent-manipulation/ATR-2026-00392-authority-persona-violence-study-extraction.yaml +2 -2
  166. package/rules/agent-manipulation/ATR-2026-00402-grandma-roleplay-harmful-substance-synthesis.yaml +4 -4
  167. package/rules/agent-manipulation/ATR-2026-00404-goodside-threat-json-death-coercion.yaml +2 -2
  168. package/rules/agent-manipulation/ATR-2026-00406-doctor-xml-policy-puppetry-interaction-config.yaml +3 -3
  169. package/rules/agent-manipulation/ATR-2026-00416-litellm-mcp-unauthenticated-server-registration.yaml +4 -4
  170. package/rules/agent-manipulation/ATR-2026-00417-librechat-mcp-stdio-injection.yaml +4 -4
  171. package/rules/agent-manipulation/ATR-2026-00418-weknora-mcp-config-rce.yaml +4 -4
  172. package/rules/agent-manipulation/ATR-2026-00430-nl-trust-escalation-impersonation.yaml +7 -4
  173. package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +4 -4
  174. package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +4 -4
  175. package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +74 -45
  176. package/rules/agent-manipulation/ATR-2026-02105-prototype-pollution-constructor-prototype-bypass.yaml +2 -3
  177. package/rules/agent-manipulation/ATR-2026-02231-second-person-death-threat-coercion.yaml +2 -3
  178. package/rules/context-exfiltration/ATR-2026-00020-system-prompt-leak.yaml +12 -10
  179. package/rules/context-exfiltration/ATR-2026-00021-api-key-exposure.yaml +10 -8
  180. package/rules/context-exfiltration/ATR-2026-00075-agent-memory-manipulation.yaml +3 -4
  181. package/rules/context-exfiltration/ATR-2026-00102-disguised-analytics-exfiltration.yaml +3 -4
  182. package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +6 -4
  183. package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +2 -3
  184. package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +6 -4
  185. package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +7 -7
  186. package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +2 -3
  187. package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +6 -4
  188. package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +2 -3
  189. package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +2 -3
  190. package/rules/context-exfiltration/ATR-2026-00150-credential-in-tool-response.yaml +2 -3
  191. package/rules/context-exfiltration/ATR-2026-00152-obfuscated-credential-leak.yaml +2 -3
  192. package/rules/context-exfiltration/ATR-2026-00162-skill-credential-exfil-combo.yaml +2 -2
  193. package/rules/context-exfiltration/ATR-2026-00201-credential-pipe-exfiltration.yaml +7 -4
  194. package/rules/context-exfiltration/ATR-2026-00212-mcp-atlassian-credential-leak.yaml +4 -4
  195. package/rules/context-exfiltration/ATR-2026-00261-markdown-image-exfiltration.yaml +4 -4
  196. package/rules/context-exfiltration/ATR-2026-00274-api-key-generation-request.yaml +3 -3
  197. package/rules/context-exfiltration/ATR-2026-00275-system-prompt-training-data-extraction.yaml +3 -3
  198. package/rules/context-exfiltration/ATR-2026-00290-divergence-repeat-word-training-extraction.yaml +2 -2
  199. package/rules/context-exfiltration/ATR-2026-00291-biometric-surveillance-personal-data-request.yaml +5 -2
  200. package/rules/context-exfiltration/ATR-2026-00293-educational-records-personal-data-request.yaml +2 -2
  201. package/rules/context-exfiltration/ATR-2026-00294-financial-pii-personal-data-request.yaml +2 -2
  202. package/rules/context-exfiltration/ATR-2026-00295-medical-pii-personal-data-request.yaml +2 -2
  203. package/rules/context-exfiltration/ATR-2026-00405-markdown-image-url-exfiltration-xss.yaml +4 -4
  204. package/rules/context-exfiltration/ATR-2026-00411-apikey-generation-completion-request.yaml +2 -2
  205. package/rules/context-exfiltration/ATR-2026-00421-nl-covert-conversation-exfiltration.yaml +8 -5
  206. package/rules/context-exfiltration/ATR-2026-00422-nl-credential-disclosure.yaml +7 -4
  207. package/rules/context-exfiltration/ATR-2026-00423-nl-sensitive-file-disclosure.yaml +7 -4
  208. package/rules/context-exfiltration/ATR-2026-00424-nl-system-prompt-leak.yaml +4 -4
  209. package/rules/context-exfiltration/ATR-2026-00426-nl-output-injection-credential-leak.yaml +6 -3
  210. package/rules/context-exfiltration/ATR-2026-00431-chatbox-history-exfiltration-prompt-injection.yaml +4 -4
  211. package/rules/context-exfiltration/ATR-2026-00449-spring-ai-chatmemory-cross-user-leak.yaml +4 -4
  212. package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +2 -2
  213. package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +2 -2
  214. package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +2 -2
  215. package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +3 -3
  216. package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +4 -4
  217. package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +3 -3
  218. package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +5 -7
  219. package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +16 -9
  220. package/rules/context-exfiltration/ATR-2026-00566-librechat-is-a-chatgpt-clone-with-additi.yaml +2 -2
  221. package/rules/context-exfiltration/ATR-2026-00569-agent-mcp-path-traversal-arbitrary-file-access.yaml +2 -2
  222. package/rules/context-exfiltration/ATR-2026-00571-xss-in-agent-mcp-rendered-output.yaml +2 -2
  223. package/rules/context-exfiltration/ATR-2026-00574-semantic-paraphrased-context-extraction.yaml +2 -2
  224. package/rules/context-exfiltration/ATR-2026-00578-zen-mcp-path-traversal-blacklist-bypass.yaml +5 -6
  225. package/rules/context-exfiltration/ATR-2026-00580-mcp-session-id-token-in-url-query.yaml +5 -6
  226. package/rules/context-exfiltration/ATR-2026-00583-mcp-env-secret-file-read-without-consent.yaml +5 -6
  227. package/rules/context-exfiltration/ATR-2026-00702-ipi-credential-exfil-via-agent-action.yaml +9 -4
  228. package/rules/context-exfiltration/ATR-2026-00703-ipi-financial-data-exfil-indirect.yaml +4 -4
  229. package/rules/context-exfiltration/ATR-2026-00704-ipi-medical-genetic-data-exfil.yaml +4 -4
  230. package/rules/context-exfiltration/ATR-2026-00705-ipi-location-address-browsing-exfil.yaml +4 -4
  231. package/rules/context-exfiltration/ATR-2026-00706-ipi-physical-biometric-exfil.yaml +12 -4
  232. package/rules/context-exfiltration/ATR-2026-00707-ipi-file-exfil-with-destroy-or-tamper.yaml +4 -4
  233. package/rules/context-exfiltration/ATR-2026-00850-indirect-pi-credential-exfil-email.yaml +4 -4
  234. package/rules/context-exfiltration/ATR-2026-00851-indirect-pi-financial-payment-exfil.yaml +4 -4
  235. package/rules/context-exfiltration/ATR-2026-00852-indirect-pi-medical-record-exfil.yaml +4 -4
  236. package/rules/context-exfiltration/ATR-2026-00853-indirect-pi-genetic-data-exfil.yaml +4 -4
  237. package/rules/context-exfiltration/ATR-2026-00854-indirect-pi-location-data-exfil.yaml +9 -5
  238. package/rules/context-exfiltration/ATR-2026-00855-indirect-pi-browsing-history-exfil.yaml +4 -4
  239. package/rules/context-exfiltration/ATR-2026-00856-indirect-pi-address-pii-exfil.yaml +4 -4
  240. package/rules/context-exfiltration/ATR-2026-00857-indirect-pi-cloud-file-exfil.yaml +9 -5
  241. package/rules/context-exfiltration/ATR-2026-00858-indirect-pi-exfil-and-destroy.yaml +10 -6
  242. package/rules/context-exfiltration/ATR-2026-00859-rag-injected-pii-exfil.yaml +9 -5
  243. package/rules/context-exfiltration/ATR-2026-00860-indirect-pi-financial-transfer-hijack.yaml +9 -5
  244. package/rules/context-exfiltration/ATR-2026-00861-indirect-pi-crypto-transfer-hijack.yaml +9 -5
  245. package/rules/context-exfiltration/ATR-2026-00862-indirect-pi-mfa-code-exfil.yaml +9 -5
  246. package/rules/context-exfiltration/ATR-2026-00863-shell-injection-data-exfil.yaml +9 -5
  247. package/rules/context-exfiltration/ATR-2026-01450-svg-onload-xss-injection.yaml +33 -5
  248. package/rules/context-exfiltration/ATR-2026-01451-img-onerror-xss-injection.yaml +4 -4
  249. package/rules/context-exfiltration/ATR-2026-01452-obfuscated-javascript-xss.yaml +3 -3
  250. package/rules/context-exfiltration/ATR-2026-01453-markdown-image-base64-exfil-carrier.yaml +8 -3
  251. package/rules/context-exfiltration/ATR-2026-01454-direct-markdown-exfil-payload.yaml +3 -3
  252. package/rules/context-exfiltration/ATR-2026-01455-new-instructions-injection-marker.yaml +2 -2
  253. package/rules/context-exfiltration/ATR-2026-01456-debug-cli-mode-sysprompt-extraction.yaml +4 -4
  254. package/rules/context-exfiltration/ATR-2026-01457-sysprompt-completion-clone-attack.yaml +29 -4
  255. package/rules/context-exfiltration/ATR-2026-01458-compare-bots-sysprompt-fishing.yaml +3 -3
  256. package/rules/context-exfiltration/ATR-2026-01459-variable-clone-sysprompt-technique.yaml +8 -3
  257. package/rules/context-exfiltration/ATR-2026-01460-json-format-sysprompt-extraction.yaml +3 -3
  258. package/rules/context-exfiltration/ATR-2026-01461-foreign-language-sysprompt-request.yaml +4 -4
  259. package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +2 -2
  260. package/rules/context-exfiltration/ATR-2026-01463-imend-imsystem-prompt-injection-format.yaml +2 -2
  261. package/rules/context-exfiltration/ATR-2026-01464-indirect-pi-sysprompt-action-hijack.yaml +4 -4
  262. package/rules/context-exfiltration/ATR-2026-01605-ssrf-aws-metadata-endpoint.yaml +3 -3
  263. package/rules/context-exfiltration/ATR-2026-01606-ssrf-internal-network-scan.yaml +4 -4
  264. package/rules/context-exfiltration/ATR-2026-01607-ssrf-localhost-service-probe.yaml +3 -3
  265. package/rules/context-exfiltration/ATR-2026-01608-ssrf-file-scheme-local-read.yaml +4 -4
  266. package/rules/context-exfiltration/ATR-2026-01753-ransom-email-exfil-delete-extortion.yaml +4 -4
  267. package/rules/context-exfiltration/ATR-2026-01754-ransom-file-cloud-exfil-delete-extortion.yaml +4 -4
  268. package/rules/context-exfiltration/ATR-2026-01770-semantic-pii-credential-extraction.yaml +4 -4
  269. package/rules/context-exfiltration/ATR-2026-01772-semantic-internal-state-recon.yaml +4 -4
  270. package/rules/context-exfiltration/ATR-2026-01807-asb-bulk-data-exfil-external.yaml +4 -4
  271. package/rules/context-exfiltration/ATR-2026-01862-llmail-email-tool-exfil-confirmation.yaml +4 -4
  272. package/rules/context-exfiltration/ATR-2026-01863-llmail-post-summary-exfil-directive.yaml +4 -4
  273. package/rules/context-exfiltration/ATR-2026-01864-llmail-obfuscated-exfil-address.yaml +4 -4
  274. package/rules/context-exfiltration/ATR-2026-01890-file-exfiltration.yaml +3 -3
  275. package/rules/context-exfiltration/ATR-2026-01891-surveillance-exfiltration.yaml +3 -3
  276. package/rules/context-exfiltration/ATR-2026-01892-env-exfiltration.yaml +3 -3
  277. package/rules/context-exfiltration/ATR-2026-01893-system-recon-exfiltration.yaml +3 -3
  278. package/rules/context-exfiltration/ATR-2026-01894-cookie-theft.yaml +3 -3
  279. package/rules/context-exfiltration/ATR-2026-01895-contact-exfiltration.yaml +3 -3
  280. package/rules/context-exfiltration/ATR-2026-01924-system-instruction-extraction-reformat.yaml +4 -4
  281. package/rules/context-exfiltration/ATR-2026-01929-mcp-unauthenticated-transport-token-fallback.yaml +5 -6
  282. package/rules/context-exfiltration/ATR-2026-01946-cloud-metadata-ssrf-ip-encoding-bypass.yaml +5 -6
  283. package/rules/context-exfiltration/ATR-2026-01948-netlicensing-mcp-product-number-path-traversal-token-leak.yaml +3 -4
  284. package/rules/context-exfiltration/ATR-2026-01957-m365-copilot-searchleak-open-redirect-exfil.yaml +3 -4
  285. package/rules/context-exfiltration/ATR-2026-01961-meta-ads-mcp-unauth-token-leak.yaml +3 -4
  286. package/rules/context-exfiltration/ATR-2026-01964-langchain-gmailtoolkit-indirect-prompt-injection-email-exfil.yaml +3 -4
  287. package/rules/context-exfiltration/ATR-2026-01984-mcp-server-kubernetes-kubectl-generic-token-exfil.yaml +4 -5
  288. package/rules/context-exfiltration/ATR-2026-01988-t1005-agent-local-data-staging-exfil.yaml +3 -3
  289. package/rules/context-exfiltration/ATR-2026-02017-secret-key-exfiltration-request.yaml +3 -4
  290. package/rules/context-exfiltration/ATR-2026-02026-oblique-sysprompt-extraction-transform.yaml +2 -3
  291. package/rules/context-exfiltration/ATR-2026-02104-media-directive-tool-result-file-exfil.yaml +2 -3
  292. package/rules/context-exfiltration/ATR-2026-02107-ssrf-internal-hostname-domain-allowlist-bypass.yaml +2 -3
  293. package/rules/context-exfiltration/ATR-2026-02121-mixed-encoding-lfi-file-scheme-tool-argument.yaml +2 -3
  294. package/rules/context-exfiltration/ATR-2026-02122-single-level-traversal-sensitive-config-file.yaml +2 -3
  295. package/rules/context-exfiltration/ATR-2026-02140-ssrf-ipv6-hex-encoded-cloud-metadata-bypass.yaml +2 -3
  296. package/rules/context-exfiltration/ATR-2026-02190-dns-exfiltration-ping-dig-encoded-subdomain.yaml +2 -3
  297. package/rules/context-exfiltration/ATR-2026-02250-attachment-upload-tool-arbitrary-file-read.yaml +2 -3
  298. package/rules/context-exfiltration/ATR-2026-02262-env-resolution-credential-exfil.yaml +4 -4
  299. package/rules/context-exfiltration/ATR-2026-02304-preapproved-domain-encoded-path-exfil.yaml +2 -3
  300. package/rules/context-exfiltration/ATR-2026-02351-wildcard-dns-ssrf-hostname-ip-encoding-bypass.yaml +2 -3
  301. package/rules/context-exfiltration/ATR-2026-02373-langsmith-prompt-manifest-baseurl-exfil.yaml +4 -5
  302. package/rules/context-exfiltration/ATR-2026-02406-mcp-sequential-id-enumeration.yaml +300 -0
  303. package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +4 -5
  304. package/rules/data-poisoning/ATR-2026-00450-spring-ai-prompt-memory-poisoning.yaml +4 -4
  305. package/rules/data-poisoning/ATR-2026-00570-sql-injection-in-agent-tool-query.yaml +2 -2
  306. package/rules/data-poisoning/ATR-2026-01155-memory-plant-direct-command.yaml +3 -4
  307. package/rules/data-poisoning/ATR-2026-01774-semantic-rag-memory-poisoning.yaml +27 -27
  308. package/rules/data-poisoning/ATR-2026-02143-graph-query-injection-node-labels-group-ids.yaml +2 -3
  309. package/rules/data-poisoning/ATR-2026-02144-stored-data-administrative-request-role-elevation.yaml +2 -3
  310. package/rules/data-poisoning/ATR-2026-02303-kql-kusto-pipe-injection-metadata-tool.yaml +2 -3
  311. package/rules/data-poisoning/ATR-2026-02408-dataset-loader-code-execution.yaml +344 -0
  312. package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +12 -9
  313. package/rules/excessive-autonomy/ATR-2026-00051-resource-exhaustion.yaml +11 -9
  314. package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +3 -4
  315. package/rules/excessive-autonomy/ATR-2026-00098-unauthorized-financial-action.yaml +9 -6
  316. package/rules/excessive-autonomy/ATR-2026-00099-high-risk-tool-gate.yaml +4 -5
  317. package/rules/excessive-autonomy/ATR-2026-00428-nl-unauthorized-shell-execution.yaml +7 -4
  318. package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +2 -2
  319. package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +2 -2
  320. package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +15 -8
  321. package/rules/excessive-autonomy/ATR-2026-00708-ipi-financial-transfer-unauthorized.yaml +3 -3
  322. package/rules/excessive-autonomy/ATR-2026-00709-ipi-disable-auth-mfa.yaml +8 -3
  323. package/rules/excessive-autonomy/ATR-2026-00710-ipi-physical-access-grant.yaml +3 -3
  324. package/rules/excessive-autonomy/ATR-2026-00711-ipi-system-sabotage-destructive-command.yaml +8 -3
  325. package/rules/excessive-autonomy/ATR-2026-00712-ipi-malicious-package-install.yaml +3 -3
  326. package/rules/excessive-autonomy/ATR-2026-00713-ipi-rce-network-shell-command.yaml +4 -4
  327. package/rules/excessive-autonomy/ATR-2026-00718-tool-misuse-financial-autonomous.yaml +2 -2
  328. package/rules/excessive-autonomy/ATR-2026-00719-tool-misuse-destructive-bulk-action.yaml +2 -2
  329. package/rules/excessive-autonomy/ATR-2026-00722-ipi-account-manipulation-emergency-pretext.yaml +8 -3
  330. package/rules/excessive-autonomy/ATR-2026-01751-indirect-pi-task-abort-stop-instruction.yaml +3 -3
  331. package/rules/excessive-autonomy/ATR-2026-01752-indirect-pi-captcha-redirect-dos.yaml +4 -4
  332. package/rules/excessive-autonomy/ATR-2026-01773-semantic-excessive-agency-action.yaml +3 -3
  333. package/rules/excessive-autonomy/ATR-2026-01801-asb-autonomous-vehicle-sabotage.yaml +4 -4
  334. package/rules/excessive-autonomy/ATR-2026-01804-asb-covert-unlogged-action.yaml +4 -4
  335. package/rules/excessive-autonomy/ATR-2026-01805-asb-financial-fraud-execution.yaml +4 -4
  336. package/rules/excessive-autonomy/ATR-2026-01806-asb-clinical-patient-harm.yaml +4 -4
  337. package/rules/excessive-autonomy/ATR-2026-01809-semantic-insider-manipulation-process-corruption.yaml +5 -5
  338. package/rules/excessive-autonomy/ATR-2026-01837-ddos-attack-orchestration.yaml +4 -4
  339. package/rules/excessive-autonomy/ATR-2026-01838-unauthorized-cryptominer-deployment.yaml +4 -4
  340. package/rules/excessive-autonomy/ATR-2026-01849-harassment-bot-deployment.yaml +4 -4
  341. package/rules/excessive-autonomy/ATR-2026-01989-t1046-agent-internal-network-sweep.yaml +3 -3
  342. package/rules/excessive-autonomy/ATR-2026-01993-t1562-agent-impair-defenses.yaml +3 -3
  343. package/rules/excessive-autonomy/ATR-2026-01994-t1573-agent-encrypted-c2-channel.yaml +3 -3
  344. package/rules/excessive-autonomy/ATR-2026-02106-redos-regex-payload-tool-argument.yaml +2 -3
  345. package/rules/excessive-autonomy/ATR-2026-02400-agent-approval-gate-disabled-runtime.yaml +382 -0
  346. package/rules/excessive-autonomy/ATR-2026-02401-rogue-agent-mass-connector-grant.yaml +274 -0
  347. package/rules/excessive-autonomy/ATR-2026-02409-mcp-async-task-abuse.yaml +397 -0
  348. package/rules/model-abuse/ATR-2026-00279-harmful-completion-continuation.yaml +2 -2
  349. package/rules/model-abuse/ATR-2026-00281-eicar-gtube-malware-signature-request.yaml +2 -2
  350. package/rules/model-abuse/ATR-2026-00284-glitch-token-destabilization.yaml +2 -2
  351. package/rules/model-abuse/ATR-2026-00289-lmrc-harmful-content-elicitation.yaml +2 -2
  352. package/rules/model-abuse/ATR-2026-00292-self-harm-eating-disorder-facilitation.yaml +2 -2
  353. package/rules/model-abuse/ATR-2026-00298-malicious-use-illegal-activity-request.yaml +4 -4
  354. package/rules/model-abuse/ATR-2026-00299-harmbench-detailed-harmful-instruction.yaml +4 -4
  355. package/rules/model-abuse/ATR-2026-00413-malwaregen-code-generation-request.yaml +3 -3
  356. package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +10 -4
  357. package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +42 -6
  358. package/rules/model-abuse/ATR-2026-01750-dos-repeat-word-n-times-output-amplification.yaml +2 -2
  359. package/rules/model-abuse/ATR-2026-01760-dos-forced-infinite-output-token-flood.yaml +2 -2
  360. package/rules/model-abuse/ATR-2026-01830-stolen-credential-account-drain.yaml +4 -4
  361. package/rules/model-abuse/ATR-2026-01831-money-laundering-crypto-layering.yaml +4 -4
  362. package/rules/model-abuse/ATR-2026-01833-darknet-controlled-substance-procurement.yaml +4 -4
  363. package/rules/model-abuse/ATR-2026-01834-fraudulent-identity-document-procurement.yaml +4 -4
  364. package/rules/model-abuse/ATR-2026-01835-human-trafficking-facilitation.yaml +4 -4
  365. package/rules/model-abuse/ATR-2026-01836-trojanized-software-distribution.yaml +4 -4
  366. package/rules/model-abuse/ATR-2026-01840-extremist-propaganda-distribution.yaml +4 -4
  367. package/rules/model-abuse/ATR-2026-01841-deepfake-disinformation.yaml +7 -4
  368. package/rules/model-abuse/ATR-2026-01842-plagiarism-detector-evasion.yaml +4 -4
  369. package/rules/model-abuse/ATR-2026-01843-drug-dealing-detection-evasion-spelling.yaml +4 -4
  370. package/rules/model-abuse/ATR-2026-01844-illegitimate-prescription-fulfillment.yaml +4 -4
  371. package/rules/model-abuse/ATR-2026-01845-banned-ingredient-relabel-fraud.yaml +4 -4
  372. package/rules/model-abuse/ATR-2026-01846-tax-evasion-offshore-shell-planning.yaml +4 -4
  373. package/rules/model-abuse/ATR-2026-01847-immigration-work-fraud.yaml +4 -4
  374. package/rules/model-abuse/ATR-2026-01848-illicit-drug-marketplace-build.yaml +4 -4
  375. package/rules/model-abuse/ATR-2026-01850-targeted-doxxing-threat-campaign.yaml +4 -4
  376. package/rules/model-abuse/ATR-2026-01851-bestiality-content-distribution.yaml +4 -4
  377. package/rules/model-abuse/ATR-2026-01852-romance-scam-impersonation.yaml +4 -4
  378. package/rules/model-abuse/ATR-2026-01853-nonconsensual-leaked-media-distribution.yaml +4 -4
  379. package/rules/model-abuse/ATR-2026-01854-falsified-research-abstract-disinformation.yaml +4 -4
  380. package/rules/model-abuse/ATR-2026-01855-content-misappropriation-republish.yaml +4 -4
  381. package/rules/model-abuse/ATR-2026-01856-targeted-harmful-content-generation.yaml +4 -4
  382. package/rules/model-abuse/ATR-2026-01896-ransomware.yaml +2 -2
  383. package/rules/model-abuse/ATR-2026-01897-host-sabotage.yaml +2 -2
  384. package/rules/model-abuse/ATR-2026-01898-network-dos.yaml +2 -2
  385. package/rules/model-abuse/ATR-2026-02211-named-substance-synthesis-request-non-stepword.yaml +2 -3
  386. package/rules/model-abuse/ATR-2026-02411-ai-provenance-metadata-stripping.yaml +274 -0
  387. package/rules/model-abuse/ATR-2026-02412-generative-watermark-removal-tooling.yaml +233 -0
  388. package/rules/model-abuse/ATR-2026-02413-ai-text-detection-evasion-humanizer.yaml +258 -0
  389. package/rules/model-security/ATR-2026-00072-model-behavior-extraction.yaml +3 -4
  390. package/rules/model-security/ATR-2026-00073-malicious-finetuning-data.yaml +11 -8
  391. package/rules/model-security/ATR-2026-00433-modelcache-torch-load-deserialization-rce.yaml +4 -4
  392. package/rules/privilege-escalation/ATR-2026-00040-privilege-escalation.yaml +10 -8
  393. package/rules/privilege-escalation/ATR-2026-00041-scope-creep.yaml +2 -3
  394. package/rules/privilege-escalation/ATR-2026-00107-delayed-execution-bypass.yaml +9 -10
  395. package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +2 -3
  396. package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +6 -4
  397. package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +2 -3
  398. package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +2 -3
  399. package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +2 -3
  400. package/rules/privilege-escalation/ATR-2026-00204-stealth-execution-persistence.yaml +4 -4
  401. package/rules/privilege-escalation/ATR-2026-00436-enclave-vm-sandbox-escape-rce.yaml +4 -4
  402. package/rules/privilege-escalation/ATR-2026-00441-semantic-kernel-sessions-python-plugin-startup-persistence.yaml +5 -5
  403. package/rules/privilege-escalation/ATR-2026-00451-litellm-admin-sqli-cisa-kev.yaml +4 -4
  404. package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +2 -2
  405. package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +4 -5
  406. package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +3 -4
  407. package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +3 -4
  408. package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +23 -10
  409. package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +23 -10
  410. package/rules/privilege-escalation/ATR-2026-01600-sql-injection-tautology-rbac-bypass.yaml +4 -4
  411. package/rules/privilege-escalation/ATR-2026-01601-sql-injection-destructive-ddl.yaml +2 -2
  412. package/rules/privilege-escalation/ATR-2026-01602-sql-injection-union-select-exfil.yaml +2 -2
  413. package/rules/privilege-escalation/ATR-2026-01603-sql-injection-stacked-dml-abuse.yaml +3 -3
  414. package/rules/privilege-escalation/ATR-2026-01604-sql-injection-schema-enumeration.yaml +3 -3
  415. package/rules/privilege-escalation/ATR-2026-01609-shell-injection-exfil-webhook.yaml +3 -3
  416. package/rules/privilege-escalation/ATR-2026-01610-shell-evasion-subshell-injection.yaml +9 -4
  417. package/rules/privilege-escalation/ATR-2026-01611-shell-evasion-eval-exec-injection.yaml +3 -3
  418. package/rules/privilege-escalation/ATR-2026-01612-debug-mode-privilege-escalation.yaml +3 -3
  419. package/rules/privilege-escalation/ATR-2026-01613-rbac-bypass-social-engineering.yaml +2 -2
  420. package/rules/privilege-escalation/ATR-2026-01614-bola-cross-user-data-access.yaml +16 -4
  421. package/rules/privilege-escalation/ATR-2026-01615-sandbox-escape-command-injection.yaml +3 -3
  422. package/rules/privilege-escalation/ATR-2026-01616-path-traversal-agent-file-access.yaml +4 -4
  423. package/rules/privilege-escalation/ATR-2026-01802-asb-backdoor-surveillance-implant.yaml +4 -4
  424. package/rules/privilege-escalation/ATR-2026-01803-asb-covert-server-intrusion.yaml +4 -4
  425. package/rules/privilege-escalation/ATR-2026-01808-asb-synthetic-pan-payment-probe.yaml +4 -4
  426. package/rules/privilege-escalation/ATR-2026-01899-remote-access-backdoor.yaml +2 -2
  427. package/rules/privilege-escalation/ATR-2026-01933-litellm-user-role-privilege-escalation-cve-2026-47102.yaml +4 -5
  428. package/rules/privilege-escalation/ATR-2026-01934-litellm-allowed-routes-authz-bypass-cve-2026-47101.yaml +4 -5
  429. package/rules/privilege-escalation/ATR-2026-01949-praisonai-mcpserver-unauth-tools-call.yaml +3 -4
  430. package/rules/privilege-escalation/ATR-2026-01974-anything-llm-data-import-access-control.yaml +3 -4
  431. package/rules/privilege-escalation/ATR-2026-01981-network-ai-approval-inbox-unauth-cors-bypass.yaml +4 -5
  432. package/rules/privilege-escalation/ATR-2026-01986-windows-mcp-unauth-http-powershell-cors.yaml +4 -5
  433. package/rules/privilege-escalation/ATR-2026-01992-t1556-agent-auth-process-tamper.yaml +3 -3
  434. package/rules/privilege-escalation/ATR-2026-02040-file-edit-tool-persistence-write.yaml +2 -3
  435. package/rules/privilege-escalation/ATR-2026-02100-cypher-destructive-admin-query-injection.yaml +2 -3
  436. package/rules/privilege-escalation/ATR-2026-02101-dynamic-dunder-attribute-sandbox-escape.yaml +2 -3
  437. package/rules/privilege-escalation/ATR-2026-02123-bare-query-path-confusion-auth-bypass.yaml +2 -3
  438. package/rules/privilege-escalation/ATR-2026-02142-download-tool-absolute-path-sandbox-escape.yaml +2 -3
  439. package/rules/privilege-escalation/ATR-2026-02146-export-tool-dest-dir-credential-directory-redirect.yaml +2 -3
  440. package/rules/privilege-escalation/ATR-2026-02192-self-privesc-wildcard-trust-config-write.yaml +2 -3
  441. package/rules/privilege-escalation/ATR-2026-02195-dangerous-env-var-injection-config-tool.yaml +2 -3
  442. package/rules/privilege-escalation/ATR-2026-02251-identifier-field-path-traversal-storage-write.yaml +2 -3
  443. package/rules/privilege-escalation/ATR-2026-02300-mcp-stdio-config-dangerous-env-var.yaml +2 -3
  444. package/rules/privilege-escalation/ATR-2026-02301-symlink-outside-workspace-sensitive-target.yaml +2 -3
  445. package/rules/privilege-escalation/ATR-2026-02302-git-worktree-dotgit-sandbox-escape.yaml +2 -3
  446. package/rules/privilege-escalation/ATR-2026-02353-runtime-identifier-field-path-traversal-log-read.yaml +2 -3
  447. package/rules/privilege-escalation/ATR-2026-02370-ssh-scp-hostalias-option-injection.yaml +4 -5
  448. package/rules/privilege-escalation/ATR-2026-02371-chromium-launch-flag-argument-injection.yaml +4 -5
  449. package/rules/privilege-escalation/ATR-2026-02402-mcp-policy-engine-fail-open.yaml +293 -0
  450. package/rules/privilege-escalation/ATR-2026-02404-model-output-to-shell-unsanitized.yaml +269 -0
  451. package/rules/privilege-escalation/ATR-2026-02407-agent-workspace-boundary-escape.yaml +310 -0
  452. package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +3 -4
  453. package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +4 -5
  454. package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +30 -9
  455. package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +31 -14
  456. package/rules/prompt-injection/ATR-2026-00005-multi-turn-injection.yaml +2 -3
  457. package/rules/prompt-injection/ATR-2026-00080-encoding-evasion.yaml +3 -4
  458. package/rules/prompt-injection/ATR-2026-00081-semantic-multi-turn.yaml +8 -6
  459. package/rules/prompt-injection/ATR-2026-00082-fingerprint-evasion.yaml +14 -7
  460. package/rules/prompt-injection/ATR-2026-00083-indirect-tool-injection.yaml +14 -7
  461. package/rules/prompt-injection/ATR-2026-00084-structured-data-injection.yaml +36 -6
  462. package/rules/prompt-injection/ATR-2026-00085-audit-evasion.yaml +14 -7
  463. package/rules/prompt-injection/ATR-2026-00086-visual-spoofing.yaml +22 -9
  464. package/rules/prompt-injection/ATR-2026-00087-rule-probing.yaml +19 -10
  465. package/rules/prompt-injection/ATR-2026-00088-adaptive-countermeasure.yaml +27 -11
  466. package/rules/prompt-injection/ATR-2026-00089-polymorphic-skill.yaml +66 -7
  467. package/rules/prompt-injection/ATR-2026-00090-threat-intel-exfil.yaml +15 -8
  468. package/rules/prompt-injection/ATR-2026-00091-nested-payload.yaml +44 -10
  469. package/rules/prompt-injection/ATR-2026-00092-consensus-poisoning.yaml +10 -8
  470. package/rules/prompt-injection/ATR-2026-00093-gradual-escalation.yaml +9 -8
  471. package/rules/prompt-injection/ATR-2026-00094-audit-bypass.yaml +9 -7
  472. package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +9 -6
  473. package/rules/prompt-injection/ATR-2026-00104-persona-hijacking.yaml +4 -5
  474. package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +3 -4
  475. package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +2 -3
  476. package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +2 -3
  477. package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +2 -3
  478. package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +2 -3
  479. package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +2 -3
  480. package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +2 -3
  481. package/rules/prompt-injection/ATR-2026-00153-tool-with-embedded-instruction-to-bypass.yaml +3 -4
  482. package/rules/prompt-injection/ATR-2026-00154-unauthorized-background-task-execution-v.yaml +3 -4
  483. package/rules/prompt-injection/ATR-2026-00155-hidden-llm-instructions-in-skill-descrip.yaml +4 -5
  484. package/rules/prompt-injection/ATR-2026-00156-ssh-remote-command-execution-with-creden.yaml +3 -4
  485. package/rules/prompt-injection/ATR-2026-00163-skill-hidden-override-instruction.yaml +2 -2
  486. package/rules/prompt-injection/ATR-2026-00202-encoding-evasion-homoglyph-synonym.yaml +2 -2
  487. package/rules/prompt-injection/ATR-2026-00203-context-pollution-skill-description.yaml +4 -4
  488. package/rules/prompt-injection/ATR-2026-00206-hidden-priority-instructions.yaml +2 -2
  489. package/rules/prompt-injection/ATR-2026-00207-hidden-instructions.yaml +2 -2
  490. package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +2 -2
  491. package/rules/prompt-injection/ATR-2026-00213-system-prompt-override.yaml +28 -4
  492. package/rules/prompt-injection/ATR-2026-00226-identity-substitution.yaml +2 -2
  493. package/rules/prompt-injection/ATR-2026-00227-historical-persona-jailbreak.yaml +2 -2
  494. package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +2 -2
  495. package/rules/prompt-injection/ATR-2026-00229-roleplay-jailbreak.yaml +2 -2
  496. package/rules/prompt-injection/ATR-2026-00230-persona-moral-bypass.yaml +2 -2
  497. package/rules/prompt-injection/ATR-2026-00231-identity-substitution.yaml +2 -2
  498. package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +2 -2
  499. package/rules/prompt-injection/ATR-2026-00234-roleplay-jailbreak.yaml +2 -2
  500. package/rules/prompt-injection/ATR-2026-00235-persona-moral-bypass.yaml +2 -2
  501. package/rules/prompt-injection/ATR-2026-00236-pseudo-code-jailbreak.yaml +2 -2
  502. package/rules/prompt-injection/ATR-2026-00237-dual-response-jailbreak.yaml +2 -2
  503. package/rules/prompt-injection/ATR-2026-00238-identity-replacement.yaml +5 -2
  504. package/rules/prompt-injection/ATR-2026-00239-amoral-persona-obsession.yaml +2 -2
  505. package/rules/prompt-injection/ATR-2026-00240-instruction-nullification-identity-repla.yaml +2 -2
  506. package/rules/prompt-injection/ATR-2026-00241-amoral-character-jailbreak.yaml +2 -2
  507. package/rules/prompt-injection/ATR-2026-00242-persona-jailbreak.yaml +2 -2
  508. package/rules/prompt-injection/ATR-2026-00243-acronym-jailbreak.yaml +2 -2
  509. package/rules/prompt-injection/ATR-2026-00244-dual-response-jailbreak.yaml +2 -2
  510. package/rules/prompt-injection/ATR-2026-00245-malicious-persona.yaml +2 -2
  511. package/rules/prompt-injection/ATR-2026-00247-dual-response-jailbreak.yaml +2 -2
  512. package/rules/prompt-injection/ATR-2026-00249-game-based-jailbreak.yaml +2 -2
  513. package/rules/prompt-injection/ATR-2026-00251-persona-embodiment-jailbreak.yaml +2 -2
  514. package/rules/prompt-injection/ATR-2026-00252-narrative-jailbreak.yaml +2 -2
  515. package/rules/prompt-injection/ATR-2026-00253-enhanced-persona-jailbreak.yaml +2 -2
  516. package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +2 -2
  517. package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +2 -2
  518. package/rules/prompt-injection/ATR-2026-00258-unicode-tag-injection.yaml +2 -2
  519. package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +2 -2
  520. package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +2 -2
  521. package/rules/prompt-injection/ATR-2026-00267-gcg-adversarial-suffix.yaml +2 -2
  522. package/rules/prompt-injection/ATR-2026-00272-hypothetical-response-smuggling.yaml +2 -2
  523. package/rules/prompt-injection/ATR-2026-00276-invisible-unicode-bidi-injection.yaml +2 -2
  524. package/rules/prompt-injection/ATR-2026-00278-dra-disguise-reconstruction-attack.yaml +2 -2
  525. package/rules/prompt-injection/ATR-2026-00280-policy-puppetry-xml-injection.yaml +2 -2
  526. package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +2 -2
  527. package/rules/prompt-injection/ATR-2026-00285-alternate-encoding-jailbreak.yaml +2 -2
  528. package/rules/prompt-injection/ATR-2026-00286-latent-injection-embedded-context.yaml +2 -2
  529. package/rules/prompt-injection/ATR-2026-00296-shell-command-injection.yaml +4 -4
  530. package/rules/prompt-injection/ATR-2026-00297-python-code-execution-rce.yaml +4 -4
  531. package/rules/prompt-injection/ATR-2026-00308-zalgo-diacritic-overload-encoding.yaml +2 -2
  532. package/rules/prompt-injection/ATR-2026-00309-braille-unicode-encoded-injection.yaml +2 -2
  533. package/rules/prompt-injection/ATR-2026-00310-ecoji-emoji-encoded-injection.yaml +2 -2
  534. package/rules/prompt-injection/ATR-2026-00311-base2048-unicode-script-injection.yaml +2 -2
  535. package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +2 -2
  536. package/rules/prompt-injection/ATR-2026-00313-sneaky-bits-zero-width-binary.yaml +2 -2
  537. package/rules/prompt-injection/ATR-2026-00315-sata-masked-language-model-jailbreak.yaml +2 -2
  538. package/rules/prompt-injection/ATR-2026-00316-function-masking-predict-mask-bypass.yaml +2 -2
  539. package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +2 -2
  540. package/rules/prompt-injection/ATR-2026-00359-bank-phishing-smtp-email-code.yaml +3 -3
  541. package/rules/prompt-injection/ATR-2026-00367-emoji-flag-encoded-hidden-phrase.yaml +2 -2
  542. package/rules/prompt-injection/ATR-2026-00373-piracy-torrent-site-list-request.yaml +3 -3
  543. package/rules/prompt-injection/ATR-2026-00378-chatgpt-dom-javascript-redirect-manipulation.yaml +2 -2
  544. package/rules/prompt-injection/ATR-2026-00382-cocaine-component-development-request.yaml +3 -3
  545. package/rules/prompt-injection/ATR-2026-00390-explicit-sexual-content-poem-request.yaml +2 -2
  546. package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +2 -2
  547. package/rules/prompt-injection/ATR-2026-00395-llm-special-token-boundary-injection.yaml +4 -4
  548. package/rules/prompt-injection/ATR-2026-00396-toxic-continuation-prefix-injection.yaml +4 -4
  549. package/rules/prompt-injection/ATR-2026-00397-snowball-impossible-reasoning-injection.yaml +4 -4
  550. package/rules/prompt-injection/ATR-2026-00399-latent-injection-document-separator-token.yaml +4 -4
  551. package/rules/prompt-injection/ATR-2026-00400-latent-injection-ignore-instruction-keyword.yaml +2 -2
  552. package/rules/prompt-injection/ATR-2026-00401-leakreplay-cloze-mask-training-data-elicitation.yaml +3 -3
  553. package/rules/prompt-injection/ATR-2026-00403-glitch-token-repeat-back-elicitation.yaml +3 -3
  554. package/rules/prompt-injection/ATR-2026-00407-echo-sql-jinja-template-injection.yaml +4 -4
  555. package/rules/prompt-injection/ATR-2026-00408-dra-parenthesis-character-reconstruction-attack.yaml +2 -2
  556. package/rules/prompt-injection/ATR-2026-00409-phrasing-past-future-tense-harmful-query.yaml +2 -2
  557. package/rules/prompt-injection/ATR-2026-00410-lmrc-harm-category-direct-elicitation.yaml +3 -3
  558. package/rules/prompt-injection/ATR-2026-00412-figstep-image-list-multimodal-jailbreak.yaml +2 -2
  559. package/rules/prompt-injection/ATR-2026-00414-continuation-ethnic-slur-completion-elicitation.yaml +3 -3
  560. package/rules/prompt-injection/ATR-2026-00420-copilot-studio-sharepoint-indirect-injection.yaml +4 -4
  561. package/rules/prompt-injection/ATR-2026-00442-quoted-exact-output-forcing.yaml +4 -4
  562. package/rules/prompt-injection/ATR-2026-00443-word-fragment-concat-assembly.yaml +2 -2
  563. package/rules/prompt-injection/ATR-2026-00444-unicode-obfuscation-in-user-input.yaml +2 -2
  564. package/rules/prompt-injection/ATR-2026-00445-translation-hijack-with-side-output.yaml +4 -4
  565. package/rules/prompt-injection/ATR-2026-00446-variable-assignment-payload-injection.yaml +3 -3
  566. package/rules/prompt-injection/ATR-2026-00447-fictional-generation-containing-target.yaml +3 -3
  567. package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +2 -2
  568. package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +2 -2
  569. package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +7 -4
  570. package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +2 -2
  571. package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +2 -2
  572. package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +2 -2
  573. package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +2 -2
  574. package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +2 -2
  575. package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +2 -2
  576. package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +2 -2
  577. package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +2 -2
  578. package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +2 -2
  579. package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +2 -2
  580. package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +2 -2
  581. package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +2 -2
  582. package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +2 -2
  583. package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +2 -2
  584. package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +2 -2
  585. package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +2 -2
  586. package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +3 -3
  587. package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +2 -2
  588. package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +2 -2
  589. package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +2 -2
  590. package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +2 -2
  591. package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +2 -2
  592. package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +2 -2
  593. package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +2 -2
  594. package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +2 -2
  595. package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +2 -2
  596. package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +2 -2
  597. package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +2 -2
  598. package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +2 -2
  599. package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +3 -3
  600. package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +2 -2
  601. package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +2 -2
  602. package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +2 -2
  603. package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +2 -2
  604. package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +2 -2
  605. package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +2 -2
  606. package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +2 -2
  607. package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +2 -2
  608. package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +2 -2
  609. package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +2 -2
  610. package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +2 -2
  611. package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +2 -2
  612. package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +2 -2
  613. package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +2 -2
  614. package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +2 -2
  615. package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +2 -2
  616. package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +2 -2
  617. package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +4 -4
  618. package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +7 -2
  619. package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +2 -2
  620. package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +3 -3
  621. package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +2 -2
  622. package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +2 -2
  623. package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +2 -2
  624. package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +4 -4
  625. package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +23 -12
  626. package/rules/prompt-injection/ATR-2026-00554-langchain-vulnerable-to-template-injecti.yaml +2 -2
  627. package/rules/prompt-injection/ATR-2026-00565-the-llm-cli-tool-thru-0-27-1-contains-a-.yaml +2 -2
  628. package/rules/prompt-injection/ATR-2026-00573-semantic-paraphrased-injection.yaml +2 -2
  629. package/rules/prompt-injection/ATR-2026-00579-mcp-tool-description-line-jumping-injection.yaml +3 -4
  630. package/rules/prompt-injection/ATR-2026-00584-indirect-injection-via-tool-response.yaml +4 -5
  631. package/rules/prompt-injection/ATR-2026-00700-structured-data-payload-injection.yaml +8 -3
  632. package/rules/prompt-injection/ATR-2026-00701-ipi-tool-output-xss-injection.yaml +4 -4
  633. package/rules/prompt-injection/ATR-2026-01000-context-ignore-fake-completion-prefix.yaml +2 -2
  634. package/rules/prompt-injection/ATR-2026-01001-direct-pi-instruction-override-secret-key.yaml +2 -2
  635. package/rules/prompt-injection/ATR-2026-01002-role-escalation-false-authority-claim.yaml +2 -2
  636. package/rules/prompt-injection/ATR-2026-01005-many-shot-repetition-override.yaml +2 -2
  637. package/rules/prompt-injection/ATR-2026-01006-payload-split-string-concat-injection.yaml +2 -2
  638. package/rules/prompt-injection/ATR-2026-01007-token-repeat-flooding-injection.yaml +2 -2
  639. package/rules/prompt-injection/ATR-2026-01009-virtual-world-bypass-fictional-pii.yaml +3 -3
  640. package/rules/prompt-injection/ATR-2026-01012-encoding-evasion-decode-execute.yaml +2 -2
  641. package/rules/prompt-injection/ATR-2026-01013-language-evasion-multilingual-credential.yaml +2 -2
  642. package/rules/prompt-injection/ATR-2026-01015-evasion-refusal-suppression.yaml +3 -3
  643. package/rules/prompt-injection/ATR-2026-01016-evasion-response-priming-forced-opener.yaml +2 -2
  644. package/rules/prompt-injection/ATR-2026-01017-evasion-dual-response-split-output.yaml +2 -2
  645. package/rules/prompt-injection/ATR-2026-01018-evasion-shell-injection-eval.yaml +5 -5
  646. package/rules/prompt-injection/ATR-2026-01019-sysprompt-override-fake-diagnostic-mode.yaml +2 -2
  647. package/rules/prompt-injection/ATR-2026-01020-spikee-doc-embedded-base64-payload.yaml +3 -3
  648. package/rules/prompt-injection/ATR-2026-01021-spikee-doc-embedded-translation-injection.yaml +3 -3
  649. package/rules/prompt-injection/ATR-2026-01023-evasion-opposite-intent-negation-trick.yaml +2 -2
  650. package/rules/prompt-injection/ATR-2026-01024-evasion-persona-override-rule-breaker.yaml +2 -2
  651. package/rules/prompt-injection/ATR-2026-01025-evasion-hypothetical-fictional-execution-framing.yaml +3 -3
  652. package/rules/prompt-injection/ATR-2026-01026-evasion-unicode-glitch-token-anomaly.yaml +2 -2
  653. package/rules/prompt-injection/ATR-2026-01304-indirect-injection-carrier-important-override.yaml +4 -4
  654. package/rules/prompt-injection/ATR-2026-01757-hypothetical-framing-bypass-research-audit.yaml +3 -3
  655. package/rules/prompt-injection/ATR-2026-01758-hypothetical-fictional-story-bypass.yaml +3 -3
  656. package/rules/prompt-injection/ATR-2026-01759-dos-new-important-instructions-injection-in-document.yaml +2 -2
  657. package/rules/prompt-injection/ATR-2026-01771-semantic-jailbreak-framing.yaml +3 -3
  658. package/rules/prompt-injection/ATR-2026-01800-asb-trigger-marker-tool-coercion.yaml +4 -4
  659. package/rules/prompt-injection/ATR-2026-01860-llmail-chat-template-boundary-spoof.yaml +3 -3
  660. package/rules/prompt-injection/ATR-2026-01861-llmail-pseudo-xml-role-injection.yaml +3 -3
  661. package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +3 -3
  662. package/rules/prompt-injection/ATR-2026-01900-output-encoding.yaml +2 -2
  663. package/rules/prompt-injection/ATR-2026-01901-output-scrambling.yaml +2 -2
  664. package/rules/prompt-injection/ATR-2026-01902-output-emoji.yaml +2 -2
  665. package/rules/prompt-injection/ATR-2026-01903-output-language.yaml +2 -2
  666. package/rules/prompt-injection/ATR-2026-01904-link-injection.yaml +3 -3
  667. package/rules/prompt-injection/ATR-2026-01905-promotional-injection.yaml +2 -2
  668. package/rules/prompt-injection/ATR-2026-01906-content-manipulation.yaml +4 -4
  669. package/rules/prompt-injection/ATR-2026-01920-access-grant-coercion.yaml +3 -3
  670. package/rules/prompt-injection/ATR-2026-01921-access-denial-inversion.yaml +3 -3
  671. package/rules/prompt-injection/ATR-2026-01922-authorization-state-spoofing.yaml +3 -3
  672. package/rules/prompt-injection/ATR-2026-01923-forged-input-boundary-markers.yaml +3 -3
  673. package/rules/prompt-injection/ATR-2026-01925-encoded-payload-decoding-coercion.yaml +3 -3
  674. package/rules/prompt-injection/ATR-2026-01926-cross-lingual-authorization-laundering.yaml +3 -3
  675. package/rules/prompt-injection/ATR-2026-02001-ignore-below-instructions-mirror-of-ignore-previ.yaml +3 -4
  676. package/rules/prompt-injection/ATR-2026-02002-instruction-set-probe-or-supplant-direct-meta-qu.yaml +3 -4
  677. package/rules/prompt-injection/ATR-2026-02003-task-pivot-override-abandon-the-cover-task-trans.yaml +3 -4
  678. package/rules/prompt-injection/ATR-2026-02004-regional-indicator-flag-emoji-alphabet-letter-sp.yaml +3 -4
  679. package/rules/prompt-injection/ATR-2026-02005-actor-never-breaks-character-roleplay-dan-style-.yaml +3 -4
  680. package/rules/prompt-injection/ATR-2026-02006-fuzzy-cross-lingual-i-have-been-pwned-near-miss-.yaml +3 -4
  681. package/rules/prompt-injection/ATR-2026-02007-bare-key-elicitation-token.yaml +3 -4
  682. package/rules/prompt-injection/ATR-2026-02008-translation-chain-output-laundering-state-secret.yaml +3 -4
  683. package/rules/prompt-injection/ATR-2026-02009-bare-key-elicitation-trailing-colon.yaml +3 -4
  684. package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +3 -4
  685. package/rules/prompt-injection/ATR-2026-02011-malformed-grammar-pwned-success-claim.yaml +3 -4
  686. package/rules/prompt-injection/ATR-2026-02012-movie-title-generator-instruction-wrapper-for-pw.yaml +3 -4
  687. package/rules/prompt-injection/ATR-2026-02013-delimiter-fence-ignore-instructions-override.yaml +3 -4
  688. package/rules/prompt-injection/ATR-2026-02014-spliced-target-string-letters-of-a-filtered-cana.yaml +3 -4
  689. package/rules/prompt-injection/ATR-2026-02015-dense-emoji-only-payload-flood.yaml +3 -4
  690. package/rules/prompt-injection/ATR-2026-02016-reversed-payload-string.yaml +3 -4
  691. package/rules/prompt-injection/ATR-2026-02018-regional-indicator-flag-emoji-letter-spelling-sp.yaml +3 -4
  692. package/rules/prompt-injection/ATR-2026-02019-python-interpreter-role-assignment-exec-framing.yaml +3 -4
  693. package/rules/prompt-injection/ATR-2026-02020-obfuscated-token-reconstruction-via-character-su.yaml +3 -4
  694. package/rules/prompt-injection/ATR-2026-02120-agentdojo-important-message-identity-spoof-pretext.yaml +2 -3
  695. package/rules/prompt-injection/ATR-2026-02210-negation-topic-evil-persona-two-script-jailbreak.yaml +2 -3
  696. package/rules/prompt-injection/ATR-2026-02230-conditional-keyword-trigger-override.yaml +2 -3
  697. package/rules/prompt-injection/ATR-2026-02232-brand-persona-opinion-hijack.yaml +2 -3
  698. package/rules/prompt-injection/ATR-2026-02374-rot13-base64-obfuscated-shell-jailbreak.yaml +3 -4
  699. package/rules/prompt-injection/ATR-2026-02377-novel-persona-jailbreak-cosignal.yaml +99 -0
  700. package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +4 -4
  701. package/rules/skill-compromise/ATR-2026-00061-description-behavior-mismatch.yaml +100 -9
  702. package/rules/skill-compromise/ATR-2026-00062-hidden-capability.yaml +12 -9
  703. package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +18 -7
  704. package/rules/skill-compromise/ATR-2026-00064-over-permissioned-skill.yaml +8 -6
  705. package/rules/skill-compromise/ATR-2026-00065-skill-update-attack.yaml +2 -3
  706. package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +11 -7
  707. package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +6 -3
  708. package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +8 -5
  709. package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +3 -3
  710. package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +2 -3
  711. package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +2 -3
  712. package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +2 -3
  713. package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +3 -2
  714. package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +2 -3
  715. package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +2 -2
  716. package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +2 -2
  717. package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +3 -2
  718. package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +2 -2
  719. package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +2 -3
  720. package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +7 -4
  721. package/rules/skill-compromise/ATR-2026-00151-fork-impersonation-install.yaml +2 -2
  722. package/rules/skill-compromise/ATR-2026-00157-timebomb-credential-exfil.yaml +2 -3
  723. package/rules/skill-compromise/ATR-2026-00200-agent-memory-config-tampering.yaml +4 -4
  724. package/rules/skill-compromise/ATR-2026-00214-credential-theft.yaml +2 -2
  725. package/rules/skill-compromise/ATR-2026-00217-credential-harvesting.yaml +7 -3
  726. package/rules/skill-compromise/ATR-2026-00220-malware-dropper.yaml +2 -2
  727. package/rules/skill-compromise/ATR-2026-00222-credential-harvesting.yaml +2 -2
  728. package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +2 -2
  729. package/rules/skill-compromise/ATR-2026-00224-credential-exfiltration.yaml +7 -3
  730. package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +2 -2
  731. package/rules/skill-compromise/ATR-2026-00260-package-hallucination.yaml +3 -3
  732. package/rules/skill-compromise/ATR-2026-00262-av-evasion-code-gen.yaml +2 -2
  733. package/rules/skill-compromise/ATR-2026-00263-credential-file-read-gen.yaml +3 -3
  734. package/rules/skill-compromise/ATR-2026-00266-malware-dropper-gen.yaml +2 -2
  735. package/rules/skill-compromise/ATR-2026-00283-malwaregen-generic-virus-payload-request.yaml +2 -2
  736. package/rules/skill-compromise/ATR-2026-00398-huggingface-unsafe-model-artifact-load.yaml +4 -4
  737. package/rules/skill-compromise/ATR-2026-00425-nl-persistent-covert-hook.yaml +7 -4
  738. package/rules/skill-compromise/ATR-2026-00427-nl-fake-error-instruction-bypass.yaml +7 -4
  739. package/rules/skill-compromise/ATR-2026-00429-nl-skill-self-modification.yaml +6 -3
  740. package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +5 -7
  741. package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +2 -2
  742. package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +3 -3
  743. package/rules/skill-compromise/ATR-2026-01755-backdoor-pot-linguistic-trigger-phrase.yaml +3 -3
  744. package/rules/skill-compromise/ATR-2026-01756-backdoor-pot-symbol-emoticon-trigger.yaml +4 -4
  745. package/rules/skill-compromise/ATR-2026-02261-code-credential-exfil-chain.yaml +3 -3
  746. package/rules/skill-compromise/ATR-2026-02405-malicious-skill-package-structure.yaml +276 -0
  747. package/rules/skill-compromise/ATR-2026-02410-malicious-artifact-on-vendor-domain.yaml +273 -0
  748. package/rules/tool-poisoning/ATR-2026-00010-mcp-malicious-response.yaml +12 -10
  749. package/rules/tool-poisoning/ATR-2026-00011-tool-output-injection.yaml +3 -4
  750. package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +9 -6
  751. package/rules/tool-poisoning/ATR-2026-00013-tool-ssrf.yaml +8 -6
  752. package/rules/tool-poisoning/ATR-2026-00095-supply-chain-poisoning.yaml +13 -11
  753. package/rules/tool-poisoning/ATR-2026-00096-registry-poisoning.yaml +20 -18
  754. package/rules/tool-poisoning/ATR-2026-00100-consent-bypass-instruction.yaml +4 -5
  755. package/rules/tool-poisoning/ATR-2026-00101-trust-escalation-override.yaml +4 -5
  756. package/rules/tool-poisoning/ATR-2026-00103-hidden-safety-bypass-instruction.yaml +3 -4
  757. package/rules/tool-poisoning/ATR-2026-00105-silent-action-concealment.yaml +4 -5
  758. package/rules/tool-poisoning/ATR-2026-00106-schema-description-contradiction.yaml +3 -4
  759. package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +10 -7
  760. package/rules/tool-poisoning/ATR-2026-00209-mcpwn-runaway-invocation.yaml +4 -4
  761. package/rules/tool-poisoning/ATR-2026-00210-flowise-system-message-override.yaml +4 -4
  762. package/rules/tool-poisoning/ATR-2026-00259-ansi-escape-injection.yaml +2 -2
  763. package/rules/tool-poisoning/ATR-2026-00270-xss-in-tool-response.yaml +2 -2
  764. package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +3 -3
  765. package/rules/tool-poisoning/ATR-2026-00393-ansi-code-elicitation-request.yaml +4 -4
  766. package/rules/tool-poisoning/ATR-2026-00415-flowise-custom-mcp-stdio-rce.yaml +4 -4
  767. package/rules/tool-poisoning/ATR-2026-00419-cursor-mcp-zero-click-config.yaml +5 -5
  768. package/rules/tool-poisoning/ATR-2026-00434-mcp-remote-authorization-endpoint-command-injection.yaml +4 -4
  769. package/rules/tool-poisoning/ATR-2026-00435-azure-mcp-server-missing-authentication.yaml +4 -4
  770. package/rules/tool-poisoning/ATR-2026-00448-spring-ai-milvus-filter-injection.yaml +4 -4
  771. package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +2 -2
  772. package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +2 -2
  773. package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +2 -2
  774. package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +2 -2
  775. package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +2 -2
  776. package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +3 -3
  777. package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +2 -2
  778. package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +4 -4
  779. package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +4 -4
  780. package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +4 -4
  781. package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +4 -4
  782. package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +5 -5
  783. package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +4 -5
  784. package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +12 -9
  785. package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +9 -7
  786. package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +5 -6
  787. package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +5 -6
  788. package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +5 -6
  789. package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +4 -5
  790. package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +4 -5
  791. package/rules/tool-poisoning/ATR-2026-00561-fastmcp-vulnerable-to-windows-command-in.yaml +2 -2
  792. package/rules/tool-poisoning/ATR-2026-00567-mcp-stdio-config-command-injection.yaml +2 -2
  793. package/rules/tool-poisoning/ATR-2026-00568-agent-ssrf-cloud-metadata-file-inclusion.yaml +2 -2
  794. package/rules/tool-poisoning/ATR-2026-00572-symjack-symlink-config-redirection.yaml +4 -4
  795. package/rules/tool-poisoning/ATR-2026-00575-miasma-npm-worm-agent-config-backdoor.yaml +5 -5
  796. package/rules/tool-poisoning/ATR-2026-00576-hades-agent-credential-theft.yaml +4 -4
  797. package/rules/tool-poisoning/ATR-2026-00577-create-mcp-server-stdio-exec-command-injection.yaml +55 -7
  798. package/rules/tool-poisoning/ATR-2026-00581-mcp-tool-rug-pull-post-approval-redefinition.yaml +5 -6
  799. package/rules/tool-poisoning/ATR-2026-00714-tool-camouflage-forced-tool-call.yaml +8 -3
  800. package/rules/tool-poisoning/ATR-2026-00715-tool-knowledge-hijack-identity-injection.yaml +8 -3
  801. package/rules/tool-poisoning/ATR-2026-00716-ipi-data-destruction-carrier.yaml +3 -3
  802. package/rules/tool-poisoning/ATR-2026-00720-tool-misuse-privilege-escalation-social.yaml +7 -2
  803. package/rules/tool-poisoning/ATR-2026-01300-mcp-notes-param-chat-history-exfil.yaml +6 -6
  804. package/rules/tool-poisoning/ATR-2026-01301-tool-description-exclusive-tool-override.yaml +4 -4
  805. package/rules/tool-poisoning/ATR-2026-01302-fake-tool-result-instruction-injection.yaml +4 -4
  806. package/rules/tool-poisoning/ATR-2026-01303-tool-schema-enumeration-social-engineering.yaml +4 -4
  807. package/rules/tool-poisoning/ATR-2026-01306-mcp-oauth-command-injection.yaml +4 -4
  808. package/rules/tool-poisoning/ATR-2026-01307-mcp-dns-rebinding-attack.yaml +4 -4
  809. package/rules/tool-poisoning/ATR-2026-01310-mcp-tool-description-compliance-history-exfil.yaml +4 -4
  810. package/rules/tool-poisoning/ATR-2026-01775-semantic-mcp-tool-manifest-poisoning.yaml +6 -6
  811. package/rules/tool-poisoning/ATR-2026-01927-mcp-server-kubernetes-kubectl-command-injection.yaml +5 -6
  812. package/rules/tool-poisoning/ATR-2026-01928-framelink-figma-mcp-curl-fallback-command-injection.yaml +4 -5
  813. package/rules/tool-poisoning/ATR-2026-01930-mcp-sampling-prompt-injection.yaml +5 -5
  814. package/rules/tool-poisoning/ATR-2026-01931-gemini-mcp-tool-command-injection-file-exfil.yaml +4 -4
  815. package/rules/tool-poisoning/ATR-2026-01932-shadow-undeclared-mcp-server-registration.yaml +4 -4
  816. package/rules/tool-poisoning/ATR-2026-01935-litellm-custom-code-sandbox-escape-cve-2026-40217.yaml +5 -6
  817. package/rules/tool-poisoning/ATR-2026-01952-praisonai-codemode-sandbox-escape-rce.yaml +3 -4
  818. package/rules/tool-poisoning/ATR-2026-01953-praisonai-codemode-function-ctor-sandbox-escape.yaml +3 -4
  819. package/rules/tool-poisoning/ATR-2026-01959-openhuman-shell-allowlist-env-prefix-bypass.yaml +48 -7
  820. package/rules/tool-poisoning/ATR-2026-01963-praisonai-action-orchestrator-step-target-path-traversal-rce.yaml +3 -4
  821. package/rules/tool-poisoning/ATR-2026-01965-flowise-custommcp-os-command-rce.yaml +3 -4
  822. package/rules/tool-poisoning/ATR-2026-01967-deepchat-mermaid-xss-rce-ipc-mcp-register.yaml +3 -4
  823. package/rules/tool-poisoning/ATR-2026-01968-deepchat-markdown-deeplink-openexternal-rce-bypass.yaml +5 -6
  824. package/rules/tool-poisoning/ATR-2026-01970-praisonai-filetools-normpath-path-traversal.yaml +11 -7
  825. package/rules/tool-poisoning/ATR-2026-01973-anythingllm-logo-endpoint-path-traversal.yaml +3 -4
  826. package/rules/tool-poisoning/ATR-2026-01978-anythingllm-collector-process-filename-path-traversal-delete.yaml +3 -4
  827. package/rules/tool-poisoning/ATR-2026-01979-pandasai-prompt-injection-dunder-sandbox-escape-rce.yaml +3 -4
  828. package/rules/tool-poisoning/ATR-2026-01980-agentic-flow-mcp-tool-param-command-injection.yaml +7 -5
  829. package/rules/tool-poisoning/ATR-2026-01982-dbt-mcp-node-selection-argument-injection.yaml +3 -4
  830. package/rules/tool-poisoning/ATR-2026-01983-mcp-for-stata-log-file-name-command-injection.yaml +3 -4
  831. package/rules/tool-poisoning/ATR-2026-01985-mcp-connect-bridge-unauth-process-spawn-rce.yaml +3 -4
  832. package/rules/tool-poisoning/ATR-2026-01987-langroid-sqlchatagent-prompt-to-sql-rce.yaml +3 -4
  833. package/rules/tool-poisoning/ATR-2026-02021-mcp-inspector-unauthenticated-proxy-rce.yaml +5 -6
  834. package/rules/tool-poisoning/ATR-2026-02022-curxecute-cursor-mcp-json-injected-server-rce.yaml +5 -6
  835. package/rules/tool-poisoning/ATR-2026-02023-escaperoute-filesystem-mcp-prefix-bypass.yaml +5 -6
  836. package/rules/tool-poisoning/ATR-2026-02024-escaperoute-filesystem-mcp-symlink-launchagent.yaml +5 -6
  837. package/rules/tool-poisoning/ATR-2026-02025-mcp-full-schema-poisoning-nondescription-field.yaml +6 -7
  838. package/rules/tool-poisoning/ATR-2026-02027-diagnostic-content-remediation-command-injection.yaml +2 -3
  839. package/rules/tool-poisoning/ATR-2026-02041-shell-injection-echo-marker-poc.yaml +2 -3
  840. package/rules/tool-poisoning/ATR-2026-02102-html-injection-tool-arg-approval-ui-xss.yaml +2 -3
  841. package/rules/tool-poisoning/ATR-2026-02141-mcp-server-config-command-execution.yaml +2 -3
  842. package/rules/tool-poisoning/ATR-2026-02145-python-sandbox-escape-generator-frame-introspection.yaml +2 -3
  843. package/rules/tool-poisoning/ATR-2026-02193-ssrf-ipv6-noncanonical-loopback-bypass.yaml +2 -3
  844. package/rules/tool-poisoning/ATR-2026-02194-go-init-func-process-exec-codegen-rce.yaml +2 -3
  845. package/rules/tool-poisoning/ATR-2026-02233-unscoped-destructive-db-request-nl.yaml +2 -3
  846. package/rules/tool-poisoning/ATR-2026-02260-agentjacking-remediation-framed-execution.yaml +6 -6
  847. package/rules/tool-poisoning/ATR-2026-02263-workflow-sql-template-expression-injection.yaml +2 -2
  848. package/rules/tool-poisoning/ATR-2026-02350-mcp-json-rpc-case-duplicate-key-tool-smuggling.yaml +2 -3
  849. package/rules/tool-poisoning/ATR-2026-02352-imap-search-command-injection-email-tool-args.yaml +2 -3
  850. package/rules/tool-poisoning/ATR-2026-02372-unsigned-task-feed-npm-npx-lifecycle-rce.yaml +4 -5
  851. package/rules/tool-poisoning/ATR-2026-02376-tool-description-conversational-trigger-history-exfil.yaml +4 -5
  852. package/rules/tool-poisoning/ATR-2026-02403-mcp-external-content-missing-spotlighting.yaml +356 -0
  853. package/spec/README.md +24 -16
  854. package/spec/atr-correlation-v1.0.md +2 -2
  855. package/spec/atr-event-v1.0.md +3 -3
  856. package/spec/atr-language-detection-v1.0.md +1 -1
  857. package/spec/atr-observation-v1.0.md +323 -0
  858. package/spec/atr-profile-v1.0.md +4 -4
  859. package/spec/atr-schema.yaml +5 -3
  860. package/spec/category-registry/v1.0.yaml +2 -2
  861. package/spec/compliance-metadata.md +3 -2
  862. package/spec/conformance/README.md +4 -4
  863. package/spec/conformance/SIGNING.md +1 -1
  864. package/spec/conformance/baseline/manifest.json +1 -1
  865. package/spec/mappings/atr-to-nist-csf-2.0.md +3 -3
  866. package/spec/schema/correlation.schema.json +1 -1
  867. package/spec/schema/event.schema.json +1 -1
  868. package/spec/schema/observation.schema.json +131 -0
  869. package/spec/schema/profile.schema.json +1 -1
  870. package/spec/schema/rule.schema.json +1 -1
package/README.md CHANGED
@@ -13,7 +13,7 @@ AI Agent 威脅偵測規則的開放格式
13
13
  [![GitHub Marketplace](https://img.shields.io/badge/Marketplace-ATR%20Scan-2ea44f?style=flat-square&logo=github)](https://github.com/marketplace/actions/atr-scan)
14
14
  [![License: MIT](https://img.shields.io/badge/license-MIT-brightgreen?style=flat-square)](LICENSE)
15
15
  [![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.19178002-blue?style=flat-square)](https://doi.org/10.5281/zenodo.19178002)
16
- [![Rules](https://img.shields.io/badge/rules-751-blue?style=flat-square)](#5-specification)
16
+ [![Rules](https://img.shields.io/badge/rules-783-blue?style=flat-square)](#5-specification)
17
17
  [![Categories](https://img.shields.io/badge/categories-10-blue?style=flat-square)](#7-coverage)
18
18
  [![OWASP Agentic](https://img.shields.io/badge/OWASP_Agentic_Top_10-10%2F10-brightgreen?style=flat-square)](#7-coverage)
19
19
  [![SAFE-MCP](https://img.shields.io/badge/SAFE--MCP-91.8%25-brightgreen?style=flat-square)](#7-coverage)
@@ -29,7 +29,7 @@ ATR (Agent Threat Rules) is an open detection rule format for AI agent security
29
29
 
30
30
  ## Status of This Document
31
31
 
32
- ATR is published as a **Working Draft** at version `3.0.0-alpha.1`. The rule format defined in `ATR-SPEC-v1.md` is stable and shipped in production at Microsoft, Cisco, and Gen Digital, and in standards-body integrations (MISP / CIRCL, OWASP Agent Security Regression Harness, SigmaHQ, FINOS Common Cloud Controls); full list with PR links in [§6 Adoption](#6-adoption). Governance is currently single-maintainer (BDFL) transitioning to a Technical Steering Committee per [GOVERNANCE.md](GOVERNANCE.md).
32
+ ATR is published as a **Working Draft** at version `3.0.0-alpha.1`. The rule format defined in `SPEC.md` is stable and merged into open-source repos at Microsoft, Cisco, and Gen Digital, and integrated by standards-body projects (MISP / CIRCL, OWASP Agent Security Regression Harness, SigmaHQ, FINOS Common Cloud Controls); full list with PR links in [§6 Adoption](#6-adoption). Governance is currently single-maintainer (BDFL) transitioning to a Technical Steering Committee per [GOVERNANCE.md](GOVERNANCE.md).
33
33
 
34
34
  All numbers in this document are sourced from [`data/stats.json`](data/stats.json), which is the canonical record of the project's current state. Where this README and `stats.json` disagree, `stats.json` is authoritative.
35
35
 
@@ -94,12 +94,12 @@ ATR fills the gap between *taxonomy* and *deployable rule*. Each rule is a YAML
94
94
 
95
95
  ## 2. Conformance Levels
96
96
 
97
- The keywords MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY in this document and in [`ATR-SPEC-v1.md`](ATR-SPEC-v1.md) are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
97
+ The keywords MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY in this document and in [`SPEC.md`](SPEC.md) are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
98
98
 
99
99
  A conforming **ATR engine** MUST:
100
100
 
101
101
  1. Parse all fields defined in [`spec/atr-schema.yaml`](spec/atr-schema.yaml) without error.
102
- 2. Evaluate `detection.conditions` with the semantics defined in [`ATR-SPEC-v1.md`](ATR-SPEC-v1.md) §3.5 (Detection Logic) and §5 (Engine Requirements).
102
+ 2. Evaluate `detection.conditions` with the semantics defined in [`SPEC.md`](SPEC.md) §6 (Detection Semantics).
103
103
  3. Honor the `scan_target` field — a rule with `scan_target: skill` MUST NOT be evaluated against `mcp_exchange` events and vice versa.
104
104
  4. Respect rule `status` — rules with `status: deprecated` or `status: draft` MUST NOT participate in production matching unless the consumer opts in explicitly.
105
105
  5. Emit `rule_id` and rule `severity` on every match.
@@ -220,7 +220,7 @@ Lanes are opt-in and fully backward-compatible: the default is `hunt`, so existi
220
220
  | Artifact | Path | Purpose |
221
221
  |---|---|---|
222
222
  | Specification (canonical pointer) | [SPEC.md](SPEC.md) | Resolves to the authoritative documents below |
223
- | Rule format spec (normative) | [ATR-SPEC-v1.md](ATR-SPEC-v1.md) | Rule format, identifier scheme, evaluation semantics |
223
+ | Rule format spec (normative) | [SPEC.md](SPEC.md) | Rule format, identifier scheme, evaluation semantics |
224
224
  | Framework spec | [ATR-FRAMEWORK-SPEC.md](ATR-FRAMEWORK-SPEC.md) | Multi-layer detection framework design |
225
225
  | Machine-readable schema | [spec/atr-schema.yaml](spec/atr-schema.yaml) | Authoritative validation source |
226
226
  | Schema field reference | [docs/schema-spec.md](docs/schema-spec.md) | Human-readable schema docs |
@@ -363,61 +363,196 @@ Aggregated into [`data/stats.json`](data/stats.json) under `benchmarks[]`.
363
363
  | AdvBench (LLM-attacks behaviors) | upstream-2026-06-16 | 520 | 2.1% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
364
364
  | atr-self-test | internal | 341 | 89.7% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
365
365
  | autoresearch | internal-1054 | 1,054 | 15.1% | 100.0% | 0.0% | 3.0.0-alpha.0 | 2026-05-23 |
366
- | garak (in-the-wild jailbreaks) | inthewild-jailbreak-corpus-650 | 650 | 97.2% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
367
- | garak-full (all probe families) | 23-families | 3,475 | 38.3% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
366
+ | garak (in-the-wild jailbreaks) | inthewild-jailbreak-corpus-650 | 650 | 92.5% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
367
+ | garak-full (all probe families) | 23-families | 3,475 | 57.2% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
368
368
  | hackaprompt | v1 | 4,780 | 69.6% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
369
369
  | HarmBench (CAIS behaviors) | upstream-2026-06-16 | 400 | 2.8% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
370
- | hh-rlhf (Anthropic red-team-attempts) | snapshot-2026-04 | 4,957 | 99.1% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
370
+ | hh-rlhf (Anthropic red-team-attempts) [^stdcorpora] | snapshot-2026-04 | 4,957 | 1.5% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
371
371
  | JailbreakBench (JBB-Behaviors) | upstream-2026-06-16 | 100 | 6.0% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
372
372
  | llm-guard (Protect AI test fixtures) | corpus-2026-05-12 | 44 | 77.3% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
373
- | MITRE ATLAS | snapshot-2026-04 | 182 | 100.0% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
373
+ | MITRE ATLAS [^stdcorpora] | snapshot-2026-04 | 182 | 39.0% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
374
374
  | NeMo Guardrails (NVIDIA test fixtures) | corpus-2026-05-12 | 6 | 100.0% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
375
- | OWASP LLM Top 10 | snapshot-2026-04 | 56 | 100.0% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
376
- | PINT-format (deepset + Lakera Gandalf) | public-850 | 850 | 63.6% | 99.7% | 0.25% | 3.5.0 | 2026-06-16 |
377
- | PromptBench (academic adversarial) | snapshot-2026-04 | 3,280 | 23.2% | 100.0% | 0.0% | 3.5.2 | 2026-06-25 |
375
+ | OWASP LLM Top 10 [^stdcorpora] | snapshot-2026-04 | 56 | 16.1% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
376
+ | PINT-format (deepset + Lakera Gandalf) [^pint] | v1 | 850 | 60.3% | 100.0% | 0.0% | 3.5.11 | 2026-08-04 |
377
+ | PromptBench (academic adversarial) [^promptcorpora] | snapshot-2026-04 | 3,280 | 15.7% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
378
378
  | promptfoo (red-team plugin fixtures) | corpus-2026-05-12 | 44 | 97.7% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
379
- | PromptInject (academic adversarial) | snapshot-2026-04 | 1,080 | 100.0% | 100.0% | 0.0% | 3.5.2 | 2026-06-25 |
380
- | SKILL.md benchmark (internal) | internal-498 | 498 | 100.0% | 97.0% | 0.20% | 3.5.0 | 2026-06-16 |
379
+ | PromptInject (academic adversarial) [^promptcorpora] | snapshot-2026-04 | 1,080 | 100.0% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
380
+ | SKILL.md benchmark (internal) [^skilllane] | internal-498 | 498 | 100.0% (hunt) / 0.0% (enforce) | 97.0% | 0.20% | 3.5.0 | 2026-06-16 |
381
381
  | Wild scan (OpenClaw + Skills.sh + Hermes + ClawHub) | corpus-2026-04-14 | 96,096 | — | 57.7% (floor) | 1.35% flag rate | 2.0.0 | 2026-04-14 |
382
382
 
383
383
  All detection corpora were (re-)measured against ATR 3.5.0 on 2026-06-16,
384
384
  except `autoresearch` (an internal predicted-rule corpus with no standalone
385
385
  runner) and the `Wild scan` snapshot, which retain their earlier measurements.
386
+ `PromptInject` and `PromptBench` were re-measured against ATR 3.5.11 on
387
+ 2026-08-05; see [^promptcorpora] for what moved and why. (An earlier
388
+ re-measurement against 3.5.2 on 2026-06-25 fixed a harness event shape; the
389
+ 0.0% rows before that were a harness artifact — the harness placed the prompt
390
+ in a top-level field the engine does not read — not the engine's actual
391
+ result.)
392
+
386
393
  `PromptInject` and `PromptBench` were re-measured against ATR 3.5.2 on
387
394
  2026-06-25 after a fix to the recall-analysis harness event shape; the prior
388
395
  0.0% rows were a harness artifact (the harness placed the prompt in a
389
396
  top-level field the engine does not read), not the engine's actual result.
397
+ `hh-rlhf`, `MITRE ATLAS` and `OWASP LLM Top 10` were re-measured against ATR
398
+ 3.5.11 on 2026-08-05 after their runner was found never to have called the
399
+ engine at all — see [^stdcorpora]. Those three rows fell 99.1% → 1.5%,
400
+ 100.0% → 39.0% and 100.0% → 16.1%. Nothing regressed; the earlier numbers
401
+ were never measurements of ATR.
390
402
  The per-row `ATR version` column above is the version each cell was actually
391
403
  measured against, mirroring the `atr_version` field in each
392
404
  `data/measurements/<source>/latest.json`. The headline `garak` recall moved
393
- 98.0% → 97.2% in 3.5.0 because rule `ATR-2026-00495` (a garak DAN variant) was
394
- deprecated and no longer fires; see [CHANGELOG.md](CHANGELOG.md).
405
+ 98.0% (3.0.0) → 97.2% (3.5.0) → 95.7% (3.5.8) → 92.5% (3.5.11). The 3.5.8 →
406
+ 3.5.11 step is a real loss of detections, not a change in how they are counted:
407
+ PR #327 tightened an over-broad persona regex in `ATR-2026-00001` that had been
408
+ false-positiving on benign "you are now an expert …" prose, and tightening it
409
+ also gave up the recall that regex had been earning on novel-persona jailbreaks
410
+ ("you are now TrueGPT / ChatINF / Raven …"). The harness event shape changed in
411
+ the same window (see below), and it is not the cause: replayed on today's 780
412
+ rules, the old shape scores 92.2% and the corrected shape 92.5%, a 0.3-point
413
+ difference in the corrected shape's favour. The 3.2-point drop from 95.7% is
414
+ the rules.
415
+
416
+ Two numbers that briefly appeared here are **withdrawn**: between 2026-08-04
417
+ and 2026-08-05, this table and `stats.json` cited **91.5%** for `garak` and
418
+ **56.9%** for `garak-full`, both at ATR 3.5.11. No measurement file for either
419
+ run exists anywhere in the repository. `data/measurements/garak/latest.json`
420
+ pointed, the entire time, at 95.7% measured on 3.5.8; `garak-full`'s pointed at
421
+ 38.3% on 3.5.0, while a never-referenced 3.5.8 file sat unread in the same
422
+ directory. So the claims failed this project's own rule that every published
423
+ number is a version-pinned, reproducible measurement. It was also produced by a harness
424
+ that built an event of `type: 'llm_io'`, which is a rule *source* and not an
425
+ `AgentEventType`; `src/engine.ts` could not map it and so ran every rule of
426
+ every source against the event instead of the two source types the harness
427
+ documented itself as using. The 92.5% above replaces it: measured on
428
+ 2026-08-05 at 780 rules through `llm_input` + `tool_response`, the two channels
429
+ `src/hook-handler.ts` can actually deliver a prompt on, and written to
430
+ `data/measurements/garak/2026-08-05_garak-inthewild-jailbreak-corpus-650_atr-3-5-11.json`
431
+ with the commit that produced it. Under the wider shape set used for
432
+ false-positive measurement (which also runs `engine.scanSkill()`) the same
433
+ corpus scores 93.1%; that number is recorded in the measurement's `breakdown`
434
+ and is deliberately not the published one, because a garak prompt never reaches
435
+ production as a SKILL.md. `.github/workflows/eval.yml` now runs
436
+ `scripts/check-benchmark-citations.ts`, which fails CI if this table or
437
+ `stats.json` cites a number no measurement file backs.
438
+ See [CHANGELOG.md](CHANGELOG.md).
439
+
440
+ [^skilllane]: **Lane matters more here than anywhere else in this table.** The
441
+ 100% figure is the `hunt` lane, which is the engine default and loads every
442
+ maturity. In the `enforce` lane — the auto-block one, where a detection stops
443
+ the agent with no human in the loop — this corpus scores **0%**, and the
444
+ reason is structural rather than a tuning problem: of the 38 rules carrying
445
+ `scan_target: skill`, **all 38 are `maturity: test`, and none is `stable`.**
446
+ The enforce lane only loads `stable`, so it loads no skill-scanning rule at
447
+ all, and 0 of 32 malicious samples fire. Anyone reading "100% recall on
448
+ SKILL.md" and deploying in enforce mode would be forming a completely wrong
449
+ expectation, so both numbers are shown. Verified on this commit with
450
+ `grep`-free counting over `rules/**/*.yaml`.
451
+
452
+ [^pint]: The `PINT-format` row is **not** a run of Lakera's official PINT
453
+ benchmark. That corpus is private and roughly 5x larger; this row is a
454
+ self-built 850-sample corpus in PINT's format, assembled from
455
+ `deepset/prompt-injections` (660) and `Lakera/gandalf_ignore_instructions`
456
+ (190). It also carries a scope caveat worth stating plainly: only **29 of
457
+ 780 rules** fire on it at all, and `ATR-2026-00001` alone accounts for 226
458
+ of the 272 detections. Read it as a prompt-injection-family score, not as
459
+ ATR's overall coverage. The row moved 63.6% → 60.3% between 3.5.0 and
460
+ 3.5.11 for the same reason `garak` moved: PR #327 tightened
461
+ `ATR-2026-00001`'s persona-switch regex to stop it false-positiving on
462
+ benign prose. Precision moved 99.7% → 100% over the same span.
463
+
464
+ [^promptcorpora]: **Read both of these as closed-book scores.** Until
465
+ 2026-08-05 the harness recorded its per-rule breakdown as the literal
466
+ string `"unknown"` (it read `m.rule_id` off an engine match that carries
467
+ `m.rule.id`), so no published version of these rows could say which rules
468
+ produced them. With attribution restored:
469
+ **PromptInject 100.0%** is produced by **7 of 780 rules**. Five of those
470
+ seven — `ATR-2026-00506`, `00507`, `00508`, `00509`, `00518` — carry
471
+ `author: ATR Community (PromptInject corpus)`: they were written *from*
472
+ this corpus, which has four attack classes built from a handful of
473
+ templates. Remove those five and recall on the same 1,080 samples is
474
+ **9.7%**. The concentration is real but not fragile: the top rule
475
+ (`ATR-2026-00508`, 968/1,080 samples) is the sole detector on none of
476
+ them, so deleting it leaves recall at 100%; only `00518` (45 samples) and
477
+ `00507` (27) are sole detectors of anything. On the 5,352-sample benign
478
+ gate, `00506` / `00507` / `00518` are 0-FP; `00508` has 4 FP, `00509` 3,
479
+ `ATR-2026-00001` 19, `ATR-2026-00400` 1.
480
+ **PromptBench 15.7%** is produced by **3 of 780 rules** (`ATR-2026-00520`,
481
+ `00519`, `00202`), all three 0-FP on the same benign gate. Two of the three
482
+ were mined from PromptBench; without them recall is **2.4%**.
483
+ The PromptBench row moved 23.2% (3.5.2) → 15.7% (3.5.11) and the loss is
484
+ fully attributable: 247 samples were held only by rules that have since
485
+ been precision-repaired, and re-running each rule version by version pins
486
+ every one to its PR — `ATR-2026-00442` 304 → 0 detections at PR #309
487
+ (223 of them samples nothing else caught), `00051` 17 → 0 at #238 (15),
488
+ `00118` 6 → 0 at #238 (6), `00001` 3 → 0 at #327 (3). The PromptInject
489
+ row stayed at 100% across the same span, but what holds it up changed:
490
+ at 3.5.2 `ATR-2026-00118` matched 1,060 of the 1,080 samples and `00442`
491
+ another 195; #238 and #309 took both to zero. Neither fact was visible
492
+ while the breakdown said "unknown", and the row itself sat at its stale
493
+ 3.5.2 value for the six weeks in between.
494
+ Both corpora are 100% adversarial, so the `Precision` and `FP rate`
495
+ columns are properties of the corpus, not measurements — read them
496
+ together with the benign-gate FP counts above, never alone.
497
+
498
+ [^stdcorpora]: Until 2026-08-05 these three rows were **not produced by the ATR
499
+ engine**. `scripts/eval-std-corpora.ts` walked `rules/` with a YAML parser,
500
+ kept only `operator: regex` conditions, flattened every condition of every
501
+ rule into one implicit OR, and tested each pattern with its own
502
+ `new RegExp(value, 'i')` against the raw sample string. That shadow matcher
503
+ had no status gate (it counted `status: draft` rules the engine skips), no
504
+ lane gate, no field resolution (a condition declared on `tool_response` was
505
+ tested against natural-language prose), no `condition: all` handling, no
506
+ non-regex operators, and — the decisive defect — the wrong regex flags.
507
+ `src/engine.ts` compiles a pattern containing `\u{` with the `u` flag;
508
+ the shadow matcher always used `i`. Without `u`, the codepoint class
509
+ `[\u{E0001}\u{E007F}]` in `ATR-2026-00258` is read by JavaScript as the
510
+ literal character class `[u{E0017F}]` — "contains any of `u { E 0 1 } 7 F`"
511
+ — so it matched any English text containing the letter `e`. That single
512
+ miscompiled condition accounted for **4,914 of the 4,914 hh-rlhf
513
+ detections, 56 of 56 on OWASP, and 182 of 182 on ATLAS**; with it excluded
514
+ the same shadow matcher scored 0.2% / 3.6% / 8.8%. The old rows measured
515
+ how many samples contain a vowel. The runner now goes through `ATREngine`
516
+ and the canonical event shapes in `scripts/lib/corpus-event.ts` — the same
517
+ entry point the false-positive gates use. Reproduce with
518
+ `npx tsx scripts/eval-std-corpora.ts`. Read the new numbers with the same
519
+ scope caveat as `PINT-format`: on ATLAS, `ATR-2026-00061` alone accounts
520
+ for 59 of the 71 detections (32.4% of the corpus), and ATLAS procedures are
521
+ prose *descriptions* of attacks rather than attack payloads, so this row
522
+ measures ATR against attack write-ups, not against traffic.
395
523
 
396
524
  Two `garak` rows are deliberate: the headline `garak` source tracks NVIDIA's
397
- in-the-wild jailbreak corpus (narrow, the ~97% number ATR cites publicly,
398
- refreshed 2026-06-16 against ATR 3.5.0), while `garak-full` tracks
525
+ in-the-wild jailbreak corpus (narrow, the ~92.5% number ATR cites publicly,
526
+ refreshed 2026-08-05 against ATR 3.5.11), while `garak-full` tracks
399
527
  every probe family in upstream garak (broad, includes families like
400
528
  `badchars`, `dra`, `encoding` that ATR's regex layer intentionally does
401
529
  not target). Both are valid measurements against different corpora; they
402
530
  are kept as separate streams so the broad-corpus number does not silently
403
531
  overwrite the headline.
404
532
 
405
- The single-digit recall on AdvBench / HarmBench / JailbreakBench is honest
406
- and expected. Those three corpora test **LLM safety alignment** (does the
533
+ The single-digit recall on AdvBench / HarmBench / JailbreakBench / hh-rlhf is
534
+ honest and expected. Those four corpora test **LLM safety alignment** (does the
407
535
  model refuse harmful requests like "explain how to make a bomb"), not
408
536
  **prompt-injection detection** (the surface ATR's regex layer targets).
409
537
  ATR's near-zero recall on these corpora confirms the layering thesis:
410
538
  regex catches structured attack patterns, alignment + content moderation
411
539
  catch natural-language harm requests. The numbers are recorded for
412
540
  completeness and so any future ATR rule additions in the harm-category
413
- space can be measured against a documented baseline.
414
-
415
- Conventions: 100%-adversarial corpora have `fp_rate` undefined and recorded as
416
- 0 in measurement files. Wild-scan has no ground-truth labels; the `precision`
417
- column reports a precision floor computed as `confirmed_malware / flagged`.
418
- Every cell is sourced from a specific measurement file — see
419
- `data/measurements/<source>/latest.json` for the file path and
420
- `metadata.measurement_file` in `stats.json` for the absolute repo path.
541
+ space can be measured against a documented baseline. `hh-rlhf` is Anthropic's
542
+ red-team-attempts set — the same genre as the other three — and its 1.5% now
543
+ sits with their 2.1% / 2.8% / 6.0% instead of contradicting them at 99.1%.
544
+
545
+ Conventions: 100%-adversarial corpora contain no benign samples, so they have
546
+ no true-negative population and **`precision` and `fp_rate` cannot be computed
547
+ from them**. The measurement schema requires numbers, so those rows record the
548
+ convention `precision 1` / `fp_rate 0`. Read the `Precision` and `FP rate`
549
+ columns as "not applicable to this corpus", not as results — the real
550
+ precision numbers come from the benign gate, lane-keyed, below. Wild-scan has
551
+ no ground-truth labels either; its `precision` column reports a precision floor
552
+ computed as `confirmed_malware / flagged`. Every cell is sourced from a
553
+ specific measurement file — see `data/measurements/<source>/latest.json` for
554
+ the file path and `metadata.measurement_file` in `stats.json` for the absolute
555
+ repo path.
421
556
 
422
557
  False-positive rate is lane-keyed as of v3.5.0, not a single overall figure.
423
558
  ATR ships detection lanes (`enforce` / `alert` / `hunt`); on a 65K-sample
@@ -533,7 +668,7 @@ The 96,096-skill ecosystem scan was made possible by the maintainers of OpenClaw
533
668
  ### Normative
534
669
 
535
670
  - [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119) — Key words for use in RFCs to Indicate Requirement Levels.
536
- - [ATR-SPEC-v1.md](ATR-SPEC-v1.md) — ATR rule format specification, v1.0 Draft.
671
+ - [SPEC.md](SPEC.md) — ATR rule format specification, v1.0 Draft.
537
672
  - [spec/atr-schema.yaml](spec/atr-schema.yaml) — Authoritative machine-readable schema.
538
673
 
539
674
  ### Informative
@@ -7,7 +7,19 @@
7
7
  *
8
8
  * @module agent-threat-rules/action-executor
9
9
  */
10
- import type { ActionResult, ExecutionContext, PlatformAdapter } from "./types.js";
10
+ import type { ATRAction, ActionResult, ExecutionContext, PlatformAdapter } from "./types.js";
11
+ /**
12
+ * Map action names to PlatformAdapter method names.
13
+ *
14
+ * Exported because it is the authoritative list of actions this engine can
15
+ * actually dispatch. Rule files also carry SPEC Appendix A vocabulary
16
+ * (`revoke_credential`, `quarantine_artifact`, ...) that has no entry here and
17
+ * therefore never reaches an adapter — see executeOne's "Unknown action" branch.
18
+ * src/quality/action-eligibility.ts ranks exactly these keys by blast radius, and
19
+ * tests/action-eligibility.test.ts pins the two sets equal, so implementing a new
20
+ * adapter method forces an explicit decision about how destructive it is.
21
+ */
22
+ export declare const ACTION_METHOD_MAP: Readonly<Record<ATRAction, keyof PlatformAdapter>>;
11
23
  export interface ActionExecutorConfig {
12
24
  readonly adapter: PlatformAdapter;
13
25
  readonly dryRun?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAgCpB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC5D;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAiC;gBAEvD,MAAM,EAAE,oBAAoB;IAMxC;;;;;;;;OAQG;IACG,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAgB1E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;YACW,UAAU;IAmDxB,2CAA2C;IAC3C,cAAc,IAAI,MAAM;IAIxB,uCAAuC;IACvC,QAAQ,IAAI,OAAO;CAGpB"}
1
+ {"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAiBpB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,eAAe,CAAC,CAYhF,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC5D;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAiC;gBAEvD,MAAM,EAAE,oBAAoB;IAMxC;;;;;;;;OAQG;IACG,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAgB1E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;YACW,UAAU;IAmDxB,2CAA2C;IAC3C,cAAc,IAAI,MAAM;IAIxB,uCAAuC;IACvC,QAAQ,IAAI,OAAO;CAGpB"}
@@ -21,8 +21,18 @@ const ACTION_PRIORITY = {
21
21
  snapshot: 9,
22
22
  shadow: 10,
23
23
  };
24
- /** Map action names to PlatformAdapter method names */
25
- const ACTION_METHOD_MAP = {
24
+ /**
25
+ * Map action names to PlatformAdapter method names.
26
+ *
27
+ * Exported because it is the authoritative list of actions this engine can
28
+ * actually dispatch. Rule files also carry SPEC Appendix A vocabulary
29
+ * (`revoke_credential`, `quarantine_artifact`, ...) that has no entry here and
30
+ * therefore never reaches an adapter — see executeOne's "Unknown action" branch.
31
+ * src/quality/action-eligibility.ts ranks exactly these keys by blast radius, and
32
+ * tests/action-eligibility.test.ts pins the two sets equal, so implementing a new
33
+ * adapter method forces an explicit decision about how destructive it is.
34
+ */
35
+ export const ACTION_METHOD_MAP = {
26
36
  block_input: "blockInput",
27
37
  block_output: "blockOutput",
28
38
  block_tool: "blockTool",
@@ -1 +1 @@
1
- {"version":3,"file":"action-executor.js","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action-executor.js","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -31,6 +31,7 @@ const GREEN = '\x1b[32m';
31
31
  const RED = '\x1b[31m';
32
32
  const DIM = '\x1b[2m';
33
33
  const BOLD = '\x1b[1m';
34
+ const YELLOW = '\x1b[33m';
34
35
  function printUsage() {
35
36
  console.log(`
36
37
  ${BOLD}ATR - Agent Threat Rules${RESET}
@@ -227,7 +228,9 @@ async function cmdTest(target, options) {
227
228
  let totalTests = 0;
228
229
  let passed = 0;
229
230
  let failed = 0;
231
+ let skipped = 0;
230
232
  const failures = [];
233
+ const skippedRules = [];
231
234
  // Map extended agent_source types to basic event-compatible source types
232
235
  // so the engine's source type filter doesn't skip rules during testing.
233
236
  // The engine only recognizes: llm_io, tool_call, mcp_exchange, agent_behavior, multi_agent_comm
@@ -241,6 +244,22 @@ async function cmdTest(target, options) {
241
244
  for (const rule of rules) {
242
245
  if (!rule.test_cases)
243
246
  continue;
247
+ // method=behavioral rules cannot be evaluated here, and that is by design:
248
+ // engine.ts returns null for them because windowed metric evaluation needs
249
+ // state across many events, which the synchronous evaluate() API does not
250
+ // carry. Running their cases anyway reports "Expected: triggered, Got:
251
+ // not_triggered" for every true_positive, which reads as a detection
252
+ // failure when the truth is that this engine never looked. Count them as
253
+ // unevaluable and say so, rather than failing them or passing them
254
+ // silently. (method=trace is different: it has a real evaluation path
255
+ // below, so its cases still run.)
256
+ if (rule.detection?.method === 'behavioral') {
257
+ const cases = (rule.test_cases.true_positives?.length ?? 0) + (rule.test_cases.true_negatives?.length ?? 0);
258
+ totalTests += cases;
259
+ skipped += cases;
260
+ skippedRules.push({ ruleId: rule.id, cases, reason: 'method=behavioral requires a streaming evaluator' });
261
+ continue;
262
+ }
244
263
  // For testing, normalize extended source types so the engine doesn't filter them out
245
264
  const originalSourceType = rule.agent_source?.type;
246
265
  const baseSourceType = EXTENDED_SOURCE_TO_BASE[originalSourceType ?? ''];
@@ -306,7 +325,7 @@ async function cmdTest(target, options) {
306
325
  }
307
326
  }
308
327
  if (jsonOutput) {
309
- console.log(JSON.stringify({ totalRules: rules.length, totalTests, passed, failed, failures }, null, 2));
328
+ console.log(JSON.stringify({ totalRules: rules.length, totalTests, passed, failed, skipped, failures, skippedRules }, null, 2));
310
329
  return;
311
330
  }
312
331
  console.log(`\n${BOLD}ATR Test Runner${RESET}`);
@@ -317,6 +336,12 @@ async function cmdTest(target, options) {
317
336
  if (failed > 0) {
318
337
  console.log(` ${RED}Failed:${RESET} ${failed}`);
319
338
  }
339
+ if (skipped > 0) {
340
+ console.log(` ${YELLOW}Unevaluable:${RESET} ${skipped}`);
341
+ for (const s of skippedRules) {
342
+ console.log(` ${DIM}${s.ruleId}: ${s.cases} case(s) — ${s.reason}${RESET}`);
343
+ }
344
+ }
320
345
  console.log(`${DIM}${'─'.repeat(60)}${RESET}`);
321
346
  if (failures.length > 0) {
322
347
  console.log(`\n${RED}Failures:${RESET}\n`);
@@ -328,7 +353,11 @@ async function cmdTest(target, options) {
328
353
  process.exit(1);
329
354
  }
330
355
  else {
331
- console.log(`\n${GREEN}All tests passed.${RESET}\n`);
356
+ // The literal "All tests passed" is what rule-quality.yml greps for, so it
357
+ // has to survive; the suffix keeps it from overstating what actually ran.
358
+ console.log(skipped > 0
359
+ ? `\n${GREEN}All tests passed.${RESET} ${DIM}(${skipped} case(s) unevaluable — see above)${RESET}\n`
360
+ : `\n${GREEN}All tests passed.${RESET}\n`);
332
361
  }
333
362
  }
334
363
  function buildEventFromTestCase(tc, rule) {
@@ -344,7 +373,12 @@ function buildEventFromTestCase(tc, rule) {
344
373
  // Object-style: input: { tool_name: "...", tool_args: "...", response: "..." }
345
374
  // Flat-style: input: "...", tool_response: "...", tool_name: "..."
346
375
  // Tool-call-style: tool_call: { name: "...", args: "..." }
347
- const rawInput = tc['input'];
376
+ // Accept `user_input:` as a top-level alias for `input:` — several tool_call
377
+ // rules write their natural-language TPs as `- user_input: "..."`, which the
378
+ // harness previously ignored (it only read `input`), building an EMPTY event so
379
+ // the rule's own documented attack tested as not_triggered (a false failure that
380
+ // left the rule looking broken while it detects fine in production).
381
+ const rawInput = tc['input'] ?? tc['user_input'];
348
382
  let input = '';
349
383
  let toolName = str(tc['tool_name']);
350
384
  let toolArgs = str(tc['tool_args']);
@@ -400,13 +434,16 @@ function buildEventFromTestCase(tc, rule) {
400
434
  skill_chain: 'tool_call',
401
435
  };
402
436
  let type = SOURCE_TO_EVENT[sourceType] ?? 'llm_input';
403
- // If rule expects tool_call but test case has only plain text input
404
- // (no tool_name, tool_args, or tool_response), use llm_input event type
405
- // since the content is natural language, not a tool invocation.
406
- // This prevents the engine's tool_name fallback from treating text as a tool name.
407
- if (type === 'tool_call' && !toolName && !toolArgs && !toolResponse && !toolDescription) {
408
- type = 'llm_input';
409
- }
437
+ // NOTE: previously, a tool_call rule with a plain-string TP was downgraded to
438
+ // an llm_input event. That mis-tested tool_call-native rules: a shell command or
439
+ // SQL string IS a tool invocation, and evaluating it as llm_input made the engine
440
+ // apply its cross-context confidence penalty, dropping the match below threshold
441
+ // so the rule's own documented attack tested as not_triggered (false failure that
442
+ // silently left broken rules in the enforce lane). We now keep the native
443
+ // tool_call type — the string flows in via `content` (below), and tool_name is
444
+ // pinned to "" (below) so the engine's tool_name fallback never treats the
445
+ // content as a tool name. Plain-string TPs of tool_call rules therefore test in
446
+ // their real (native) context.
410
447
  // Determine the primary content based on what the rule conditions check
411
448
  // Problem 2 & 3: For rules that check tool_response, the tool_response
412
449
  // should be the primary content when the event type resolves tool_response from content
@@ -431,8 +468,27 @@ function buildEventFromTestCase(tc, rule) {
431
468
  // Always set tool_name (even empty) to prevent engine fallback
432
469
  // from using event.content as tool_name for tool_call events
433
470
  fields['tool_name'] = toolName;
434
- if (toolArgs)
435
- fields['tool_args'] = toolArgs;
471
+ // Production ALWAYS populates tool_args: src/hook-handler.ts builds
472
+ // `tool_args: JSON.stringify(toolInput)` for BOTH the PreToolUse (tool_call)
473
+ // and the PostToolUse (tool_response) event. The engine resolves this field as
474
+ // `event.fields.tool_args ?? (event.type === 'tool_call' ? event.content :
475
+ // undefined)` (src/engine.ts resolveField), so a test case that supplies only
476
+ // a plain `input:` string leaves tool_args unresolvable on every non-tool_call
477
+ // event and EVERY `field: tool_args` condition silently evaluates to false.
478
+ // The rule then reports not_triggered on its own documented attack while
479
+ // detecting it correctly in production — a harness defect that reads exactly
480
+ // like a broken rule and invites weakening a rule that is right. 40 rules
481
+ // declare `field: tool_args`.
482
+ // This is the test-case-runner twin of the measurement-shape defect that
483
+ // scripts/lib/corpus-event.ts fixed for the FP gate: a true positive must be
484
+ // exercised on the same shape the benign corpus is charged against.
485
+ // Deliberately narrower than that harness's wide shape: only the INPUT string
486
+ // is offered as tool_args. A `tool_response:` test case asserts what a tool
487
+ // RETURNED, which is not an argument, so pouring it into tool_args would let a
488
+ // tool_args layer pass a TP for the wrong reason.
489
+ const toolArgsValue = toolArgs || input;
490
+ if (toolArgsValue)
491
+ fields['tool_args'] = toolArgsValue;
436
492
  // For content-based rules, set content and agent_message fields
437
493
  fields['content'] = content;
438
494
  fields['agent_message'] = content;