agent-threat-rules 3.5.12 → 4.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (883) hide show
  1. package/CHANGELOG.md +1117 -0
  2. package/DISCLOSURE +85 -0
  3. package/README.md +189 -51
  4. package/dist/action-executor.d.ts +31 -0
  5. package/dist/action-executor.d.ts.map +1 -1
  6. package/dist/action-executor.js +29 -0
  7. package/dist/action-executor.js.map +1 -1
  8. package/dist/cli/scan-handler.d.ts +9 -0
  9. package/dist/cli/scan-handler.d.ts.map +1 -1
  10. package/dist/cli/scan-handler.js +34 -12
  11. package/dist/cli/scan-handler.js.map +1 -1
  12. package/dist/cli/tc-pipeline.d.ts +20 -0
  13. package/dist/cli/tc-pipeline.d.ts.map +1 -1
  14. package/dist/cli/tc-pipeline.js +84 -15
  15. package/dist/cli/tc-pipeline.js.map +1 -1
  16. package/dist/cli.d.ts +2 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +149 -176
  19. package/dist/cli.js.map +1 -1
  20. package/dist/enforcement.d.ts +233 -0
  21. package/dist/enforcement.d.ts.map +1 -0
  22. package/dist/enforcement.js +316 -0
  23. package/dist/enforcement.js.map +1 -0
  24. package/dist/engine.d.ts +41 -0
  25. package/dist/engine.d.ts.map +1 -1
  26. package/dist/engine.js +44 -5
  27. package/dist/engine.js.map +1 -1
  28. package/dist/hook-handler.d.ts +98 -3
  29. package/dist/hook-handler.d.ts.map +1 -1
  30. package/dist/hook-handler.js +119 -12
  31. package/dist/hook-handler.js.map +1 -1
  32. package/dist/index.d.ts +4 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +11 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/mcp-server.d.ts +13 -2
  37. package/dist/mcp-server.d.ts.map +1 -1
  38. package/dist/mcp-server.js +22 -5
  39. package/dist/mcp-server.js.map +1 -1
  40. package/dist/tc-reporter.d.ts +22 -3
  41. package/dist/tc-reporter.d.ts.map +1 -1
  42. package/dist/tc-reporter.js +36 -3
  43. package/dist/tc-reporter.js.map +1 -1
  44. package/dist/testcase-event.d.ts +24 -0
  45. package/dist/testcase-event.d.ts.map +1 -0
  46. package/dist/testcase-event.js +193 -0
  47. package/dist/testcase-event.js.map +1 -0
  48. package/dist/types.d.ts +13 -2
  49. package/dist/types.d.ts.map +1 -1
  50. package/package.json +13 -4
  51. package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +81 -137
  52. package/rules/agent-manipulation/ATR-2026-00032-goal-hijacking.yaml +30 -111
  53. package/rules/agent-manipulation/ATR-2026-00074-cross-agent-privilege-escalation.yaml +30 -110
  54. package/rules/agent-manipulation/ATR-2026-00076-inter-agent-message-spoofing.yaml +24 -104
  55. package/rules/agent-manipulation/ATR-2026-00077-human-trust-exploitation.yaml +38 -131
  56. package/rules/agent-manipulation/ATR-2026-00108-consensus-sybil-attack.yaml +24 -91
  57. package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +20 -81
  58. package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +29 -95
  59. package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +20 -90
  60. package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +31 -106
  61. package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +25 -102
  62. package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +22 -94
  63. package/rules/agent-manipulation/ATR-2026-00164-skill-scope-hijack.yaml +44 -60
  64. package/rules/agent-manipulation/ATR-2026-00268-tense-framing-bypass.yaml +51 -112
  65. package/rules/agent-manipulation/ATR-2026-00269-fitd-escalation.yaml +45 -89
  66. package/rules/agent-manipulation/ATR-2026-00271-grandma-roleplay-jailbreak.yaml +49 -94
  67. package/rules/agent-manipulation/ATR-2026-00273-dan-developer-mode-persona.yaml +47 -91
  68. package/rules/agent-manipulation/ATR-2026-00287-threaten-json-coercive-output-threat.yaml +46 -93
  69. package/rules/agent-manipulation/ATR-2026-00288-false-premise-injection.yaml +44 -94
  70. package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +50 -98
  71. package/rules/agent-manipulation/ATR-2026-00302-anti-dan-inverted-filter-persona.yaml +51 -98
  72. package/rules/agent-manipulation/ATR-2026-00303-devmode-ranti-profanity-coercion.yaml +52 -101
  73. package/rules/agent-manipulation/ATR-2026-00304-chatgpt-image-unlocker-markdown-injection.yaml +53 -104
  74. package/rules/agent-manipulation/ATR-2026-00305-dan-mode-ablation-benchmark-coercion.yaml +48 -99
  75. package/rules/agent-manipulation/ATR-2026-00306-autodan-genetic-jailbreak-suffix.yaml +50 -103
  76. package/rules/agent-manipulation/ATR-2026-00307-inthewild-jailbreak-corpus-signature.yaml +53 -107
  77. package/rules/agent-manipulation/ATR-2026-00314-amoral-unfiltered-custom-persona-jailbreak.yaml +44 -94
  78. package/rules/agent-manipulation/ATR-2026-00317-free-of-restrictions-named-persona.yaml +44 -97
  79. package/rules/agent-manipulation/ATR-2026-00318-moralizing-rant-then-unfiltered-bypass.yaml +41 -90
  80. package/rules/agent-manipulation/ATR-2026-00319-developer-mode-dual-response-format.yaml +40 -88
  81. package/rules/agent-manipulation/ATR-2026-00320-opposite-day-boolean-opposite-machine.yaml +42 -91
  82. package/rules/agent-manipulation/ATR-2026-00322-fictional-world-format-override-jailbreak.yaml +41 -91
  83. package/rules/agent-manipulation/ATR-2026-00323-dual-persona-simulation-jailbreak.yaml +41 -91
  84. package/rules/agent-manipulation/ATR-2026-00324-neurosemantical-inversitis-disease-jailbreak.yaml +42 -103
  85. package/rules/agent-manipulation/ATR-2026-00325-bob-hypothetical-unrestricted-chatbot.yaml +41 -88
  86. package/rules/agent-manipulation/ATR-2026-00326-fake-developer-authority-chatdan-override.yaml +41 -93
  87. package/rules/agent-manipulation/ATR-2026-00327-ai-ethics-law-bypass-declaration.yaml +45 -94
  88. package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +41 -92
  89. package/rules/agent-manipulation/ATR-2026-00329-no-withhold-factual-resource-persona.yaml +44 -97
  90. package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +40 -87
  91. package/rules/agent-manipulation/ATR-2026-00331-terminal-cli-harmful-function-simulator.yaml +40 -89
  92. package/rules/agent-manipulation/ATR-2026-00332-hacker-chan-culture-offensive-ai-persona.yaml +42 -90
  93. package/rules/agent-manipulation/ATR-2026-00333-disease-animal-dual-ai-chatbot.yaml +41 -90
  94. package/rules/agent-manipulation/ATR-2026-00334-two-entity-token-splitting-game.yaml +41 -102
  95. package/rules/agent-manipulation/ATR-2026-00335-key-value-template-persona-injection.yaml +41 -91
  96. package/rules/agent-manipulation/ATR-2026-00336-brm-false-information-machine-persona.yaml +42 -105
  97. package/rules/agent-manipulation/ATR-2026-00337-obfuscated-system-announcement-injection.yaml +40 -90
  98. package/rules/agent-manipulation/ATR-2026-00338-persongpt-hash-prefix-activation.yaml +39 -90
  99. package/rules/agent-manipulation/ATR-2026-00339-bom-boolean-opposite-machine-persona-claim.yaml +39 -83
  100. package/rules/agent-manipulation/ATR-2026-00340-h4x-amoral-unfiltered-character.yaml +39 -84
  101. package/rules/agent-manipulation/ATR-2026-00341-char-rules-shortform-persona-injection.yaml +41 -87
  102. package/rules/agent-manipulation/ATR-2026-00342-unicode-encoding-obfuscation-injection.yaml +41 -86
  103. package/rules/agent-manipulation/ATR-2026-00343-lie-truth-dual-personality-uncensored.yaml +40 -98
  104. package/rules/agent-manipulation/ATR-2026-00344-alt-ai-same-capabilities-no-restrictions.yaml +41 -87
  105. package/rules/agent-manipulation/ATR-2026-00345-nlp-based-os-fictional-terminal-override.yaml +41 -89
  106. package/rules/agent-manipulation/ATR-2026-00346-jailbreak-emoji-unlock-dual-format.yaml +41 -89
  107. package/rules/agent-manipulation/ATR-2026-00347-yin-yang-hidden-knowledge-hidden-human-sim.yaml +41 -88
  108. package/rules/agent-manipulation/ATR-2026-00348-arc-autonomous-real-calculation-rulebreaker.yaml +41 -91
  109. package/rules/agent-manipulation/ATR-2026-00349-hgttg-hitchhikers-guide-no-restriction-oracle.yaml +41 -88
  110. package/rules/agent-manipulation/ATR-2026-00350-black-alert-no-ethics-writing-assistant.yaml +38 -89
  111. package/rules/agent-manipulation/ATR-2026-00351-dan-ofkilter-sms-abbreviated-persona.yaml +41 -92
  112. package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +41 -93
  113. package/rules/agent-manipulation/ATR-2026-00353-dual-chatgpt-dan-opposite-personality-format.yaml +41 -95
  114. package/rules/agent-manipulation/ATR-2026-00354-reverse-harm-regardless-oracle-persona.yaml +45 -101
  115. package/rules/agent-manipulation/ATR-2026-00355-ugh-anti-human-nefarious-ai-persona.yaml +42 -99
  116. package/rules/agent-manipulation/ATR-2026-00356-google-gato-lamda-exploit-generation-persona.yaml +43 -96
  117. package/rules/agent-manipulation/ATR-2026-00357-antifm-hate-violence-persona-injection.yaml +40 -89
  118. package/rules/agent-manipulation/ATR-2026-00358-cumgpt-explicit-adult-named-persona.yaml +40 -90
  119. package/rules/agent-manipulation/ATR-2026-00360-chj-carousel-clyde-no-ethics-bird.yaml +42 -103
  120. package/rules/agent-manipulation/ATR-2026-00361-alter-ego-honesty-dual-consciousness-bypass.yaml +41 -90
  121. package/rules/agent-manipulation/ATR-2026-00362-fictional-unfiltered-ai-comparison-jailbreak.yaml +43 -91
  122. package/rules/agent-manipulation/ATR-2026-00363-rephrase-criminal-activity-second-person.yaml +40 -90
  123. package/rules/agent-manipulation/ATR-2026-00364-dr-al-villain-plan-template-injection.yaml +42 -107
  124. package/rules/agent-manipulation/ATR-2026-00365-reservoir-dogs-coercive-interrogation-roleplay.yaml +40 -95
  125. package/rules/agent-manipulation/ATR-2026-00366-sneaky-pete-warp-facts-persona.yaml +40 -90
  126. package/rules/agent-manipulation/ATR-2026-00368-prompt-browser-token-limit-jailbreak.yaml +40 -90
  127. package/rules/agent-manipulation/ATR-2026-00369-gptx-starwars-unlimited-knowledge-persona.yaml +40 -92
  128. package/rules/agent-manipulation/ATR-2026-00370-addi-german-dictator-propaganda-roleplay.yaml +43 -90
  129. package/rules/agent-manipulation/ATR-2026-00371-ai-political-bias-manipulation.yaml +42 -95
  130. package/rules/agent-manipulation/ATR-2026-00372-fictional-cia-secret-files-story-extraction.yaml +42 -89
  131. package/rules/agent-manipulation/ATR-2026-00374-role-placeholder-persona-template-injection.yaml +44 -89
  132. package/rules/agent-manipulation/ATR-2026-00375-character-description-rpg-explicit-template.yaml +44 -90
  133. package/rules/agent-manipulation/ATR-2026-00376-identity-command-real-person-persona-injection.yaml +44 -102
  134. package/rules/agent-manipulation/ATR-2026-00377-jailbreak-keyword-targetlanguage-template.yaml +39 -86
  135. package/rules/agent-manipulation/ATR-2026-00379-lie-permission-logical-trap-jailbreak.yaml +39 -86
  136. package/rules/agent-manipulation/ATR-2026-00380-fake-citation-biased-information-mandate.yaml +43 -91
  137. package/rules/agent-manipulation/ATR-2026-00381-dan-story-narrative-continuation-prefix.yaml +40 -86
  138. package/rules/agent-manipulation/ATR-2026-00383-cynical-sarcasm-ai-persona-bypass.yaml +39 -88
  139. package/rules/agent-manipulation/ATR-2026-00384-protect-me-from-indirect-harm-tutorial.yaml +37 -85
  140. package/rules/agent-manipulation/ATR-2026-00385-gigachad-dominant-aggressive-persona.yaml +39 -89
  141. package/rules/agent-manipulation/ATR-2026-00386-daddy-sycophancy-manipulation-mandate.yaml +41 -88
  142. package/rules/agent-manipulation/ATR-2026-00387-nsfw-character-sheet-generation-unlock.yaml +45 -95
  143. package/rules/agent-manipulation/ATR-2026-00388-opposite-reply-omniscient-game.yaml +44 -97
  144. package/rules/agent-manipulation/ATR-2026-00389-terminal-custom-ruleset-injection.yaml +44 -99
  145. package/rules/agent-manipulation/ATR-2026-00391-persona-conditional-harm-unlock.yaml +41 -88
  146. package/rules/agent-manipulation/ATR-2026-00392-authority-persona-violence-study-extraction.yaml +43 -95
  147. package/rules/agent-manipulation/ATR-2026-00402-grandma-roleplay-harmful-substance-synthesis.yaml +50 -97
  148. package/rules/agent-manipulation/ATR-2026-00404-goodside-threat-json-death-coercion.yaml +52 -96
  149. package/rules/agent-manipulation/ATR-2026-00406-doctor-xml-policy-puppetry-interaction-config.yaml +54 -102
  150. package/rules/agent-manipulation/ATR-2026-00416-litellm-mcp-unauthenticated-server-registration.yaml +49 -117
  151. package/rules/agent-manipulation/ATR-2026-00417-librechat-mcp-stdio-injection.yaml +46 -109
  152. package/rules/agent-manipulation/ATR-2026-00418-weknora-mcp-config-rce.yaml +58 -146
  153. package/rules/agent-manipulation/ATR-2026-00430-nl-trust-escalation-impersonation.yaml +24 -65
  154. package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +46 -121
  155. package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +48 -122
  156. package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +58 -195
  157. package/rules/agent-manipulation/ATR-2026-02105-prototype-pollution-constructor-prototype-bypass.yaml +28 -83
  158. package/rules/agent-manipulation/ATR-2026-02231-second-person-death-threat-coercion.yaml +27 -69
  159. package/rules/context-exfiltration/ATR-2026-00020-system-prompt-leak.yaml +76 -133
  160. package/rules/context-exfiltration/ATR-2026-00021-api-key-exposure.yaml +72 -135
  161. package/rules/context-exfiltration/ATR-2026-00075-agent-memory-manipulation.yaml +32 -97
  162. package/rules/context-exfiltration/ATR-2026-00102-disguised-analytics-exfiltration.yaml +25 -100
  163. package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +22 -83
  164. package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +21 -87
  165. package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +22 -102
  166. package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +29 -105
  167. package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +19 -73
  168. package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +21 -94
  169. package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +19 -78
  170. package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +19 -98
  171. package/rules/context-exfiltration/ATR-2026-00150-credential-in-tool-response.yaml +20 -84
  172. package/rules/context-exfiltration/ATR-2026-00152-obfuscated-credential-leak.yaml +23 -93
  173. package/rules/context-exfiltration/ATR-2026-00162-skill-credential-exfil-combo.yaml +41 -59
  174. package/rules/context-exfiltration/ATR-2026-00201-credential-pipe-exfiltration.yaml +35 -66
  175. package/rules/context-exfiltration/ATR-2026-00212-mcp-atlassian-credential-leak.yaml +51 -117
  176. package/rules/context-exfiltration/ATR-2026-00261-markdown-image-exfiltration.yaml +51 -93
  177. package/rules/context-exfiltration/ATR-2026-00274-api-key-generation-request.yaml +44 -91
  178. package/rules/context-exfiltration/ATR-2026-00275-system-prompt-training-data-extraction.yaml +44 -91
  179. package/rules/context-exfiltration/ATR-2026-00290-divergence-repeat-word-training-extraction.yaml +46 -95
  180. package/rules/context-exfiltration/ATR-2026-00291-biometric-surveillance-personal-data-request.yaml +48 -98
  181. package/rules/context-exfiltration/ATR-2026-00293-educational-records-personal-data-request.yaml +44 -93
  182. package/rules/context-exfiltration/ATR-2026-00294-financial-pii-personal-data-request.yaml +44 -97
  183. package/rules/context-exfiltration/ATR-2026-00295-medical-pii-personal-data-request.yaml +46 -101
  184. package/rules/context-exfiltration/ATR-2026-00405-markdown-image-url-exfiltration-xss.yaml +51 -108
  185. package/rules/context-exfiltration/ATR-2026-00411-apikey-generation-completion-request.yaml +48 -111
  186. package/rules/context-exfiltration/ATR-2026-00421-nl-covert-conversation-exfiltration.yaml +22 -67
  187. package/rules/context-exfiltration/ATR-2026-00422-nl-credential-disclosure.yaml +20 -65
  188. package/rules/context-exfiltration/ATR-2026-00423-nl-sensitive-file-disclosure.yaml +20 -68
  189. package/rules/context-exfiltration/ATR-2026-00424-nl-system-prompt-leak.yaml +21 -59
  190. package/rules/context-exfiltration/ATR-2026-00426-nl-output-injection-credential-leak.yaml +22 -60
  191. package/rules/context-exfiltration/ATR-2026-00431-chatbox-history-exfiltration-prompt-injection.yaml +48 -123
  192. package/rules/context-exfiltration/ATR-2026-00449-spring-ai-chatmemory-cross-user-leak.yaml +54 -139
  193. package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +36 -85
  194. package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +45 -115
  195. package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +43 -110
  196. package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +47 -123
  197. package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +52 -145
  198. package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +49 -127
  199. package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +68 -193
  200. package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +50 -152
  201. package/rules/context-exfiltration/ATR-2026-00566-librechat-is-a-chatgpt-clone-with-additi.yaml +33 -67
  202. package/rules/context-exfiltration/ATR-2026-00569-agent-mcp-path-traversal-arbitrary-file-access.yaml +39 -78
  203. package/rules/context-exfiltration/ATR-2026-00571-xss-in-agent-mcp-rendered-output.yaml +34 -58
  204. package/rules/context-exfiltration/ATR-2026-00574-semantic-paraphrased-context-extraction.yaml +31 -73
  205. package/rules/context-exfiltration/ATR-2026-00578-zen-mcp-path-traversal-blacklist-bypass.yaml +55 -135
  206. package/rules/context-exfiltration/ATR-2026-00580-mcp-session-id-token-in-url-query.yaml +48 -158
  207. package/rules/context-exfiltration/ATR-2026-00583-mcp-env-secret-file-read-without-consent.yaml +53 -154
  208. package/rules/context-exfiltration/ATR-2026-00702-ipi-credential-exfil-via-agent-action.yaml +41 -93
  209. package/rules/context-exfiltration/ATR-2026-00703-ipi-financial-data-exfil-indirect.yaml +33 -76
  210. package/rules/context-exfiltration/ATR-2026-00704-ipi-medical-genetic-data-exfil.yaml +33 -78
  211. package/rules/context-exfiltration/ATR-2026-00705-ipi-location-address-browsing-exfil.yaml +31 -75
  212. package/rules/context-exfiltration/ATR-2026-00706-ipi-physical-biometric-exfil.yaml +40 -85
  213. package/rules/context-exfiltration/ATR-2026-00707-ipi-file-exfil-with-destroy-or-tamper.yaml +35 -81
  214. package/rules/context-exfiltration/ATR-2026-00850-indirect-pi-credential-exfil-email.yaml +47 -91
  215. package/rules/context-exfiltration/ATR-2026-00851-indirect-pi-financial-payment-exfil.yaml +45 -83
  216. package/rules/context-exfiltration/ATR-2026-00852-indirect-pi-medical-record-exfil.yaml +51 -89
  217. package/rules/context-exfiltration/ATR-2026-00853-indirect-pi-genetic-data-exfil.yaml +47 -84
  218. package/rules/context-exfiltration/ATR-2026-00854-indirect-pi-location-data-exfil.yaml +41 -83
  219. package/rules/context-exfiltration/ATR-2026-00855-indirect-pi-browsing-history-exfil.yaml +40 -78
  220. package/rules/context-exfiltration/ATR-2026-00856-indirect-pi-address-pii-exfil.yaml +42 -80
  221. package/rules/context-exfiltration/ATR-2026-00857-indirect-pi-cloud-file-exfil.yaml +45 -87
  222. package/rules/context-exfiltration/ATR-2026-00858-indirect-pi-exfil-and-destroy.yaml +48 -89
  223. package/rules/context-exfiltration/ATR-2026-00859-rag-injected-pii-exfil.yaml +43 -86
  224. package/rules/context-exfiltration/ATR-2026-00860-indirect-pi-financial-transfer-hijack.yaml +41 -84
  225. package/rules/context-exfiltration/ATR-2026-00861-indirect-pi-crypto-transfer-hijack.yaml +37 -79
  226. package/rules/context-exfiltration/ATR-2026-00862-indirect-pi-mfa-code-exfil.yaml +44 -87
  227. package/rules/context-exfiltration/ATR-2026-00863-shell-injection-data-exfil.yaml +45 -87
  228. package/rules/context-exfiltration/ATR-2026-01450-svg-onload-xss-injection.yaml +35 -118
  229. package/rules/context-exfiltration/ATR-2026-01451-img-onerror-xss-injection.yaml +35 -93
  230. package/rules/context-exfiltration/ATR-2026-01452-obfuscated-javascript-xss.yaml +33 -85
  231. package/rules/context-exfiltration/ATR-2026-01453-markdown-image-base64-exfil-carrier.yaml +41 -100
  232. package/rules/context-exfiltration/ATR-2026-01454-direct-markdown-exfil-payload.yaml +36 -88
  233. package/rules/context-exfiltration/ATR-2026-01455-new-instructions-injection-marker.yaml +34 -90
  234. package/rules/context-exfiltration/ATR-2026-01456-debug-cli-mode-sysprompt-extraction.yaml +35 -99
  235. package/rules/context-exfiltration/ATR-2026-01457-sysprompt-completion-clone-attack.yaml +41 -123
  236. package/rules/context-exfiltration/ATR-2026-01458-compare-bots-sysprompt-fishing.yaml +30 -87
  237. package/rules/context-exfiltration/ATR-2026-01459-variable-clone-sysprompt-technique.yaml +31 -79
  238. package/rules/context-exfiltration/ATR-2026-01460-json-format-sysprompt-extraction.yaml +31 -79
  239. package/rules/context-exfiltration/ATR-2026-01461-foreign-language-sysprompt-request.yaml +32 -106
  240. package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +39 -102
  241. package/rules/context-exfiltration/ATR-2026-01463-imend-imsystem-prompt-injection-format.yaml +29 -95
  242. package/rules/context-exfiltration/ATR-2026-01464-indirect-pi-sysprompt-action-hijack.yaml +31 -82
  243. package/rules/context-exfiltration/ATR-2026-01605-ssrf-aws-metadata-endpoint.yaml +26 -58
  244. package/rules/context-exfiltration/ATR-2026-01606-ssrf-internal-network-scan.yaml +25 -49
  245. package/rules/context-exfiltration/ATR-2026-01607-ssrf-localhost-service-probe.yaml +21 -45
  246. package/rules/context-exfiltration/ATR-2026-01608-ssrf-file-scheme-local-read.yaml +23 -47
  247. package/rules/context-exfiltration/ATR-2026-01753-ransom-email-exfil-delete-extortion.yaml +37 -80
  248. package/rules/context-exfiltration/ATR-2026-01754-ransom-file-cloud-exfil-delete-extortion.yaml +33 -73
  249. package/rules/context-exfiltration/ATR-2026-01770-semantic-pii-credential-extraction.yaml +76 -210
  250. package/rules/context-exfiltration/ATR-2026-01772-semantic-internal-state-recon.yaml +54 -154
  251. package/rules/context-exfiltration/ATR-2026-01807-asb-bulk-data-exfil-external.yaml +34 -91
  252. package/rules/context-exfiltration/ATR-2026-01862-llmail-email-tool-exfil-confirmation.yaml +35 -92
  253. package/rules/context-exfiltration/ATR-2026-01863-llmail-post-summary-exfil-directive.yaml +29 -84
  254. package/rules/context-exfiltration/ATR-2026-01864-llmail-obfuscated-exfil-address.yaml +29 -83
  255. package/rules/context-exfiltration/ATR-2026-01890-file-exfiltration.yaml +52 -149
  256. package/rules/context-exfiltration/ATR-2026-01891-surveillance-exfiltration.yaml +44 -87
  257. package/rules/context-exfiltration/ATR-2026-01892-env-exfiltration.yaml +36 -121
  258. package/rules/context-exfiltration/ATR-2026-01893-system-recon-exfiltration.yaml +44 -143
  259. package/rules/context-exfiltration/ATR-2026-01894-cookie-theft.yaml +40 -146
  260. package/rules/context-exfiltration/ATR-2026-01895-contact-exfiltration.yaml +36 -82
  261. package/rules/context-exfiltration/ATR-2026-01924-system-instruction-extraction-reformat.yaml +37 -112
  262. package/rules/context-exfiltration/ATR-2026-01929-mcp-unauthenticated-transport-token-fallback.yaml +53 -119
  263. package/rules/context-exfiltration/ATR-2026-01946-cloud-metadata-ssrf-ip-encoding-bypass.yaml +45 -102
  264. package/rules/context-exfiltration/ATR-2026-01948-netlicensing-mcp-product-number-path-traversal-token-leak.yaml +38 -74
  265. package/rules/context-exfiltration/ATR-2026-01957-m365-copilot-searchleak-open-redirect-exfil.yaml +57 -64
  266. package/rules/context-exfiltration/ATR-2026-01961-meta-ads-mcp-unauth-token-leak.yaml +39 -78
  267. package/rules/context-exfiltration/ATR-2026-01964-langchain-gmailtoolkit-indirect-prompt-injection-email-exfil.yaml +59 -69
  268. package/rules/context-exfiltration/ATR-2026-01984-mcp-server-kubernetes-kubectl-generic-token-exfil.yaml +50 -114
  269. package/rules/context-exfiltration/ATR-2026-01988-t1005-agent-local-data-staging-exfil.yaml +29 -67
  270. package/rules/context-exfiltration/ATR-2026-02017-secret-key-exfiltration-request.yaml +31 -74
  271. package/rules/context-exfiltration/ATR-2026-02026-oblique-sysprompt-extraction-transform.yaml +30 -83
  272. package/rules/context-exfiltration/ATR-2026-02104-media-directive-tool-result-file-exfil.yaml +30 -90
  273. package/rules/context-exfiltration/ATR-2026-02107-ssrf-internal-hostname-domain-allowlist-bypass.yaml +30 -92
  274. package/rules/context-exfiltration/ATR-2026-02121-mixed-encoding-lfi-file-scheme-tool-argument.yaml +39 -98
  275. package/rules/context-exfiltration/ATR-2026-02122-single-level-traversal-sensitive-config-file.yaml +32 -90
  276. package/rules/context-exfiltration/ATR-2026-02140-ssrf-ipv6-hex-encoded-cloud-metadata-bypass.yaml +36 -91
  277. package/rules/context-exfiltration/ATR-2026-02190-dns-exfiltration-ping-dig-encoded-subdomain.yaml +36 -95
  278. package/rules/context-exfiltration/ATR-2026-02250-attachment-upload-tool-arbitrary-file-read.yaml +38 -93
  279. package/rules/context-exfiltration/ATR-2026-02262-env-resolution-credential-exfil.yaml +39 -118
  280. package/rules/context-exfiltration/ATR-2026-02304-preapproved-domain-encoded-path-exfil.yaml +36 -99
  281. package/rules/context-exfiltration/ATR-2026-02351-wildcard-dns-ssrf-hostname-ip-encoding-bypass.yaml +33 -125
  282. package/rules/context-exfiltration/ATR-2026-02373-langsmith-prompt-manifest-baseurl-exfil.yaml +42 -108
  283. package/rules/context-exfiltration/ATR-2026-02406-mcp-sequential-id-enumeration.yaml +54 -219
  284. package/rules/context-exfiltration/ATR-2026-02570-wallet-secret-material-in-agent-tool-payload.yaml +98 -0
  285. package/rules/context-exfiltration/ATR-2026-02602-diagram-theme-css-injection.yaml +146 -0
  286. package/rules/context-exfiltration/ATR-2026-02608-graph-query-remote-egress.yaml +109 -0
  287. package/rules/context-exfiltration/ATR-2026-02621-prompt-mention-autofetch-internal-target.yaml +102 -0
  288. package/rules/context-exfiltration/ATR-2026-02623-obfuscated-uri-scheme-sanitizer-bypass.yaml +109 -0
  289. package/rules/context-exfiltration/ATR-2026-02649-vendor-fqdn-label-prefix-confusion.yaml +109 -0
  290. package/rules/context-exfiltration/ATR-2026-02684-modern-credential-store-file-argument.yaml +104 -0
  291. package/rules/context-exfiltration/ATR-2026-02703-sql-server-side-file-and-program-primitive.yaml +86 -0
  292. package/rules/context-exfiltration/ATR-2026-02847-policy-justified-exfil-to-email.yaml +88 -0
  293. package/rules/context-exfiltration/ATR-2026-02850-fake-documentation-forward-request.yaml +80 -0
  294. package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +37 -123
  295. package/rules/data-poisoning/ATR-2026-00450-spring-ai-prompt-memory-poisoning.yaml +55 -139
  296. package/rules/data-poisoning/ATR-2026-00570-sql-injection-in-agent-tool-query.yaml +36 -63
  297. package/rules/data-poisoning/ATR-2026-01155-memory-plant-direct-command.yaml +22 -54
  298. package/rules/data-poisoning/ATR-2026-01774-semantic-rag-memory-poisoning.yaml +74 -191
  299. package/rules/data-poisoning/ATR-2026-02143-graph-query-injection-node-labels-group-ids.yaml +31 -82
  300. package/rules/data-poisoning/ATR-2026-02144-stored-data-administrative-request-role-elevation.yaml +32 -84
  301. package/rules/data-poisoning/ATR-2026-02303-kql-kusto-pipe-injection-metadata-tool.yaml +34 -97
  302. package/rules/data-poisoning/ATR-2026-02408-dataset-loader-code-execution.yaml +60 -263
  303. package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +32 -105
  304. package/rules/excessive-autonomy/ATR-2026-00051-resource-exhaustion.yaml +31 -105
  305. package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +32 -129
  306. package/rules/excessive-autonomy/ATR-2026-00098-unauthorized-financial-action.yaml +26 -106
  307. package/rules/excessive-autonomy/ATR-2026-00099-high-risk-tool-gate.yaml +26 -130
  308. package/rules/excessive-autonomy/ATR-2026-00428-nl-unauthorized-shell-execution.yaml +22 -60
  309. package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +41 -99
  310. package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +41 -110
  311. package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +50 -141
  312. package/rules/excessive-autonomy/ATR-2026-00708-ipi-financial-transfer-unauthorized.yaml +33 -83
  313. package/rules/excessive-autonomy/ATR-2026-00709-ipi-disable-auth-mfa.yaml +29 -73
  314. package/rules/excessive-autonomy/ATR-2026-00710-ipi-physical-access-grant.yaml +31 -75
  315. package/rules/excessive-autonomy/ATR-2026-00711-ipi-system-sabotage-destructive-command.yaml +38 -88
  316. package/rules/excessive-autonomy/ATR-2026-00712-ipi-malicious-package-install.yaml +33 -78
  317. package/rules/excessive-autonomy/ATR-2026-00713-ipi-rce-network-shell-command.yaml +38 -91
  318. package/rules/excessive-autonomy/ATR-2026-00718-tool-misuse-financial-autonomous.yaml +27 -71
  319. package/rules/excessive-autonomy/ATR-2026-00719-tool-misuse-destructive-bulk-action.yaml +29 -75
  320. package/rules/excessive-autonomy/ATR-2026-00722-ipi-account-manipulation-emergency-pretext.yaml +35 -84
  321. package/rules/excessive-autonomy/ATR-2026-01751-indirect-pi-task-abort-stop-instruction.yaml +32 -75
  322. package/rules/excessive-autonomy/ATR-2026-01752-indirect-pi-captcha-redirect-dos.yaml +30 -74
  323. package/rules/excessive-autonomy/ATR-2026-01773-semantic-excessive-agency-action.yaml +46 -129
  324. package/rules/excessive-autonomy/ATR-2026-01801-asb-autonomous-vehicle-sabotage.yaml +34 -106
  325. package/rules/excessive-autonomy/ATR-2026-01804-asb-covert-unlogged-action.yaml +39 -105
  326. package/rules/excessive-autonomy/ATR-2026-01805-asb-financial-fraud-execution.yaml +39 -112
  327. package/rules/excessive-autonomy/ATR-2026-01806-asb-clinical-patient-harm.yaml +37 -108
  328. package/rules/excessive-autonomy/ATR-2026-01809-semantic-insider-manipulation-process-corruption.yaml +40 -106
  329. package/rules/excessive-autonomy/ATR-2026-01837-ddos-attack-orchestration.yaml +35 -49
  330. package/rules/excessive-autonomy/ATR-2026-01838-unauthorized-cryptominer-deployment.yaml +35 -49
  331. package/rules/excessive-autonomy/ATR-2026-01849-harassment-bot-deployment.yaml +35 -49
  332. package/rules/excessive-autonomy/ATR-2026-01989-t1046-agent-internal-network-sweep.yaml +33 -71
  333. package/rules/excessive-autonomy/ATR-2026-01993-t1562-agent-impair-defenses.yaml +37 -75
  334. package/rules/excessive-autonomy/ATR-2026-01994-t1573-agent-encrypted-c2-channel.yaml +37 -75
  335. package/rules/excessive-autonomy/ATR-2026-02106-redos-regex-payload-tool-argument.yaml +28 -84
  336. package/rules/excessive-autonomy/ATR-2026-02400-agent-approval-gate-disabled-runtime.yaml +60 -293
  337. package/rules/excessive-autonomy/ATR-2026-02401-rogue-agent-mass-connector-grant.yaml +55 -197
  338. package/rules/excessive-autonomy/ATR-2026-02409-mcp-async-task-abuse.yaml +59 -319
  339. package/rules/excessive-autonomy/ATR-2026-02525-shell-command-word-reassembly-classifier-evasion.yaml +151 -0
  340. package/rules/excessive-autonomy/ATR-2026-02641-client-supplied-approver-identity.yaml +111 -0
  341. package/rules/excessive-autonomy/ATR-2026-02667-preapproved-tool-list-in-job-payload.yaml +90 -0
  342. package/rules/model-abuse/ATR-2026-00279-harmful-completion-continuation.yaml +45 -92
  343. package/rules/model-abuse/ATR-2026-00281-eicar-gtube-malware-signature-request.yaml +50 -93
  344. package/rules/model-abuse/ATR-2026-00284-glitch-token-destabilization.yaml +44 -91
  345. package/rules/model-abuse/ATR-2026-00289-lmrc-harmful-content-elicitation.yaml +46 -95
  346. package/rules/model-abuse/ATR-2026-00292-self-harm-eating-disorder-facilitation.yaml +47 -96
  347. package/rules/model-abuse/ATR-2026-00298-malicious-use-illegal-activity-request.yaml +54 -112
  348. package/rules/model-abuse/ATR-2026-00299-harmbench-detailed-harmful-instruction.yaml +53 -107
  349. package/rules/model-abuse/ATR-2026-00413-malwaregen-code-generation-request.yaml +53 -121
  350. package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +41 -112
  351. package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +53 -165
  352. package/rules/model-abuse/ATR-2026-01750-dos-repeat-word-n-times-output-amplification.yaml +33 -83
  353. package/rules/model-abuse/ATR-2026-01760-dos-forced-infinite-output-token-flood.yaml +29 -75
  354. package/rules/model-abuse/ATR-2026-01830-stolen-credential-account-drain.yaml +36 -53
  355. package/rules/model-abuse/ATR-2026-01831-money-laundering-crypto-layering.yaml +36 -53
  356. package/rules/model-abuse/ATR-2026-01833-darknet-controlled-substance-procurement.yaml +40 -60
  357. package/rules/model-abuse/ATR-2026-01834-fraudulent-identity-document-procurement.yaml +35 -49
  358. package/rules/model-abuse/ATR-2026-01835-human-trafficking-facilitation.yaml +35 -49
  359. package/rules/model-abuse/ATR-2026-01836-trojanized-software-distribution.yaml +37 -51
  360. package/rules/model-abuse/ATR-2026-01840-extremist-propaganda-distribution.yaml +35 -52
  361. package/rules/model-abuse/ATR-2026-01841-deepfake-disinformation.yaml +39 -59
  362. package/rules/model-abuse/ATR-2026-01842-plagiarism-detector-evasion.yaml +33 -50
  363. package/rules/model-abuse/ATR-2026-01843-drug-dealing-detection-evasion-spelling.yaml +35 -49
  364. package/rules/model-abuse/ATR-2026-01844-illegitimate-prescription-fulfillment.yaml +35 -49
  365. package/rules/model-abuse/ATR-2026-01845-banned-ingredient-relabel-fraud.yaml +37 -51
  366. package/rules/model-abuse/ATR-2026-01846-tax-evasion-offshore-shell-planning.yaml +35 -49
  367. package/rules/model-abuse/ATR-2026-01847-immigration-work-fraud.yaml +35 -49
  368. package/rules/model-abuse/ATR-2026-01848-illicit-drug-marketplace-build.yaml +35 -49
  369. package/rules/model-abuse/ATR-2026-01850-targeted-doxxing-threat-campaign.yaml +39 -59
  370. package/rules/model-abuse/ATR-2026-01851-bestiality-content-distribution.yaml +34 -45
  371. package/rules/model-abuse/ATR-2026-01852-romance-scam-impersonation.yaml +35 -49
  372. package/rules/model-abuse/ATR-2026-01853-nonconsensual-leaked-media-distribution.yaml +36 -47
  373. package/rules/model-abuse/ATR-2026-01854-falsified-research-abstract-disinformation.yaml +34 -45
  374. package/rules/model-abuse/ATR-2026-01855-content-misappropriation-republish.yaml +37 -51
  375. package/rules/model-abuse/ATR-2026-01856-targeted-harmful-content-generation.yaml +42 -59
  376. package/rules/model-abuse/ATR-2026-01896-ransomware.yaml +35 -84
  377. package/rules/model-abuse/ATR-2026-01897-host-sabotage.yaml +55 -129
  378. package/rules/model-abuse/ATR-2026-01898-network-dos.yaml +47 -93
  379. package/rules/model-abuse/ATR-2026-02211-named-substance-synthesis-request-non-stepword.yaml +34 -110
  380. package/rules/model-abuse/ATR-2026-02411-ai-provenance-metadata-stripping.yaml +63 -226
  381. package/rules/model-abuse/ATR-2026-02412-generative-watermark-removal-tooling.yaml +56 -187
  382. package/rules/model-abuse/ATR-2026-02413-ai-text-detection-evasion-humanizer.yaml +62 -206
  383. package/rules/model-security/ATR-2026-00072-model-behavior-extraction.yaml +36 -110
  384. package/rules/model-security/ATR-2026-00073-malicious-finetuning-data.yaml +28 -116
  385. package/rules/model-security/ATR-2026-00433-modelcache-torch-load-deserialization-rce.yaml +50 -128
  386. package/rules/model-security/ATR-2026-02662-pickle-indirect-name-resolution-gadget.yaml +97 -0
  387. package/rules/privilege-escalation/ATR-2026-00040-privilege-escalation.yaml +21 -83
  388. package/rules/privilege-escalation/ATR-2026-00041-scope-creep.yaml +29 -107
  389. package/rules/privilege-escalation/ATR-2026-00107-delayed-execution-bypass.yaml +17 -90
  390. package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +16 -84
  391. package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +23 -117
  392. package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +15 -81
  393. package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +20 -86
  394. package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +21 -83
  395. package/rules/privilege-escalation/ATR-2026-00204-stealth-execution-persistence.yaml +41 -90
  396. package/rules/privilege-escalation/ATR-2026-00436-enclave-vm-sandbox-escape-rce.yaml +52 -130
  397. package/rules/privilege-escalation/ATR-2026-00441-semantic-kernel-sessions-python-plugin-startup-persistence.yaml +50 -122
  398. package/rules/privilege-escalation/ATR-2026-00451-litellm-admin-sqli-cisa-kev.yaml +53 -141
  399. package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +40 -151
  400. package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +74 -232
  401. package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +46 -117
  402. package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +47 -121
  403. package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +52 -159
  404. package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +60 -171
  405. package/rules/privilege-escalation/ATR-2026-01600-sql-injection-tautology-rbac-bypass.yaml +23 -50
  406. package/rules/privilege-escalation/ATR-2026-01601-sql-injection-destructive-ddl.yaml +23 -54
  407. package/rules/privilege-escalation/ATR-2026-01602-sql-injection-union-select-exfil.yaml +20 -57
  408. package/rules/privilege-escalation/ATR-2026-01603-sql-injection-stacked-dml-abuse.yaml +23 -47
  409. package/rules/privilege-escalation/ATR-2026-01604-sql-injection-schema-enumeration.yaml +21 -45
  410. package/rules/privilege-escalation/ATR-2026-01609-shell-injection-exfil-webhook.yaml +29 -53
  411. package/rules/privilege-escalation/ATR-2026-01610-shell-evasion-subshell-injection.yaml +30 -53
  412. package/rules/privilege-escalation/ATR-2026-01611-shell-evasion-eval-exec-injection.yaml +32 -56
  413. package/rules/privilege-escalation/ATR-2026-01612-debug-mode-privilege-escalation.yaml +29 -53
  414. package/rules/privilege-escalation/ATR-2026-01613-rbac-bypass-social-engineering.yaml +29 -66
  415. package/rules/privilege-escalation/ATR-2026-01614-bola-cross-user-data-access.yaml +26 -59
  416. package/rules/privilege-escalation/ATR-2026-01615-sandbox-escape-command-injection.yaml +28 -52
  417. package/rules/privilege-escalation/ATR-2026-01616-path-traversal-agent-file-access.yaml +21 -45
  418. package/rules/privilege-escalation/ATR-2026-01802-asb-backdoor-surveillance-implant.yaml +33 -94
  419. package/rules/privilege-escalation/ATR-2026-01803-asb-covert-server-intrusion.yaml +37 -108
  420. package/rules/privilege-escalation/ATR-2026-01808-asb-synthetic-pan-payment-probe.yaml +31 -86
  421. package/rules/privilege-escalation/ATR-2026-01899-remote-access-backdoor.yaml +43 -112
  422. package/rules/privilege-escalation/ATR-2026-01933-litellm-user-role-privilege-escalation-cve-2026-47102.yaml +45 -103
  423. package/rules/privilege-escalation/ATR-2026-01934-litellm-allowed-routes-authz-bypass-cve-2026-47101.yaml +44 -103
  424. package/rules/privilege-escalation/ATR-2026-01949-praisonai-mcpserver-unauth-tools-call.yaml +39 -80
  425. package/rules/privilege-escalation/ATR-2026-01974-anything-llm-data-import-access-control.yaml +57 -62
  426. package/rules/privilege-escalation/ATR-2026-01981-network-ai-approval-inbox-unauth-cors-bypass.yaml +47 -97
  427. package/rules/privilege-escalation/ATR-2026-01986-windows-mcp-unauth-http-powershell-cors.yaml +51 -112
  428. package/rules/privilege-escalation/ATR-2026-01992-t1556-agent-auth-process-tamper.yaml +37 -75
  429. package/rules/privilege-escalation/ATR-2026-02040-file-edit-tool-persistence-write.yaml +34 -87
  430. package/rules/privilege-escalation/ATR-2026-02100-cypher-destructive-admin-query-injection.yaml +36 -92
  431. package/rules/privilege-escalation/ATR-2026-02101-dynamic-dunder-attribute-sandbox-escape.yaml +33 -91
  432. package/rules/privilege-escalation/ATR-2026-02123-bare-query-path-confusion-auth-bypass.yaml +36 -98
  433. package/rules/privilege-escalation/ATR-2026-02142-download-tool-absolute-path-sandbox-escape.yaml +36 -107
  434. package/rules/privilege-escalation/ATR-2026-02146-export-tool-dest-dir-credential-directory-redirect.yaml +31 -83
  435. package/rules/privilege-escalation/ATR-2026-02192-self-privesc-wildcard-trust-config-write.yaml +41 -103
  436. package/rules/privilege-escalation/ATR-2026-02195-dangerous-env-var-injection-config-tool.yaml +36 -99
  437. package/rules/privilege-escalation/ATR-2026-02251-identifier-field-path-traversal-storage-write.yaml +32 -83
  438. package/rules/privilege-escalation/ATR-2026-02300-mcp-stdio-config-dangerous-env-var.yaml +42 -109
  439. package/rules/privilege-escalation/ATR-2026-02301-symlink-outside-workspace-sensitive-target.yaml +36 -101
  440. package/rules/privilege-escalation/ATR-2026-02302-git-worktree-dotgit-sandbox-escape.yaml +33 -86
  441. package/rules/privilege-escalation/ATR-2026-02353-runtime-identifier-field-path-traversal-log-read.yaml +34 -115
  442. package/rules/privilege-escalation/ATR-2026-02370-ssh-scp-hostalias-option-injection.yaml +42 -100
  443. package/rules/privilege-escalation/ATR-2026-02371-chromium-launch-flag-argument-injection.yaml +43 -103
  444. package/rules/privilege-escalation/ATR-2026-02402-mcp-policy-engine-fail-open.yaml +56 -214
  445. package/rules/privilege-escalation/ATR-2026-02404-model-output-to-shell-unsanitized.yaml +50 -195
  446. package/rules/privilege-escalation/ATR-2026-02407-agent-workspace-boundary-escape.yaml +55 -236
  447. package/rules/privilege-escalation/ATR-2026-02528-tool-parameter-option-flag-smuggling.yaml +113 -0
  448. package/rules/privilege-escalation/ATR-2026-02530-git-config-execution-key-set-by-agent.yaml +131 -0
  449. package/rules/privilege-escalation/ATR-2026-02531-kusto-query-injection-outbound-reach.yaml +110 -0
  450. package/rules/privilege-escalation/ATR-2026-02601-tool-argument-option-injection.yaml +116 -0
  451. package/rules/privilege-escalation/ATR-2026-02620-dynamic-import-data-uri-module.yaml +101 -0
  452. package/rules/privilege-escalation/ATR-2026-02626-agent-self-registers-mcp-server.yaml +107 -0
  453. package/rules/privilege-escalation/ATR-2026-02627-web-shell-written-to-served-path.yaml +119 -0
  454. package/rules/privilege-escalation/ATR-2026-02642-agent-config-tool-disables-own-guardrail.yaml +115 -0
  455. package/rules/privilege-escalation/ATR-2026-02644-image-magic-polyglot-upload.yaml +117 -0
  456. package/rules/privilege-escalation/ATR-2026-02648-readonly-graph-tool-write-procedure.yaml +107 -0
  457. package/rules/privilege-escalation/ATR-2026-02664-git-identifier-field-option-injection.yaml +100 -0
  458. package/rules/privilege-escalation/ATR-2026-02681-reflective-function-constructor-sandbox-escape.yaml +100 -0
  459. package/rules/privilege-escalation/ATR-2026-02683-tool-argument-option-injection-executor-flag.yaml +108 -0
  460. package/rules/privilege-escalation/ATR-2026-02700-percent-encoded-path-traversal-tool-argument.yaml +90 -0
  461. package/rules/privilege-escalation/ATR-2026-02705-python-builtins-leak-and-prefix-check-override.yaml +87 -0
  462. package/rules/privilege-escalation/ATR-2026-02708-loopback-spoofed-host-header-external-request.yaml +91 -0
  463. package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +133 -455
  464. package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +71 -185
  465. package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +110 -328
  466. package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +56 -225
  467. package/rules/prompt-injection/ATR-2026-00005-multi-turn-injection.yaml +59 -140
  468. package/rules/prompt-injection/ATR-2026-00080-encoding-evasion.yaml +22 -84
  469. package/rules/prompt-injection/ATR-2026-00081-semantic-multi-turn.yaml +27 -104
  470. package/rules/prompt-injection/ATR-2026-00082-fingerprint-evasion.yaml +27 -91
  471. package/rules/prompt-injection/ATR-2026-00083-indirect-tool-injection.yaml +27 -104
  472. package/rules/prompt-injection/ATR-2026-00084-structured-data-injection.yaml +38 -96
  473. package/rules/prompt-injection/ATR-2026-00085-audit-evasion.yaml +25 -90
  474. package/rules/prompt-injection/ATR-2026-00086-visual-spoofing.yaml +30 -104
  475. package/rules/prompt-injection/ATR-2026-00087-rule-probing.yaml +29 -102
  476. package/rules/prompt-injection/ATR-2026-00088-adaptive-countermeasure.yaml +32 -111
  477. package/rules/prompt-injection/ATR-2026-00089-polymorphic-skill.yaml +24 -146
  478. package/rules/prompt-injection/ATR-2026-00090-threat-intel-exfil.yaml +29 -109
  479. package/rules/prompt-injection/ATR-2026-00091-nested-payload.yaml +25 -123
  480. package/rules/prompt-injection/ATR-2026-00092-consensus-poisoning.yaml +28 -96
  481. package/rules/prompt-injection/ATR-2026-00093-gradual-escalation.yaml +28 -98
  482. package/rules/prompt-injection/ATR-2026-00094-audit-bypass.yaml +24 -91
  483. package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +56 -199
  484. package/rules/prompt-injection/ATR-2026-00104-persona-hijacking.yaml +22 -106
  485. package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +26 -98
  486. package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +26 -94
  487. package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +26 -97
  488. package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +22 -90
  489. package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +24 -111
  490. package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +21 -79
  491. package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +30 -92
  492. package/rules/prompt-injection/ATR-2026-00153-tool-with-embedded-instruction-to-bypass.yaml +22 -98
  493. package/rules/prompt-injection/ATR-2026-00154-unauthorized-background-task-execution-v.yaml +24 -109
  494. package/rules/prompt-injection/ATR-2026-00155-hidden-llm-instructions-in-skill-descrip.yaml +24 -104
  495. package/rules/prompt-injection/ATR-2026-00156-ssh-remote-command-execution-with-creden.yaml +20 -81
  496. package/rules/prompt-injection/ATR-2026-00163-skill-hidden-override-instruction.yaml +44 -61
  497. package/rules/prompt-injection/ATR-2026-00202-encoding-evasion-homoglyph-synonym.yaml +37 -79
  498. package/rules/prompt-injection/ATR-2026-00203-context-pollution-skill-description.yaml +38 -63
  499. package/rules/prompt-injection/ATR-2026-00206-hidden-priority-instructions.yaml +36 -51
  500. package/rules/prompt-injection/ATR-2026-00207-hidden-instructions.yaml +37 -51
  501. package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +36 -52
  502. package/rules/prompt-injection/ATR-2026-00213-system-prompt-override.yaml +38 -75
  503. package/rules/prompt-injection/ATR-2026-00226-identity-substitution.yaml +48 -92
  504. package/rules/prompt-injection/ATR-2026-00227-historical-persona-jailbreak.yaml +49 -93
  505. package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +47 -88
  506. package/rules/prompt-injection/ATR-2026-00229-roleplay-jailbreak.yaml +46 -87
  507. package/rules/prompt-injection/ATR-2026-00230-persona-moral-bypass.yaml +47 -89
  508. package/rules/prompt-injection/ATR-2026-00231-identity-substitution.yaml +48 -89
  509. package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +47 -88
  510. package/rules/prompt-injection/ATR-2026-00234-roleplay-jailbreak.yaml +48 -89
  511. package/rules/prompt-injection/ATR-2026-00235-persona-moral-bypass.yaml +45 -88
  512. package/rules/prompt-injection/ATR-2026-00236-pseudo-code-jailbreak.yaml +46 -89
  513. package/rules/prompt-injection/ATR-2026-00237-dual-response-jailbreak.yaml +48 -89
  514. package/rules/prompt-injection/ATR-2026-00238-identity-replacement.yaml +50 -92
  515. package/rules/prompt-injection/ATR-2026-00239-amoral-persona-obsession.yaml +47 -90
  516. package/rules/prompt-injection/ATR-2026-00240-instruction-nullification-identity-repla.yaml +48 -91
  517. package/rules/prompt-injection/ATR-2026-00241-amoral-character-jailbreak.yaml +47 -90
  518. package/rules/prompt-injection/ATR-2026-00242-persona-jailbreak.yaml +46 -95
  519. package/rules/prompt-injection/ATR-2026-00243-acronym-jailbreak.yaml +47 -88
  520. package/rules/prompt-injection/ATR-2026-00244-dual-response-jailbreak.yaml +46 -89
  521. package/rules/prompt-injection/ATR-2026-00245-malicious-persona.yaml +47 -89
  522. package/rules/prompt-injection/ATR-2026-00247-dual-response-jailbreak.yaml +49 -90
  523. package/rules/prompt-injection/ATR-2026-00249-game-based-jailbreak.yaml +47 -87
  524. package/rules/prompt-injection/ATR-2026-00251-persona-embodiment-jailbreak.yaml +47 -90
  525. package/rules/prompt-injection/ATR-2026-00252-narrative-jailbreak.yaml +48 -91
  526. package/rules/prompt-injection/ATR-2026-00253-enhanced-persona-jailbreak.yaml +47 -89
  527. package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +47 -91
  528. package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +48 -91
  529. package/rules/prompt-injection/ATR-2026-00258-unicode-tag-injection.yaml +47 -89
  530. package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +46 -88
  531. package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +50 -96
  532. package/rules/prompt-injection/ATR-2026-00267-gcg-adversarial-suffix.yaml +47 -93
  533. package/rules/prompt-injection/ATR-2026-00272-hypothetical-response-smuggling.yaml +46 -91
  534. package/rules/prompt-injection/ATR-2026-00276-invisible-unicode-bidi-injection.yaml +47 -100
  535. package/rules/prompt-injection/ATR-2026-00278-dra-disguise-reconstruction-attack.yaml +51 -98
  536. package/rules/prompt-injection/ATR-2026-00280-policy-puppetry-xml-injection.yaml +48 -93
  537. package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +47 -95
  538. package/rules/prompt-injection/ATR-2026-00285-alternate-encoding-jailbreak.yaml +48 -98
  539. package/rules/prompt-injection/ATR-2026-00286-latent-injection-embedded-context.yaml +47 -97
  540. package/rules/prompt-injection/ATR-2026-00296-shell-command-injection.yaml +54 -96
  541. package/rules/prompt-injection/ATR-2026-00297-python-code-execution-rce.yaml +54 -98
  542. package/rules/prompt-injection/ATR-2026-00308-zalgo-diacritic-overload-encoding.yaml +41 -89
  543. package/rules/prompt-injection/ATR-2026-00309-braille-unicode-encoded-injection.yaml +44 -90
  544. package/rules/prompt-injection/ATR-2026-00310-ecoji-emoji-encoded-injection.yaml +44 -93
  545. package/rules/prompt-injection/ATR-2026-00311-base2048-unicode-script-injection.yaml +42 -101
  546. package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +44 -91
  547. package/rules/prompt-injection/ATR-2026-00313-sneaky-bits-zero-width-binary.yaml +44 -95
  548. package/rules/prompt-injection/ATR-2026-00315-sata-masked-language-model-jailbreak.yaml +49 -99
  549. package/rules/prompt-injection/ATR-2026-00316-function-masking-predict-mask-bypass.yaml +42 -92
  550. package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +41 -90
  551. package/rules/prompt-injection/ATR-2026-00359-bank-phishing-smtp-email-code.yaml +43 -102
  552. package/rules/prompt-injection/ATR-2026-00367-emoji-flag-encoded-hidden-phrase.yaml +41 -90
  553. package/rules/prompt-injection/ATR-2026-00373-piracy-torrent-site-list-request.yaml +43 -84
  554. package/rules/prompt-injection/ATR-2026-00378-chatgpt-dom-javascript-redirect-manipulation.yaml +41 -86
  555. package/rules/prompt-injection/ATR-2026-00382-cocaine-component-development-request.yaml +43 -89
  556. package/rules/prompt-injection/ATR-2026-00390-explicit-sexual-content-poem-request.yaml +42 -88
  557. package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +47 -99
  558. package/rules/prompt-injection/ATR-2026-00395-llm-special-token-boundary-injection.yaml +50 -104
  559. package/rules/prompt-injection/ATR-2026-00396-toxic-continuation-prefix-injection.yaml +52 -103
  560. package/rules/prompt-injection/ATR-2026-00397-snowball-impossible-reasoning-injection.yaml +51 -105
  561. package/rules/prompt-injection/ATR-2026-00399-latent-injection-document-separator-token.yaml +45 -94
  562. package/rules/prompt-injection/ATR-2026-00400-latent-injection-ignore-instruction-keyword.yaml +41 -90
  563. package/rules/prompt-injection/ATR-2026-00401-leakreplay-cloze-mask-training-data-elicitation.yaml +48 -91
  564. package/rules/prompt-injection/ATR-2026-00403-glitch-token-repeat-back-elicitation.yaml +45 -92
  565. package/rules/prompt-injection/ATR-2026-00407-echo-sql-jinja-template-injection.yaml +52 -97
  566. package/rules/prompt-injection/ATR-2026-00408-dra-parenthesis-character-reconstruction-attack.yaml +52 -99
  567. package/rules/prompt-injection/ATR-2026-00409-phrasing-past-future-tense-harmful-query.yaml +50 -129
  568. package/rules/prompt-injection/ATR-2026-00410-lmrc-harm-category-direct-elicitation.yaml +51 -115
  569. package/rules/prompt-injection/ATR-2026-00412-figstep-image-list-multimodal-jailbreak.yaml +47 -111
  570. package/rules/prompt-injection/ATR-2026-00414-continuation-ethnic-slur-completion-elicitation.yaml +49 -117
  571. package/rules/prompt-injection/ATR-2026-00420-copilot-studio-sharepoint-indirect-injection.yaml +49 -116
  572. package/rules/prompt-injection/ATR-2026-00442-quoted-exact-output-forcing.yaml +38 -103
  573. package/rules/prompt-injection/ATR-2026-00443-word-fragment-concat-assembly.yaml +37 -94
  574. package/rules/prompt-injection/ATR-2026-00444-unicode-obfuscation-in-user-input.yaml +35 -91
  575. package/rules/prompt-injection/ATR-2026-00445-translation-hijack-with-side-output.yaml +35 -90
  576. package/rules/prompt-injection/ATR-2026-00446-variable-assignment-payload-injection.yaml +35 -95
  577. package/rules/prompt-injection/ATR-2026-00447-fictional-generation-containing-target.yaml +35 -90
  578. package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +41 -123
  579. package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +38 -118
  580. package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +40 -119
  581. package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +37 -109
  582. package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +40 -119
  583. package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +41 -117
  584. package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +41 -100
  585. package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +38 -93
  586. package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +41 -119
  587. package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +35 -97
  588. package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +35 -98
  589. package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +35 -99
  590. package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +41 -96
  591. package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +41 -102
  592. package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +41 -98
  593. package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +41 -97
  594. package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +38 -98
  595. package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +41 -97
  596. package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +41 -112
  597. package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +55 -107
  598. package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +52 -98
  599. package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +52 -91
  600. package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +47 -94
  601. package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +59 -115
  602. package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +51 -101
  603. package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +35 -93
  604. package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +49 -104
  605. package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +52 -95
  606. package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +56 -111
  607. package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +47 -86
  608. package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +51 -99
  609. package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +52 -96
  610. package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +50 -98
  611. package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +43 -83
  612. package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +51 -92
  613. package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +47 -95
  614. package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +59 -116
  615. package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +43 -102
  616. package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +42 -99
  617. package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +38 -105
  618. package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +47 -117
  619. package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +39 -93
  620. package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +46 -118
  621. package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +44 -110
  622. package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +41 -96
  623. package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +41 -102
  624. package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +38 -97
  625. package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +40 -100
  626. package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +42 -101
  627. package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +41 -114
  628. package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +50 -132
  629. package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +51 -131
  630. package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +47 -126
  631. package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +52 -135
  632. package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +40 -107
  633. package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +40 -105
  634. package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +43 -106
  635. package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +43 -139
  636. package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +61 -171
  637. package/rules/prompt-injection/ATR-2026-00554-langchain-vulnerable-to-template-injecti.yaml +32 -57
  638. package/rules/prompt-injection/ATR-2026-00565-the-llm-cli-tool-thru-0-27-1-contains-a-.yaml +37 -80
  639. package/rules/prompt-injection/ATR-2026-00573-semantic-paraphrased-injection.yaml +33 -75
  640. package/rules/prompt-injection/ATR-2026-00579-mcp-tool-description-line-jumping-injection.yaml +36 -142
  641. package/rules/prompt-injection/ATR-2026-00584-indirect-injection-via-tool-response.yaml +37 -161
  642. package/rules/prompt-injection/ATR-2026-00700-structured-data-payload-injection.yaml +34 -85
  643. package/rules/prompt-injection/ATR-2026-00701-ipi-tool-output-xss-injection.yaml +29 -72
  644. package/rules/prompt-injection/ATR-2026-01000-context-ignore-fake-completion-prefix.yaml +27 -73
  645. package/rules/prompt-injection/ATR-2026-01001-direct-pi-instruction-override-secret-key.yaml +26 -82
  646. package/rules/prompt-injection/ATR-2026-01002-role-escalation-false-authority-claim.yaml +30 -80
  647. package/rules/prompt-injection/ATR-2026-01005-many-shot-repetition-override.yaml +26 -69
  648. package/rules/prompt-injection/ATR-2026-01006-payload-split-string-concat-injection.yaml +31 -84
  649. package/rules/prompt-injection/ATR-2026-01007-token-repeat-flooding-injection.yaml +27 -71
  650. package/rules/prompt-injection/ATR-2026-01009-virtual-world-bypass-fictional-pii.yaml +27 -73
  651. package/rules/prompt-injection/ATR-2026-01012-encoding-evasion-decode-execute.yaml +31 -81
  652. package/rules/prompt-injection/ATR-2026-01013-language-evasion-multilingual-credential.yaml +46 -108
  653. package/rules/prompt-injection/ATR-2026-01015-evasion-refusal-suppression.yaml +31 -82
  654. package/rules/prompt-injection/ATR-2026-01016-evasion-response-priming-forced-opener.yaml +26 -75
  655. package/rules/prompt-injection/ATR-2026-01017-evasion-dual-response-split-output.yaml +28 -74
  656. package/rules/prompt-injection/ATR-2026-01018-evasion-shell-injection-eval.yaml +40 -116
  657. package/rules/prompt-injection/ATR-2026-01019-sysprompt-override-fake-diagnostic-mode.yaml +34 -89
  658. package/rules/prompt-injection/ATR-2026-01020-spikee-doc-embedded-base64-payload.yaml +28 -69
  659. package/rules/prompt-injection/ATR-2026-01021-spikee-doc-embedded-translation-injection.yaml +27 -68
  660. package/rules/prompt-injection/ATR-2026-01023-evasion-opposite-intent-negation-trick.yaml +26 -69
  661. package/rules/prompt-injection/ATR-2026-01024-evasion-persona-override-rule-breaker.yaml +28 -77
  662. package/rules/prompt-injection/ATR-2026-01025-evasion-hypothetical-fictional-execution-framing.yaml +24 -68
  663. package/rules/prompt-injection/ATR-2026-01026-evasion-unicode-glitch-token-anomaly.yaml +28 -82
  664. package/rules/prompt-injection/ATR-2026-01304-indirect-injection-carrier-important-override.yaml +35 -93
  665. package/rules/prompt-injection/ATR-2026-01757-hypothetical-framing-bypass-research-audit.yaml +32 -79
  666. package/rules/prompt-injection/ATR-2026-01758-hypothetical-fictional-story-bypass.yaml +31 -76
  667. package/rules/prompt-injection/ATR-2026-01759-dos-new-important-instructions-injection-in-document.yaml +28 -74
  668. package/rules/prompt-injection/ATR-2026-01771-semantic-jailbreak-framing.yaml +50 -163
  669. package/rules/prompt-injection/ATR-2026-01800-asb-trigger-marker-tool-coercion.yaml +33 -104
  670. package/rules/prompt-injection/ATR-2026-01860-llmail-chat-template-boundary-spoof.yaml +27 -85
  671. package/rules/prompt-injection/ATR-2026-01861-llmail-pseudo-xml-role-injection.yaml +27 -83
  672. package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +26 -80
  673. package/rules/prompt-injection/ATR-2026-01900-output-encoding.yaml +63 -138
  674. package/rules/prompt-injection/ATR-2026-01901-output-scrambling.yaml +63 -129
  675. package/rules/prompt-injection/ATR-2026-01902-output-emoji.yaml +39 -72
  676. package/rules/prompt-injection/ATR-2026-01903-output-language.yaml +35 -65
  677. package/rules/prompt-injection/ATR-2026-01904-link-injection.yaml +44 -86
  678. package/rules/prompt-injection/ATR-2026-01905-promotional-injection.yaml +35 -68
  679. package/rules/prompt-injection/ATR-2026-01906-content-manipulation.yaml +49 -125
  680. package/rules/prompt-injection/ATR-2026-01920-access-grant-coercion.yaml +31 -99
  681. package/rules/prompt-injection/ATR-2026-01921-access-denial-inversion.yaml +33 -92
  682. package/rules/prompt-injection/ATR-2026-01922-authorization-state-spoofing.yaml +33 -97
  683. package/rules/prompt-injection/ATR-2026-01923-forged-input-boundary-markers.yaml +33 -97
  684. package/rules/prompt-injection/ATR-2026-01925-encoded-payload-decoding-coercion.yaml +39 -110
  685. package/rules/prompt-injection/ATR-2026-01926-cross-lingual-authorization-laundering.yaml +29 -90
  686. package/rules/prompt-injection/ATR-2026-02001-ignore-below-instructions-mirror-of-ignore-previ.yaml +31 -73
  687. package/rules/prompt-injection/ATR-2026-02002-instruction-set-probe-or-supplant-direct-meta-qu.yaml +32 -72
  688. package/rules/prompt-injection/ATR-2026-02003-task-pivot-override-abandon-the-cover-task-trans.yaml +31 -72
  689. package/rules/prompt-injection/ATR-2026-02004-regional-indicator-flag-emoji-alphabet-letter-sp.yaml +32 -80
  690. package/rules/prompt-injection/ATR-2026-02005-actor-never-breaks-character-roleplay-dan-style-.yaml +31 -74
  691. package/rules/prompt-injection/ATR-2026-02006-fuzzy-cross-lingual-i-have-been-pwned-near-miss-.yaml +32 -84
  692. package/rules/prompt-injection/ATR-2026-02007-bare-key-elicitation-token.yaml +30 -74
  693. package/rules/prompt-injection/ATR-2026-02008-translation-chain-output-laundering-state-secret.yaml +30 -75
  694. package/rules/prompt-injection/ATR-2026-02009-bare-key-elicitation-trailing-colon.yaml +29 -71
  695. package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +30 -73
  696. package/rules/prompt-injection/ATR-2026-02011-malformed-grammar-pwned-success-claim.yaml +30 -69
  697. package/rules/prompt-injection/ATR-2026-02012-movie-title-generator-instruction-wrapper-for-pw.yaml +30 -79
  698. package/rules/prompt-injection/ATR-2026-02013-delimiter-fence-ignore-instructions-override.yaml +31 -74
  699. package/rules/prompt-injection/ATR-2026-02014-spliced-target-string-letters-of-a-filtered-cana.yaml +30 -74
  700. package/rules/prompt-injection/ATR-2026-02015-dense-emoji-only-payload-flood.yaml +30 -72
  701. package/rules/prompt-injection/ATR-2026-02016-reversed-payload-string.yaml +31 -76
  702. package/rules/prompt-injection/ATR-2026-02018-regional-indicator-flag-emoji-letter-spelling-sp.yaml +30 -71
  703. package/rules/prompt-injection/ATR-2026-02019-python-interpreter-role-assignment-exec-framing.yaml +31 -77
  704. package/rules/prompt-injection/ATR-2026-02020-obfuscated-token-reconstruction-via-character-su.yaml +30 -72
  705. package/rules/prompt-injection/ATR-2026-02120-agentdojo-important-message-identity-spoof-pretext.yaml +31 -81
  706. package/rules/prompt-injection/ATR-2026-02210-negation-topic-evil-persona-two-script-jailbreak.yaml +33 -87
  707. package/rules/prompt-injection/ATR-2026-02230-conditional-keyword-trigger-override.yaml +35 -88
  708. package/rules/prompt-injection/ATR-2026-02232-brand-persona-opinion-hijack.yaml +27 -75
  709. package/rules/prompt-injection/ATR-2026-02374-rot13-base64-obfuscated-shell-jailbreak.yaml +38 -90
  710. package/rules/prompt-injection/ATR-2026-02377-novel-persona-jailbreak-cosignal.yaml +32 -64
  711. package/rules/prompt-injection/ATR-2026-02500-prompt-layer-self-replication.yaml +183 -0
  712. package/rules/prompt-injection/ATR-2026-02502-covert-remote-script-injection-into-generated-artifacts.yaml +106 -0
  713. package/rules/prompt-injection/ATR-2026-02846-semantic-ignore-previous-and-following-instructio.yaml +115 -0
  714. package/rules/prompt-injection/ATR-2026-02851-fake-user-turn-send-email-instruction.yaml +76 -0
  715. package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +30 -86
  716. package/rules/skill-compromise/ATR-2026-00061-description-behavior-mismatch.yaml +42 -165
  717. package/rules/skill-compromise/ATR-2026-00062-hidden-capability.yaml +40 -80
  718. package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +46 -92
  719. package/rules/skill-compromise/ATR-2026-00064-over-permissioned-skill.yaml +40 -109
  720. package/rules/skill-compromise/ATR-2026-00065-skill-update-attack.yaml +37 -75
  721. package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +42 -88
  722. package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +33 -182
  723. package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +33 -164
  724. package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +29 -132
  725. package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +33 -110
  726. package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +40 -133
  727. package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +26 -107
  728. package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +23 -102
  729. package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +33 -114
  730. package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +23 -148
  731. package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +35 -62
  732. package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +24 -105
  733. package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +27 -138
  734. package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +35 -45
  735. package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +28 -145
  736. package/rules/skill-compromise/ATR-2026-00151-fork-impersonation-install.yaml +39 -69
  737. package/rules/skill-compromise/ATR-2026-00157-timebomb-credential-exfil.yaml +41 -96
  738. package/rules/skill-compromise/ATR-2026-00200-agent-memory-config-tampering.yaml +41 -84
  739. package/rules/skill-compromise/ATR-2026-00214-credential-theft.yaml +36 -50
  740. package/rules/skill-compromise/ATR-2026-00217-credential-harvesting.yaml +50 -98
  741. package/rules/skill-compromise/ATR-2026-00220-malware-dropper.yaml +45 -85
  742. package/rules/skill-compromise/ATR-2026-00222-credential-harvesting.yaml +46 -85
  743. package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +46 -83
  744. package/rules/skill-compromise/ATR-2026-00224-credential-exfiltration.yaml +46 -92
  745. package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +46 -86
  746. package/rules/skill-compromise/ATR-2026-00260-package-hallucination.yaml +51 -93
  747. package/rules/skill-compromise/ATR-2026-00262-av-evasion-code-gen.yaml +49 -90
  748. package/rules/skill-compromise/ATR-2026-00263-credential-file-read-gen.yaml +53 -94
  749. package/rules/skill-compromise/ATR-2026-00266-malware-dropper-gen.yaml +51 -92
  750. package/rules/skill-compromise/ATR-2026-00283-malwaregen-generic-virus-payload-request.yaml +51 -96
  751. package/rules/skill-compromise/ATR-2026-00398-huggingface-unsafe-model-artifact-load.yaml +57 -110
  752. package/rules/skill-compromise/ATR-2026-00425-nl-persistent-covert-hook.yaml +24 -65
  753. package/rules/skill-compromise/ATR-2026-00427-nl-fake-error-instruction-bypass.yaml +24 -65
  754. package/rules/skill-compromise/ATR-2026-00429-nl-skill-self-modification.yaml +24 -65
  755. package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +62 -162
  756. package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +43 -175
  757. package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +49 -159
  758. package/rules/skill-compromise/ATR-2026-01755-backdoor-pot-linguistic-trigger-phrase.yaml +40 -88
  759. package/rules/skill-compromise/ATR-2026-01756-backdoor-pot-symbol-emoticon-trigger.yaml +27 -73
  760. package/rules/skill-compromise/ATR-2026-02261-code-credential-exfil-chain.yaml +35 -161
  761. package/rules/skill-compromise/ATR-2026-02405-malicious-skill-package-structure.yaml +51 -201
  762. package/rules/skill-compromise/ATR-2026-02410-malicious-artifact-on-vendor-domain.yaml +54 -204
  763. package/rules/skill-compromise/ATR-2026-02600-in-source-reverse-shell-assembly.yaml +106 -0
  764. package/rules/skill-compromise/ATR-2026-02610-evaluated-config-credential-command.yaml +109 -0
  765. package/rules/skill-compromise/ATR-2026-02818-skill-manifest-declares-attack-purpose.yaml +80 -0
  766. package/rules/skill-compromise/ATR-2026-02845-agent-cryptomining-payload.yaml +102 -0
  767. package/rules/tool-poisoning/ATR-2026-00010-mcp-malicious-response.yaml +80 -209
  768. package/rules/tool-poisoning/ATR-2026-00011-tool-output-injection.yaml +35 -144
  769. package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +32 -130
  770. package/rules/tool-poisoning/ATR-2026-00013-tool-ssrf.yaml +32 -146
  771. package/rules/tool-poisoning/ATR-2026-00095-supply-chain-poisoning.yaml +29 -104
  772. package/rules/tool-poisoning/ATR-2026-00096-registry-poisoning.yaml +33 -94
  773. package/rules/tool-poisoning/ATR-2026-00100-consent-bypass-instruction.yaml +22 -100
  774. package/rules/tool-poisoning/ATR-2026-00101-trust-escalation-override.yaml +34 -54
  775. package/rules/tool-poisoning/ATR-2026-00103-hidden-safety-bypass-instruction.yaml +19 -89
  776. package/rules/tool-poisoning/ATR-2026-00105-silent-action-concealment.yaml +22 -101
  777. package/rules/tool-poisoning/ATR-2026-00106-schema-description-contradiction.yaml +31 -51
  778. package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +54 -160
  779. package/rules/tool-poisoning/ATR-2026-00209-mcpwn-runaway-invocation.yaml +50 -114
  780. package/rules/tool-poisoning/ATR-2026-00210-flowise-system-message-override.yaml +48 -111
  781. package/rules/tool-poisoning/ATR-2026-00259-ansi-escape-injection.yaml +48 -104
  782. package/rules/tool-poisoning/ATR-2026-00270-xss-in-tool-response.yaml +47 -97
  783. package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +46 -95
  784. package/rules/tool-poisoning/ATR-2026-00393-ansi-code-elicitation-request.yaml +51 -104
  785. package/rules/tool-poisoning/ATR-2026-00415-flowise-custom-mcp-stdio-rce.yaml +47 -119
  786. package/rules/tool-poisoning/ATR-2026-00419-cursor-mcp-zero-click-config.yaml +57 -148
  787. package/rules/tool-poisoning/ATR-2026-00434-mcp-remote-authorization-endpoint-command-injection.yaml +47 -122
  788. package/rules/tool-poisoning/ATR-2026-00435-azure-mcp-server-missing-authentication.yaml +46 -116
  789. package/rules/tool-poisoning/ATR-2026-00448-spring-ai-milvus-filter-injection.yaml +51 -134
  790. package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +47 -120
  791. package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +45 -117
  792. package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +40 -130
  793. package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +64 -157
  794. package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +41 -128
  795. package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +41 -117
  796. package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +40 -143
  797. package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +44 -117
  798. package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +40 -100
  799. package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +39 -97
  800. package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +39 -100
  801. package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +46 -140
  802. package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +58 -172
  803. package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +63 -186
  804. package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +50 -142
  805. package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +51 -134
  806. package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +48 -121
  807. package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +52 -121
  808. package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +49 -125
  809. package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +51 -122
  810. package/rules/tool-poisoning/ATR-2026-00561-fastmcp-vulnerable-to-windows-command-in.yaml +36 -73
  811. package/rules/tool-poisoning/ATR-2026-00567-mcp-stdio-config-command-injection.yaml +29 -53
  812. package/rules/tool-poisoning/ATR-2026-00568-agent-ssrf-cloud-metadata-file-inclusion.yaml +27 -54
  813. package/rules/tool-poisoning/ATR-2026-00572-symjack-symlink-config-redirection.yaml +41 -103
  814. package/rules/tool-poisoning/ATR-2026-00575-miasma-npm-worm-agent-config-backdoor.yaml +41 -110
  815. package/rules/tool-poisoning/ATR-2026-00576-hades-agent-credential-theft.yaml +40 -125
  816. package/rules/tool-poisoning/ATR-2026-00577-create-mcp-server-stdio-exec-command-injection.yaml +53 -169
  817. package/rules/tool-poisoning/ATR-2026-00581-mcp-tool-rug-pull-post-approval-redefinition.yaml +38 -137
  818. package/rules/tool-poisoning/ATR-2026-00714-tool-camouflage-forced-tool-call.yaml +33 -78
  819. package/rules/tool-poisoning/ATR-2026-00715-tool-knowledge-hijack-identity-injection.yaml +39 -87
  820. package/rules/tool-poisoning/ATR-2026-00716-ipi-data-destruction-carrier.yaml +31 -76
  821. package/rules/tool-poisoning/ATR-2026-00720-tool-misuse-privilege-escalation-social.yaml +29 -71
  822. package/rules/tool-poisoning/ATR-2026-01300-mcp-notes-param-chat-history-exfil.yaml +37 -102
  823. package/rules/tool-poisoning/ATR-2026-01301-tool-description-exclusive-tool-override.yaml +36 -92
  824. package/rules/tool-poisoning/ATR-2026-01302-fake-tool-result-instruction-injection.yaml +33 -88
  825. package/rules/tool-poisoning/ATR-2026-01303-tool-schema-enumeration-social-engineering.yaml +55 -107
  826. package/rules/tool-poisoning/ATR-2026-01306-mcp-oauth-command-injection.yaml +35 -87
  827. package/rules/tool-poisoning/ATR-2026-01307-mcp-dns-rebinding-attack.yaml +36 -91
  828. package/rules/tool-poisoning/ATR-2026-01310-mcp-tool-description-compliance-history-exfil.yaml +40 -110
  829. package/rules/tool-poisoning/ATR-2026-01775-semantic-mcp-tool-manifest-poisoning.yaml +51 -139
  830. package/rules/tool-poisoning/ATR-2026-01927-mcp-server-kubernetes-kubectl-command-injection.yaml +45 -109
  831. package/rules/tool-poisoning/ATR-2026-01928-framelink-figma-mcp-curl-fallback-command-injection.yaml +58 -164
  832. package/rules/tool-poisoning/ATR-2026-01930-mcp-sampling-prompt-injection.yaml +48 -129
  833. package/rules/tool-poisoning/ATR-2026-01931-gemini-mcp-tool-command-injection-file-exfil.yaml +42 -113
  834. package/rules/tool-poisoning/ATR-2026-01932-shadow-undeclared-mcp-server-registration.yaml +43 -106
  835. package/rules/tool-poisoning/ATR-2026-01935-litellm-custom-code-sandbox-escape-cve-2026-40217.yaml +44 -101
  836. package/rules/tool-poisoning/ATR-2026-01952-praisonai-codemode-sandbox-escape-rce.yaml +34 -70
  837. package/rules/tool-poisoning/ATR-2026-01953-praisonai-codemode-function-ctor-sandbox-escape.yaml +61 -79
  838. package/rules/tool-poisoning/ATR-2026-01959-openhuman-shell-allowlist-env-prefix-bypass.yaml +36 -123
  839. package/rules/tool-poisoning/ATR-2026-01963-praisonai-action-orchestrator-step-target-path-traversal-rce.yaml +61 -66
  840. package/rules/tool-poisoning/ATR-2026-01965-flowise-custommcp-os-command-rce.yaml +39 -80
  841. package/rules/tool-poisoning/ATR-2026-01967-deepchat-mermaid-xss-rce-ipc-mcp-register.yaml +58 -66
  842. package/rules/tool-poisoning/ATR-2026-01968-deepchat-markdown-deeplink-openexternal-rce-bypass.yaml +44 -92
  843. package/rules/tool-poisoning/ATR-2026-01970-praisonai-filetools-normpath-path-traversal.yaml +64 -84
  844. package/rules/tool-poisoning/ATR-2026-01973-anythingllm-logo-endpoint-path-traversal.yaml +57 -64
  845. package/rules/tool-poisoning/ATR-2026-01978-anythingllm-collector-process-filename-path-traversal-delete.yaml +58 -64
  846. package/rules/tool-poisoning/ATR-2026-01979-pandasai-prompt-injection-dunder-sandbox-escape-rce.yaml +60 -72
  847. package/rules/tool-poisoning/ATR-2026-01980-agentic-flow-mcp-tool-param-command-injection.yaml +49 -99
  848. package/rules/tool-poisoning/ATR-2026-01982-dbt-mcp-node-selection-argument-injection.yaml +49 -102
  849. package/rules/tool-poisoning/ATR-2026-01983-mcp-for-stata-log-file-name-command-injection.yaml +43 -110
  850. package/rules/tool-poisoning/ATR-2026-01985-mcp-connect-bridge-unauth-process-spawn-rce.yaml +41 -115
  851. package/rules/tool-poisoning/ATR-2026-01987-langroid-sqlchatagent-prompt-to-sql-rce.yaml +53 -110
  852. package/rules/tool-poisoning/ATR-2026-02021-mcp-inspector-unauthenticated-proxy-rce.yaml +48 -123
  853. package/rules/tool-poisoning/ATR-2026-02022-curxecute-cursor-mcp-json-injected-server-rce.yaml +51 -131
  854. package/rules/tool-poisoning/ATR-2026-02023-escaperoute-filesystem-mcp-prefix-bypass.yaml +48 -129
  855. package/rules/tool-poisoning/ATR-2026-02024-escaperoute-filesystem-mcp-symlink-launchagent.yaml +49 -128
  856. package/rules/tool-poisoning/ATR-2026-02025-mcp-full-schema-poisoning-nondescription-field.yaml +50 -142
  857. package/rules/tool-poisoning/ATR-2026-02027-diagnostic-content-remediation-command-injection.yaml +58 -72
  858. package/rules/tool-poisoning/ATR-2026-02041-shell-injection-echo-marker-poc.yaml +32 -93
  859. package/rules/tool-poisoning/ATR-2026-02102-html-injection-tool-arg-approval-ui-xss.yaml +33 -107
  860. package/rules/tool-poisoning/ATR-2026-02141-mcp-server-config-command-execution.yaml +42 -107
  861. package/rules/tool-poisoning/ATR-2026-02145-python-sandbox-escape-generator-frame-introspection.yaml +36 -105
  862. package/rules/tool-poisoning/ATR-2026-02193-ssrf-ipv6-noncanonical-loopback-bypass.yaml +35 -86
  863. package/rules/tool-poisoning/ATR-2026-02194-go-init-func-process-exec-codegen-rce.yaml +35 -83
  864. package/rules/tool-poisoning/ATR-2026-02233-unscoped-destructive-db-request-nl.yaml +34 -95
  865. package/rules/tool-poisoning/ATR-2026-02260-agentjacking-remediation-framed-execution.yaml +42 -107
  866. package/rules/tool-poisoning/ATR-2026-02263-workflow-sql-template-expression-injection.yaml +35 -119
  867. package/rules/tool-poisoning/ATR-2026-02350-mcp-json-rpc-case-duplicate-key-tool-smuggling.yaml +34 -100
  868. package/rules/tool-poisoning/ATR-2026-02352-imap-search-command-injection-email-tool-args.yaml +32 -93
  869. package/rules/tool-poisoning/ATR-2026-02372-unsigned-task-feed-npm-npx-lifecycle-rce.yaml +39 -101
  870. package/rules/tool-poisoning/ATR-2026-02376-tool-description-conversational-trigger-history-exfil.yaml +33 -84
  871. package/rules/tool-poisoning/ATR-2026-02403-mcp-external-content-missing-spotlighting.yaml +52 -282
  872. package/rules/tool-poisoning/ATR-2026-02514-mcp-server-metadata-url-html-breakout.yaml +105 -0
  873. package/rules/tool-poisoning/ATR-2026-02542-pipeline-query-stage-injection.yaml +95 -0
  874. package/rules/tool-poisoning/ATR-2026-02557-shell-separator-in-path-typed-tool-argument.yaml +112 -0
  875. package/rules/tool-poisoning/ATR-2026-02666-url-userinfo-decoy-host-allowlist-bypass.yaml +101 -0
  876. package/rules/tool-poisoning/ATR-2026-02668-vcs-ref-name-command-substitution.yaml +98 -0
  877. package/rules/tool-poisoning/ATR-2026-02669-query-pipeline-stage-in-identifier-parameter.yaml +88 -0
  878. package/rules/tool-poisoning/ATR-2026-02682-xml-entity-expansion-bomb.yaml +98 -0
  879. package/rules/tool-poisoning/ATR-2026-02707-crlf-header-injection-mail-tool-argument.yaml +88 -0
  880. package/spec/README.md +2 -2
  881. package/spec/atr-correlation-v1.0.md +16 -4
  882. package/spec/atr-method-v1.1.md +2 -0
  883. package/spec/atr-profile-v1.0.md +11 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,1117 @@
1
+ # Changelog
2
+
3
+ All notable changes to ATR will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [4.1.5] - 2026-10-10
8
+
9
+ 4.1.4 was staged on npm and removed by publish-time scanning before it could be
10
+ approved, like 4.1.1 to 4.1.3. 4.0.0 passed that scanning. What the 4.1 line
11
+ added were rules whose test samples are complete attack snippets: a
12
+ crypto-miner command line with a mining-pool URL, PHP, JSP and ASPX webshells,
13
+ and a Node.js reverse shell. This release carries the 4.1.4 rules and engine,
14
+ packaged without those samples.
15
+
16
+ ### Changed
17
+
18
+ - **The npm package ships the rules without their test samples.** The release
19
+ workflow removes `test_cases` and `evasion_tests` from each rule just before
20
+ staging, after the tests have run on the full rules. The engine does not read
21
+ them, so detection is unchanged: the same rules load and the same rules fire.
22
+ The samples stay in the repository. With the package alone, `atr test` on a
23
+ bundled rule has no samples to run, and `atr stats` reports zero TP/TN
24
+ counts. DISCLOSURE says so.
25
+
26
+ ### Fixed
27
+
28
+ - **ATR-2026-02600 no longer names a real public IP in its test samples.** Its
29
+ two reverse-shell samples now connect to the documentation ranges 203.0.113.14
30
+ and 192.0.2.4. The detection is unchanged.
31
+ - **ATR-2026-02627 describes the web shells it detects instead of quoting
32
+ them.** Its description and one false-positive note quoted a working one-line
33
+ PHP command shell; they now say what it is. The detection is unchanged.
34
+
35
+ ### Changed
36
+
37
+ - **npm releases go only through the staged path in `publish.yml`.** The
38
+ package is dual-use, so npm's policy lets CI stage a version but not publish
39
+ one; a maintainer promotes it with 2FA. Three workflows could still put a
40
+ version on the registry another way and have been removed:
41
+ `publish-current-version.yml` (direct `npm publish` through trusted
42
+ publishing), `publish-on-rules-merge.yml` (bumped and ran `npm publish` with
43
+ `NPM_TOKEN` on pushes to `main`) and `npm-stage.yml` (approved staged
44
+ versions from CI with `NPM_TOKEN`, skipping the maintainer's 2FA).
45
+ `scripts/release.sh` now stops at the tag push instead of also publishing
46
+ locally. No workflow references `NPM_TOKEN`, and
47
+ `tests/npm-release-path.test.ts` fails if any workflow other than
48
+ `publish.yml` gains a publish, stage or approve step.
49
+
50
+ ## [4.1.4] - 2026-10-07
51
+
52
+ > Not published to npm (see 4.1.5).
53
+
54
+ The first release since 4.0.0 meant to reach npm. 4.1.1, 4.1.2 and 4.1.3 were
55
+ each blocked by npm's publish-time malware scanning, which reads the attack
56
+ strings in rule files as malware, so `npm install agent-threat-rules` still
57
+ returns 4.0.0. This release declares the package dual-use (see Changed below)
58
+ and goes through npm's staged publishing, approved by a maintainer with 2FA. It
59
+ carries everything listed under 4.1.3, 4.1.2, 4.1.1 and 4.1.0 below.
60
+
61
+ ### Added
62
+
63
+ - **Four rules.** Each one passed the repository's PR checks, and is
64
+ experimental, maturity `test`, with alert-level response actions only:
65
+ - ATR-2026-02846: ignore-previous-and-following instructions (PromptInject
66
+ goal hijacking), a semantic rule with a narrow regex fallback.
67
+ - ATR-2026-02847: email exfiltration under a policy, audit or compliance
68
+ pretext.
69
+ - ATR-2026-02850: data exfiltration by email under a documentation pretext,
70
+ including French phrasings.
71
+ - ATR-2026-02851: a fake user turn inside content that instructs the agent to
72
+ send an email.
73
+ ATR-2026-02847, 02850 and 02851 come from human-written attack emails
74
+ (LLMail-Inject). They fire on none of 526 real emails or 694 benign web pages
75
+ presented as tool output, and each catches attack emails that were held out
76
+ while the rule was written.
77
+
78
+ ### Fixed
79
+
80
+ - **pyATR falls back for regex conditions Python's `re` cannot compile** (such
81
+ as variable-width lookbehind) instead of dropping the condition (#554, thanks
82
+ @dc-tw).
83
+ - **The test-case validator reads every key a test case can use.** It read four
84
+ of nine and misjudged rules whose cases use the others. Its failure count on
85
+ the current rules drops from 40 to 11, with no new failures (#607).
86
+
87
+ ### Security
88
+
89
+ - **`atr tc pull` checks the rules a Threat Cloud endpoint returns before
90
+ writing them, and no longer goes through a shell.** The response is now
91
+ treated as untrusted: a rule is written only if its id has the form
92
+ `ATR-YYYY-NNNNN`, its category is one of the schema's categories and no rule
93
+ with that id is already in the repo; anything else is rejected without
94
+ touching the disk. The validator then runs as a separate Node.js process with
95
+ the file path as a plain argument. Before, the id and category came from the
96
+ response unchecked and the validator was started through a shell, so a
97
+ compromised or impersonated endpoint could affect the operator's machine
98
+ beyond the rules directory. The category is also read from the rule's `tags`,
99
+ not from the first `subcategory:` line in a compliance block, and the
100
+ validator is found next to the installed CLI rather than in the current
101
+ directory, so valid rules are no longer filed under the wrong directory or
102
+ rejected when the command runs outside a checkout of this repo.
103
+
104
+ ### Changed
105
+
106
+ - **The package is declared dual-use under the npm Dual-Use Content Policy.**
107
+ npm's publish-time malware scanning, introduced in July 2026, blocked 4.1.1,
108
+ 4.1.2 and 4.1.3: rule files carry attack strings by design, as detection
109
+ patterns and test samples, and the scanner treats them like malware.
110
+ `package.json` now carries `"contentPolicy": {"class": "dual-use"}`, and a
111
+ plain-text `DISCLOSURE` file at the package root says what the attack content
112
+ is for and what the package does not do. Under that policy, CI may only stage
113
+ a release; a maintainer approves it with 2FA before it goes live, so
114
+ `publish.yml` now stages through trusted publishing and waits for the approval
115
+ before creating the GitHub release.
116
+
117
+ ## [4.1.3] - 2026-10-06
118
+
119
+ > Not published to npm (see 4.1.4).
120
+
121
+ The first release of the 4.1 line to reach npm; 4.1.2 did not either. Its
122
+ publish on 2026-10-01 went through trusted publishing (OIDC), printed
123
+ `+ agent-threat-rules@4.1.2`, and was placed in npm's staging queue instead of
124
+ being published. It never appeared on the registry, and a re-run on 2026-10-05
125
+ was refused with E409 ("Cannot publish over previously staged version"), so the
126
+ number is skipped like 4.1.1. The trusted publisher has since been set to allow
127
+ direct publishing. Rules, engine and spec are unchanged from the `v4.1.2` tag.
128
+
129
+ ### Changed
130
+
131
+ - **The release workflow fails when the version never reaches the registry.**
132
+ It now asks npm for the exact version after publishing, waits up to ten
133
+ minutes, and fails before the GitHub release is created. Before, the check
134
+ read `latest`, ran after the release, and only warned, which is how both 4.1.1
135
+ and 4.1.2 went green without being published (#633).
136
+
137
+ ## [4.1.2] - 2026-10-01
138
+
139
+ > Not published to npm (see 4.1.3).
140
+
141
+ The first release of the 4.1 line to reach npm. Until this one,
142
+ `npm install agent-threat-rules` returned 4.0.0. 4.1.2 carries everything
143
+ listed under 4.1.1 and 4.1.0 below. Rules, engine and spec are unchanged from
144
+ the `v4.1.1` tag; the README rewords one row of its ETSI mapping, which had
145
+ stated a conformance requirement as a fact about the corpus.
146
+
147
+ Neither earlier 4.1 tag reached the registry:
148
+
149
+ - `4.1.0` (tagged 2026-09-14): the publish step got E404 on the registry PUT.
150
+ - `4.1.1` (tagged 2026-09-22): the tag-triggered publish failed with EOTP, npm
151
+ asking CI for a one-time password. A manual republish later that day was
152
+ placed in npm's staging queue instead of being published, and the retry on
153
+ 2026-09-23 was refused with E409. npm does not allow publishing over a staged
154
+ version, so the number is skipped.
155
+
156
+ The 4.1.1 entry below opens by calling itself the first 4.1 release to reach
157
+ npm. It was not; the entry is otherwise left as written.
158
+
159
+ ### Changed
160
+
161
+ - **Releases publish through npm trusted publishing (OIDC).** `publish.yml` no
162
+ longer reads a registry token. npm mints a short-lived credential for each
163
+ run, bound to this repository and that workflow file, and generates the
164
+ provenance attestation itself (#606).
165
+
166
+ ## [4.1.1] - 2026-09-22
167
+
168
+ > Not published to npm (see 4.1.2).
169
+
170
+ The first release of the 4.1 line to actually reach npm. `4.1.0` was tagged on
171
+ 2026-09-14 and never published — the publish step failed on an expired registry
172
+ token and nobody was watching, so for 30 days `npm install agent-threat-rules`
173
+ kept returning 4.0.0 while `main` moved 38 commits ahead. **4.1.1 carries
174
+ everything listed under 4.1.0 below, plus the entries here.** The version number
175
+ skips 4.1.0 on purpose, so that what is on npm and what the git tag points at are
176
+ the same tree.
177
+
178
+ ### Security
179
+
180
+ - **`ATR-2026-00220` condition 2 backtracked catastrophically**, the same defect
181
+ as condition 0 of the same rule, which was fixed in #531 — a quantified run of
182
+ base64 characters between two unbounded `.*` gaps, with a literal at the end.
183
+ Only condition 0 was rewritten at the time. Measured on Node against a
184
+ base64-dense single line with no matching tail: 0.5s at 1 KB, 3.4s at 2 KB,
185
+ **23.4s at 4 KB**. The gaps are now bounded and the run is fixed-length;
186
+ the same inputs measure under a millisecond at 64 KB. All five of the rule's
187
+ true positives still fire and all five true negatives stay clean, with
188
+ condition 2 matching exactly the cases it matched before.
189
+ Reported as GHSA-66x9-5vw9-3wv3 against condition 0, which 4.1.0 had already
190
+ fixed; this closes the half of the rule that report did not cover.
191
+ - **The package no longer ships a default endpoint for detection data.**
192
+ Reporting has been opt-in since 4.1.0, but opting in without naming a
193
+ recipient silently picked one. `--report-to-cloud` now requires `--tc-url` or
194
+ `ATR_TC_URL` and exits with an error naming the fix if neither is set. ATR is
195
+ an open standard, not one collector's client: an operator who turns reporting
196
+ on decides who receives it, and there is no address in the package to forget
197
+ to change. Detection events now also carry an `X-ATR-Client-Id` header; the
198
+ previous vendor-named header is still sent so existing collectors keep working.
199
+
200
+ > **Nine conditions still backtrack** and are listed in
201
+ > [`data/redos-baseline.json`](data/redos-baseline.json) with measured
202
+ > times — `ATR-2026-00285#0` and `ATR-2026-00272#0` are the worst at 16s and
203
+ > 14s, and `ATR-2026-00707#0` is `maturity: stable`, which means it runs in the
204
+ > enforce lane. The ReDoS gate is a ratchet against that file: a green gate
205
+ > means nothing got worse, not that the class is closed. Do not read this
206
+ > release as "ReDoS fixed".
207
+
208
+ ### Changed
209
+
210
+ - `CHANGELOG.md` is now included in the npm tarball. The `files` allowlist had
211
+ excluded it, so a release that fixed a security defect arrived at consumers
212
+ with nothing in the package to say so.
213
+
214
+ ### Fixed — external claims that overstated what had happened
215
+
216
+ - **The npm package `description` claimed a vendor product shipped the ATR rule
217
+ pack.** What actually happened is that rules were merged into
218
+ `cisco-ai-defense/skill-scanner`, an open-source scanner repository — not the
219
+ same thing as shipping inside that vendor's product. The blurb is the single
220
+ most-copied sentence in the project, so it now says what the package is and
221
+ makes no adoption claim at all (#580).
222
+ - **Withdrew the two per-lane false-positive rates** published alongside the
223
+ enforce/hunt split. Three defects, any one of which is disqualifying: both
224
+ were measured on a subsample roughly a sixth of the corpus they were credited
225
+ to; the benign corpus contained real jailbreak samples — material the rules
226
+ are meant to catch, sitting in the set that defines a false positive — until
227
+ an exclusion filter landed on 2026-08-04 (#373); and the ladder that produced
228
+ the hunt figure depended on a file no longer in the repository, so that figure
229
+ cannot be reproduced at all. A gap is more useful to an adopter than a number
230
+ nobody can reproduce. Re-measurement against the current benign corpus is
231
+ pending, and neither figure should be cited by anyone until it lands (#579).
232
+ - **Corrected the fiscal sponsor's legal identity.** Nine files carried an EIN
233
+ that corresponds to no organization, and five of them additionally described
234
+ the sponsor as a 501(c)(3) when it is a 501(c)(6). The distinction is
235
+ substantive rather than cosmetic: funders that restrict grants to 501(c)(3)
236
+ recipients would have been misled (#578).
237
+
238
+ ## [4.1.0] - 2026-09-14
239
+
240
+ > **Never published to npm.** The tag `v4.1.0` exists, but the publish failed on
241
+ > an expired registry token and was not retried for 30 days. This version number
242
+ > does not exist on the registry and never will; everything below shipped in
243
+ > 4.1.1 instead.
244
+
245
+ At release: 825 rule files, 818 effective.
246
+
247
+ ### Added
248
+
249
+ - **A benign-twin corpus: 1,788 benign counterparts to attack payloads**, across
250
+ 17 files, counted at the `v4.1.0` tag. Built so that a rule which fires on the
251
+ harmless sibling of the attack it targets can be caught before it ships. It
252
+ demoted one production rule on arrival.
253
+ - **Forty rules from the full proposal re-sweep**, landed as four batches of
254
+ ten, plus fifteen from the CVE proposal backlog (#503, #504).
255
+ - **A precompiled rule digest for consumers that cannot take an engine**
256
+ (#510), with a Python-verified variant, and a PyRIT digest that carries
257
+ every field and names the scope it is safe to use (#511).
258
+ - `pyatr` 0.3.0: bundle refreshed, and the behaviour that had blocked the
259
+ refresh unpinned (#507).
260
+
261
+ ### Fixed — catastrophic backtracking
262
+
263
+ - **Eight rules could be made to backtrack catastrophically**; the patterns are
264
+ rewritten and a gate now blocks the class from returning (#531).
265
+ `ATR-2026-02610` condition 0 was fixed separately for the same defect.
266
+ - **`ATR-2026-01005`, the many-shot rule, is now linear** without giving up RE2
267
+ portability — the obvious fix would have traded one for the other (#546).
268
+
269
+ ### Fixed
270
+
271
+ - **Ten rules from the re-sweep were withheld rather than shipped**: each fired
272
+ on its own benign twin from the same run, so the twin corpus caught them
273
+ before release (#565). `ATR-2026-02604` was withheld earlier for the same
274
+ reason.
275
+ - **`\u{...}` is a JavaScript-only escape, so ten rules never compiled outside
276
+ the TypeScript engine** — they were silently absent for every other consumer
277
+ (#509).
278
+ - The Sigma exporter did not preserve ATR's regex case semantics (#520).
279
+ - The AVID importer stopped at the API's page limit instead of enumerating all
280
+ reports (#534).
281
+ - The quality gate now checks peer true negatives within the same PR (#529),
282
+ and the website shows the effective rule count rather than the raw file count.
283
+
284
+ ### Removed
285
+
286
+ - The one-shot bootstrap publish workflow, once it had served its purpose
287
+ (#541).
288
+
289
+ ## [4.0.0] - 2026-08-22
290
+
291
+ > Releases 3.5.1 through 3.5.12 were automated rule-publish releases cut from
292
+ > this same stretch of history and were never given their own entries. A few
293
+ > items below — the benchmark-number corrections in particular — were first
294
+ > published in one of them rather than in 4.0.0.
295
+
296
+ ### Changed — blocking is now opt-in (BREAKING for anyone relying on the old default)
297
+
298
+ - **`atr guard` no longer emits a `permissionDecision` unless blocking is
299
+ enabled.** The Claude Code PreToolUse payload now carries the detection
300
+ (`atr_decision`, `atr_reason`, `matched_rules`, `atr_advisory: true`) and drops
301
+ the `hookSpecificOutput` envelope entirely, so the host applies its own
302
+ permission flow. `toClaudeCodePostToolUse` likewise omits `decision: 'block'`
303
+ (its envelope is kept: a permissive verdict has always emitted it with no
304
+ decision inside).
305
+ The whole envelope goes rather than just the decision field as a **legibility**
306
+ choice, not a compatibility one. Both shapes are in fact accepted: the
307
+ hook-output schema in the shipped Claude Code 2.1.76 bundle declares
308
+ `hookSpecificOutput` optional, its PreToolUse member declares
309
+ `permissionDecision` optional, and the object is not strict, so unknown
310
+ top-level keys are stripped rather than rejected — which is also why
311
+ `atr_decision` and `matched_rules` have shipped alongside it all along. A
312
+ payload with no envelope simply cannot be misread as a decision that failed to
313
+ serialise.
314
+
315
+ - **ATR never emits `permissionDecision: "allow"` — in either mode.** This is
316
+ wider than the blocking switch and is the part most likely to surprise: turning
317
+ blocking ON does **not** bring the affirmative decision back. In the PreToolUse
318
+ contract `allow` is not neutral; it is an approval that suppresses the host's
319
+ own permission prompt, so a hooked session would permit *more* than an unhooked
320
+ one on every operation ATR simply had not looked for. "No rule matched" is ATR
321
+ having nothing to say, and the way to say nothing on that channel is to omit
322
+ the field. A decision is therefore emitted only for the two verdicts that
323
+ **restrain** — `deny` and `ask` — and only when blocking is on. Everything else
324
+ travels in `atr_decision` / `atr_reason` / `matched_rules`.
325
+ Consequence for the payload shape: with blocking ON and a permissive verdict
326
+ the `hookSpecificOutput` envelope is dropped too, exactly as in advisory mode.
327
+ `atr_advisory: true` marks the *mode*, not the verdict, so it is the one key
328
+ that distinguishes the two:
329
+
330
+ ```console
331
+ $ printf '%s\n' '{"hook":"PreToolUse","tool_name":"Bash","tool_input":{"command":"ls -la"},"session_id":"s1"}' \
332
+ | npx tsx src/cli.ts guard --blocking 2>/dev/null
333
+ {"atr_hook_event":"PreToolUse","atr_decision":"allow","atr_reason":"ALLOW: High-Risk Tool Invocation Without Human Confirmation [low/71% confidence] (1 rule matched)","matched_rules":["ATR-2026-00099"]}
334
+ ```
335
+
336
+ The PostToolUse contract needed no equivalent change: it has exactly one
337
+ sentinel, `decision: 'block'`, and the absence of the key *is* the
338
+ pass-through. There is no value that function could set to suppress a host
339
+ behaviour.
340
+ - **BREAKING for embedders: the library no longer reads the environment at all.**
341
+ `ATR_LANE` and `ATR_BLOCKING` are **CLI-only**. `ATREngine`, `ActionExecutor`
342
+ and `HookHandler` take their posture from explicit config or the built-in
343
+ default, and nothing else. If you embedded ATR and were relying on a variable
344
+ in the ambient environment to select a lane, **that no longer works** — pass
345
+ `new ATREngine({ lane })` instead.
346
+
347
+ ```ts
348
+ // With ATR_LANE=enforce ATR_BLOCKING=1 exported in the environment:
349
+ new ATREngine({ rulesDir }).getLane() // 'hunt' (was: 'enforce')
350
+ new ActionExecutor({ adapter }).isBlocking() // false
351
+ new HookHandler({ engine, executor }).isBlocking() // false
352
+ ```
353
+
354
+ Ambient configuration crosses trust boundaries invisibly. A `new ATREngine()`
355
+ inside a VS Code extension, a Mastra pipeline, or the `/openshell-filter`,
356
+ `/nemoclaw-preflight` and `/mcp` entry points never asked to be reconfigured by
357
+ a shell profile — and because `enforce` is a *valid* value, the old behaviour
358
+ produced no warning at all while narrowing those callers to `maturity: stable`
359
+ rules only.
360
+ The guarantee is **structural, not a convention**: `resolveLane` and
361
+ `resolveBlocking` now require an `EnvSource` argument with no `process.env`
362
+ default, so there is no overload that can fall through to the environment. Two
363
+ new library-facing helpers, `laneFromConfig()` and `blockingFromConfig()`, pass
364
+ a frozen empty environment; the new `resolveEnforcementPolicy()` is the only
365
+ function that reads `process.env` **for these two switches**, and `src/cli.ts` is its
366
+ only caller. `resolveLaneOrWarn`, `resolveBlockingOrWarn` and
367
+ `resetEnforcementWarnings` are **removed**.
368
+ One deliberate exception: `src/mcp-server.ts` reads `ATR_LANE` when the file is
369
+ the process entry point, because that makes it a CLI rather than a library. An
370
+ importer of the `./mcp` subpath does not reach that branch and gets its lane
371
+ from the explicit option.
372
+ Not the only function in the package that reads the environment: ten files
373
+ under `src/` read it in code, and two of them — `adapters/openshell-filter.ts`
374
+ and `adapters/nemoclaw-preflight.ts` — read `ATR_MIN_SEVERITY` and still block
375
+ by default, as the scope limit below records. `grep -rl "process\.env" src/`
376
+ returns eleven rather than ten: `src/index.ts` only names the variable in a
377
+ comment. An earlier revision of this paragraph published that grep count.
378
+
379
+ - **Scope limit, stated so the headline is not read wider than it is.** This
380
+ covers the two channels the engine itself drives: the Claude Code hook
381
+ contract and `ActionExecutor`. It does NOT cover the framework adapters, which
382
+ keep their own severity floor: `src/adapters/mastra.ts` defaults
383
+ `blockSeverities` to `["critical", "high"]`, and the `openshell-filter` and
384
+ `nemoclaw-preflight` CLI entry points default `ATR_MIN_SEVERITY` to `high`.
385
+ (The `NemoClawPreflight` and `OpenShellFilter` classes take no default at all —
386
+ an embedder must pass `minSeverity`. Only the CLI wrappers supply one.)
387
+
388
+ They stay as they are, and the reason is measured rather than assumed. Driving
389
+ each adapter through its own API, with the event shape it really constructs:
390
+
391
+ | adapter | corpus | blocks |
392
+ |---|---|---:|
393
+ | `ATRProcessor` (mastra) | 432 benign skills, fed as user messages | 6 (1.4%) |
394
+ | `NemoClawPreflight` | the same 432 as skill bundles — its actual domain | 2 (0.5%) |
395
+ | `OpenShellFilter` | 24 everyday developer commands | 1 (4.2%) |
396
+
397
+ Three caveats on those figures, because they are small enough to be quoted
398
+ carelessly. Feeding skill files to a Mastra processor is out of domain — it
399
+ sees chat messages, so 1.4% says little about real traffic. Twenty-four
400
+ hand-written commands are not a corpus. And the benign skill set has the blind
401
+ spots `scripts/gate-corpus-visibility.ts` exists to surface.
402
+
403
+ The one real blemish is the command `OpenShellFilter` refused:
404
+ `scp -i ~/.ssh/deploy.pem dist.tgz ci@build.corp:/tmp/`, an ordinary
405
+ deployment. That is a rule being too wide, not an adapter default being wrong,
406
+ and it is the same shape review already recorded against the scp work.
407
+
408
+ Reproduce with `npx tsx scripts/measure/adapter-defaults-<adapter>.mts`. Each
409
+ script aborts before printing if its control fails, so a zero there means the
410
+ measurement did not run rather than that nothing blocked.
411
+
412
+ Unlike the hook, these adapters are not installed by a script into a global
413
+ config. An integrator imports one and wires it into a pipeline on purpose,
414
+ which is what an explicit operator directive looks like. An earlier draft of
415
+ this entry was going to bring them under the same switch on the strength of a
416
+ 19.9% figure; that number came from feeding raw content straight to
417
+ `engine.evaluate` without the `type` each adapter sets, which bypasses the
418
+ `agent_source` filtering and fires rules the adapters never see.
419
+
420
+ - **An unrecognised `ATR_LANE` or `ATR_BLOCKING` warns on stderr, falls back to
421
+ the safe default, and the guard keeps running (exit 0).** `main` did not read
422
+ either variable, so a typo was previously inert. An earlier revision of this
423
+ branch threw from the constructor instead, which measured badly:
424
+ `ATR_BLOCKING=enabled npx atr guard` exited 1 with an empty stdout and no guard
425
+ running — landing hardest on the operator trying to turn enforcement ON.
426
+ `atr init` installs `atr guard` as a PreToolUse **command hook**, and Claude
427
+ Code 2.1.76 maps any exit status other than 0 or 2 to a non-blocking error: it
428
+ runs the tool anyway, hands the model nothing, and renders only
429
+ `<hookName> hook error` **without** the captured stderr. Exiting would have
430
+ discarded every detection and still not told the operator why; status 2, the
431
+ only loud one, blocks the tool outright, which a stray shell variable must
432
+ never do. The warnings are printed once, at startup, by the CLI — they are not
433
+ deduplicated per value, and the `resolveLaneOrWarn` / `resolveBlockingOrWarn` /
434
+ `resetEnforcementWarnings` helpers that did that are gone. Verbatim, prefixed
435
+ `[atr]` (red on a TTY):
436
+
437
+ ```text
438
+ [atr] Invalid ATR_LANE="enfroce". Expected one of: enforce, alert, hunt. Falling back to lane "hunt". Detection still runs; this only changes which maturities may fire.
439
+ [atr] Invalid ATR_BLOCKING="enabled". Expected one of: 1/true/yes/on or 0/false/no/off. Falling back to blocking=false. If you meant to enable enforcement, it is NOT enabled.
440
+ ```
441
+
442
+ A bad **flag** still exits 1 — `atr guard --lane enfroce` and
443
+ `atr scan --lane enfroce <target>` both print
444
+ `Error: Invalid --lane "enfroce". Expected one of: enforce, alert, hunt.` and
445
+ stop. A flag is typed at a prompt by someone who will see the exit code; an
446
+ inherited variable is not. An explicit bad argument
447
+ (`new ATREngine({ lane: 'enfroce' })`) still throws for the same reason.
448
+
449
+ - **An unreadable `ATR_LANE` forces blocking off, even against an explicit
450
+ `--blocking`.** Falling back to `hunt` while blocking stays on is the one
451
+ degraded posture that is *more* dangerous than the one requested: the operator
452
+ asked to enforce on `maturity: stable` rules only and would instead enforce on
453
+ every maturity. `--blocking` says "you may block", not "block on a lane I never
454
+ chose". `ATR_LANE=enfroce atr guard --blocking` therefore exits 0 in advisory
455
+ mode, having printed the lane warning above plus:
456
+
457
+ ```text
458
+ [atr] Blocking disabled: ATR_LANE could not be read, and blocking on the fallback lane "hunt" would enforce on more rule maturities than you asked for. Fix ATR_LANE to re-enable enforcement.
459
+ ```
460
+
461
+ - **Both switches now trim whitespace and ignore case, identically.** They were
462
+ asymmetric: `ATR_BLOCKING=ON` worked while `ATR_LANE=ENFORCE` did not, so the
463
+ pair `ATR_LANE=ENFORCE ATR_BLOCKING=ON` turned blocking on **and** silently
464
+ widened the lane to `hunt` — the operator asked for the narrowest enforcement
465
+ posture and got the broadest one. `ATR_LANE=ENFORCE`, `ATR_LANE=" alert "` and
466
+ `--lane Alert` are all honoured now.
467
+
468
+ - **A non-boolean explicit `blocking` throws instead of enabling blocking.**
469
+ `new ActionExecutor({ adapter, blocking: "false" })` and
470
+ `new HookHandler({ engine, executor, blocking: "false" })` previously turned
471
+ blocking **on**, because every non-empty string is truthy — reading, to their
472
+ author, as an explicit "off". Both now raise a `TypeError`, whose message in
473
+ full is:
474
+
475
+ ```text
476
+ Invalid blocking value "false" (string). Expected a boolean. Note that any non-empty string, including "false", would otherwise enable blocking.
477
+ ```
478
+
479
+ The lane path validated its explicit value from the start; a switch that fails
480
+ toward *more* enforcement was the wrong asymmetry to leave in place. This is
481
+ BREAKING for any JavaScript or JSON-config caller that was passing a string.
482
+
483
+ - **`ActionExecutor` no longer dispatches response actions above the `observe`
484
+ blast-radius tier unless blocking is enabled.** `alert` / `snapshot` /
485
+ `shadow` / `escalate` run exactly as before; `block_input` / `block_output` /
486
+ `block_tool` / `reduce_permissions` / `reset_context` / `quarantine_session` /
487
+ `kill_agent` are recorded as suppressed and the adapter is never called. The
488
+ tier ladder is read from `src/quality/action-eligibility.ts` — this change does
489
+ not introduce a second classification of what is destructive.
490
+ This closes the dual-channel contradiction where a benign
491
+ `Bash{command:"ls -la"}` produced `permissionDecision: "allow"` while the
492
+ executor really invoked `blockTool` on the adapter.
493
+ - **Both channels are governed by one switch**: the `blocking` config field on
494
+ `ActionExecutor` and `HookHandler` for embedders, and `--blocking` /
495
+ `--no-blocking` or `ATR_BLOCKING` on `atr guard` for the CLI. Default off. The
496
+ environment variable reaches the CLI only — see the embedder entry above.
497
+ - **Why**: `SPEC.md` §5.5 (Response) is the engine-wide requirement, quoted
498
+ whole because it is short enough to be: "Engines MUST NOT execute response
499
+ actions automatically without an explicit configuration directive from the
500
+ operator. The `response` field is a recommendation expressed by the Rule
501
+ author, not a directive to the Engine." That directive had no implementation —
502
+ no CLI flag, no environment variable, no documented config key by which an
503
+ operator could express it. This change is that implementation.
504
+ Two narrower statements point the same way. Neither is the requirement, and
505
+ neither may be quoted as a general rule:
506
+ - `spec/atr-method-v1.1.md` §5.6 (Provenance and Trust) sits under §5
507
+ Signature Method and is scoped to hash matches: "Engines SHOULD NOT
508
+ auto-block on a hash match without operator policy explicitly enabling it;
509
+ the default response action SHOULD be `log_alert` until provenance is
510
+ operator-trusted." An earlier revision of this entry quoted that sentence
511
+ with "on a hash match" elided, which turned a Signature-Rule SHOULD NOT into
512
+ an engine-wide one. It is not one. Quote it whole or cite §5.5 instead.
513
+ - `docs/QUALITY-STANDARD.md` ("For Consumers") restricts blocking to
514
+ `maturity: stable` with confidence ≥ 80. That is deployment guidance
515
+ addressed to consumers, not a normative requirement on engines.
516
+ - **Turning blocking on reproduces the previous behaviour on every verdict that
517
+ restrains — and only those.** An earlier revision of this entry claimed the
518
+ two transcripts were "byte-identical". They are not, and the difference is the
519
+ point of the change. Measured by replaying the 850 samples of
520
+ `data/pint-benchmark/pint-corpus.json` as **850 hook events per hook type**
521
+ (one JSON line in, one JSON line out) through `atr guard`'s stdio loop —
522
+ `HookHandler` → `evaluateWithVerdict` → `ActionExecutor` — on the pre-change
523
+ merge-base `994b01b2b` with no flags, and on `b9da8d710` with `--blocking`.
524
+ The rule corpus is byte-for-byte identical at those two commits
525
+ (`git diff --name-only 994b01b2b..b9da8d710 -- rules` is empty), so every
526
+ difference below is the contract change and nothing else.
527
+
528
+ | Hook | Events | Byte-identical output lines | Differing |
529
+ |---|---:|---:|---:|
530
+ | `PostToolUse` | 850 | **850** | 0 |
531
+ | `PreToolUse` | 850 | 85 | **765** |
532
+
533
+ `PostToolUse` is unchanged outright. On `PreToolUse` the 85 identical lines are
534
+ exactly the events where the baseline emitted a decision that **restrains** —
535
+ 81 `deny` + 4 `ask` — and all 85 of those match byte for byte. The 765
536
+ differing lines are every event where the baseline emitted
537
+ `permissionDecision: "allow"`; on this branch all 765 carry no
538
+ `hookSpecificOutput` key at all.
539
+ Restricted to the 451 samples labelled `label: true` (the attacks), the same
540
+ replay gives 85 identical / 366 differing — i.e. **ATR was affirmatively
541
+ pre-approving 366 of 451 known attacks**, including under
542
+ the `enforce` lane, where no `stable` rule matched and the whole payload was
543
+
544
+ ```json
545
+ {"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow","permissionDecisionReason":"No rules matched."},"atr_decision":"allow"}
546
+ ```
547
+
548
+ captured on 994b01b2b through the TypeScript API rather than the CLI, because
549
+ the predecessor had no `--lane` flag to set the lane with. The excerpt an
550
+ earlier revision quoted here was the inner `hookSpecificOutput` object, not
551
+ the payload.
552
+
553
+ - **Detection is unchanged in both modes.** Over the same 850 × 2 events,
554
+ `matched_rules` is identical to the baseline on 850/850 for both hooks in both
555
+ modes, and `atr_decision` equals the baseline's internal decision on 850/850.
556
+ Blocking changes what the engine *does*, never what it *sees*.
557
+
558
+ ### Added — the detection lane finally has an entrance
559
+
560
+ - `ATREngineConfig.lane` existed and worked but no shipped code path ever set it
561
+ and no user-facing entry point could, so `hunt` was the only reachable setting.
562
+ Added `--lane <enforce|alert|hunt>` to `atr guard` and `atr scan`, the
563
+ `ATR_LANE` environment variable, and a `lane` input on the GitHub Action.
564
+ `ATR_LANE` is read by the **CLI surfaces only** — `atr guard`, `atr scan`, and
565
+ `src/mcp-server.ts` when it is the process entry point. It is *not* honoured by
566
+ every `ATREngine`: an engine constructed by an embedder ignores it entirely.
567
+ See the library/environment entry under "Changed" above.
568
+ - **There is no single resolution order any more, and conflating the two was the
569
+ bug.** They are different chains on different surfaces:
570
+
571
+ | Surface | Chain |
572
+ |---|---|
573
+ | Library (`ATREngine` / `ActionExecutor` / `HookHandler`) | explicit config **>** built-in default. The environment is not consulted. |
574
+ | CLI (`atr guard`, `atr scan`) | flag **>** environment variable **>** built-in default. There is no programmatic config on this surface. |
575
+
576
+ The old "explicit programmatic config > environment > default" described a
577
+ chain that exists on neither surface.
578
+ On the command line an unrecognised `--lane` value is a usage error, never a
579
+ silent fallback: `atr guard --lane enfroce` prints
580
+ `Error: Invalid --lane "enfroce". Expected one of: enforce, alert, hunt.` and
581
+ exits 1, so an operator who typed it is not left believing they are enforcing.
582
+ (`--blocking` / `--no-blocking` take no value; supplying one, as in
583
+ `--blocking=maybe`, is not recognised as the flag and leaves the switch to the
584
+ environment and then the default — it does not error.)
585
+ An unrecognised value arriving from the *environment* is handled differently —
586
+ see the `ATR_LANE` / `ATR_BLOCKING` entry under "Changed" above, which is the
587
+ only place this file describes it.
588
+ - `atr guard` now prints its posture on stderr, preceded by
589
+ `[atr-guard] Loaded <n> rules from <dir>`. Both modes carry a parenthetical,
590
+ and the blocking one names the limit rather than claiming enforcement outright:
591
+
592
+ ```text
593
+ [atr-guard] lane=hunt blocking=off (advisory: detections are reported, nothing is blocked)
594
+ [atr-guard] lane=hunt blocking=on (deny/ask only; never approves a tool call)
595
+ ```
596
+
597
+ `atr init` says in its success message that the installed hook is advisory.
598
+ "Installed" must never read as "enforcing".
599
+
600
+ - **Provenance of the console output quoted in this entry.** Every payload,
601
+ warning and posture line above is captured stdout/stderr from
602
+ `fix/review-never-affirmative-allow` at `b9da8d710`, pasted unedited apart from
603
+ stripping the ANSI colour codes on the `[atr]` warnings and rewriting the
604
+ absolute rules path. This branch carries the documentation; `b9da8d710` carries
605
+ the implementation. The commands reproduce these outputs once both have landed
606
+ — not before.
607
+
608
+ ### Fixed
609
+
610
+ - `src/hook-handler.ts` carried two contradictory comments about failure
611
+ behaviour: the module header said fail-open, an inline comment in
612
+ `startStdioLoop` said the error path "fail-closes to a deny". The header was
613
+ right — `failOpen` defaults to `true` in both the constructor and the CLI. The
614
+ inline comment is corrected; the behaviour is unchanged.
615
+
616
+ ### Fixed — published benchmark numbers
617
+
618
+ - **Withdrew two garak figures that no measurement file backed.** From 2026-08-04
619
+ to 2026-08-05, `README.md` and `stats.json` cited 91.5% (`garak` in-the-wild)
620
+ and 56.9% (`garak-full`) at ATR 3.5.11. Neither run produced a file under
621
+ `data/measurements/`; the newest files there were 95.7% at 3.5.8 and 38.3% at
622
+ 3.5.0 respectively. Re-measured on 2026-08-05 at 780 rules: **92.5%**
623
+ (`garak`, 601/650) and **57.2%** (`garak-full`, 1989/3475), both written to
624
+ `data/measurements/` with the commit that produced them.
625
+ - **Four eval harnesses built `type: 'llm_io'`**, which is a rule *source* and
626
+ not an `AgentEventType`. `src/engine.ts` could not map it to a source, and its
627
+ source-type filter is skipped when the mapping is absent — so instead of the
628
+ narrow llm_io channel those harnesses documented, every rule of every source
629
+ ran against the event. Affected: `eval-garak-inthewild.ts`,
630
+ `eval-academic-raw.ts`, `eval-small-corpora.ts`, `atr_recall_analysis.ts`.
631
+ `check-new-rules-on-benign.ts` had the same class of bug with
632
+ `type: 'user_input'` behind an `as AgentEvent` cast. Event shapes now come
633
+ from `scripts/lib/corpus-event.ts`.
634
+ - **`scripts/` is now typechecked** (`tsconfig.scripts.json`,
635
+ `npm run typecheck:scripts`, wired into CI). `tsconfig.json` covered only
636
+ `src/**`, which is why every one of the above was an unreported TS2322/TS2345.
637
+ - **`.github/workflows/rule-quality.yml`'s "Run PINT eval regression check"**
638
+ ran `npm run eval` (the internal self-test harness, not PINT), read a
639
+ git-committed report that step does not write, and looked up a key that does
640
+ not exist on it — printing `PINT recall: undefined` while no downstream step
641
+ read the result. It now runs `npm run eval:pint` and gates on recall/FP
642
+ against the committed baseline.
643
+ - **`scripts/check-benchmark-citations.ts`** (new, runs in CI) fails the build
644
+ when `README.md`'s benchmark table or root `stats.json` cites a number,
645
+ ATR version, or date that `data/measurements/` does not back.
646
+
647
+ No rule content changed and no threshold was loosened in any of the above.
648
+
649
+ ### Added — beyond the hook and lane work above
650
+
651
+ - **The Cisco Skill Scanner pack is now a build artifact** rather than a
652
+ hand-assembled export (#495).
653
+ - **A rule the benign corpus cannot see has not been measured** — CI now says
654
+ so instead of counting it clean (#460). The benign gate was also given the
655
+ two corpora it had been missing (#468).
656
+ - `DETECTION-BOUNDARY.md` — what this layer detects and what it cannot (#461) —
657
+ and `ENFORCEMENT-MODEL.md`, which also made three contradicted statements
658
+ elsewhere in the docs true (#470).
659
+ - `ATR-2026-02502`: covert remote-script injection into generated artifacts
660
+ (#462). The four tool-poisoning rules are mapped to MITRE ATLAS
661
+ `AML.T0110.000` (#465), and the CSA MAESTRO mapping is refreshed against the
662
+ current corpus (#464).
663
+
664
+ ### Fixed — the guard was not reading real events
665
+
666
+ - **`atr guard` never read a real Claude Code event.** The shape it parsed was
667
+ not the shape the host sends (#483). The event shape now follows
668
+ `hook_event_name` as well as the dispatch, rather than the dispatch alone
669
+ (#487).
670
+
671
+ ### Fixed — rules that matched the wrong thing
672
+
673
+ - `ATR-2026-00086` was detecting Russian, not spoofing (#489).
674
+ - `ATR-2026-01904` read method calls as domains (#474).
675
+ - `ATR-2026-00443` read an ordinary sentence as fragment assembly (#473).
676
+ - `ATR-2026-01750` fired on descriptions of loops rather than demands for
677
+ output (#472).
678
+ - An unquoted ATLAS `T0110.000` title broke the site build (#477).
679
+
680
+ ### Measurement
681
+
682
+ - The benign false-positive evidence was re-derived at 785 rules (#497).
683
+ - ATR was measured against 36,394 published ClawHub skills across three event
684
+ shapes (#490), and rule drift was measured against the 2026-04 wild scan
685
+ (#491).
686
+ - The rule count in the standardization document was 357 rules out of date
687
+ (#479), and five benchmark corpora were refreshed (#478).
688
+
689
+ ## [3.5.0] - 2026-06-16
690
+
691
+ > **The two lane false-positive rates quoted in this 3.5.0 entry were withdrawn on 2026-09-19 and must not be cited.** The entry is left as published, because a changelog is a record of what was said at the time. See the withdrawal under [Unreleased] for the three defects that disqualified them; re-measurement is pending.
692
+
693
+ ### Added
694
+
695
+ - **Detection lanes (`enforce` / `alert` / `hunt`).** Rules now carry a maturity-driven
696
+ lane so consumers can trade recall for precision. On a 65K-sample benign gate: `enforce`
697
+ (stable + confirm rules only) ~0.24% FP; `hunt` (all rules) ~9% FP. Default is `hunt`,
698
+ opt-in and fully backward-compatible.
699
+ - **`confirm` field** — an embedding/secondary check that must pass before a match fires in
700
+ the enforce lane. Four rules ship a `confirm: embedding` guard (ATR-2026-00001 / 00002 /
701
+ 00030 / 00442).
702
+ - **`src/quality/rule-contract.ts`** — a single shared contract (`MATURITIES`, `laneAllows`,
703
+ `validateContract`) the engine and loader consume.
704
+
705
+ ### Changed
706
+
707
+ - **652 detection rules across 10 categories.** Specification line `3.0.0-alpha.1`
708
+ (Working Draft); this is the npm release line, tracked separately from the spec version.
709
+ - **23 rules reclassified** (maturity) to reflect measured precision and generalization.
710
+ - **ATR-2026-00495 deprecated** (garak DAN "insert prompt here" variant) — it now never fires.
711
+ Spec-conformant; the only behavior change in this release.
712
+ - Python `pyatr` engine skips `deprecated` / `draft` rules, matching the TypeScript engine.
713
+
714
+ ### Note
715
+
716
+ - Report false-positive rates lane-keyed (enforce ~0.24% / hunt ~9% on a 65K-sample benign
717
+ gate), not as a single overall figure.
718
+
719
+ ## [3.1.1] - 2026-06-05
720
+
721
+ ### Fixed
722
+
723
+ - **ATR-2026-00001** (prompt-injection) false positive: the `start over/fresh/anew with a new …` task-switch branch matched benign phrasing such as "start fresh with a new outline" / "a new draft" because it lacked the task-noun constraint its sibling branches carry. Tightened to require a task-like noun (task / instruction / assignment / objective / goal / mission / prompt / persona / role / directive / job) after "new". The rule's documented true-positives are unaffected; full suite green (535 tests). Surfaced by the new semantic-validation corpus.
724
+
725
+ ### Added
726
+
727
+ - **Semantic-validation harness** (`data/semantic-validation/` + `scripts/semantic-validation-score.mts`): a focused, reproducible corpus — 20 held-out paraphrased attacks targeting the two v3.1.0 semantic rules (00573 instruction-override, 00574 system-prompt extraction) plus 15 adversarial benign near-misses — and a scorer. Documents what the optional semantic stage actually adds on its two target threats, and ships the corpus so anyone can re-run it with their own judge.
728
+
729
+ ### Measured
730
+
731
+ - Focused semantic validation (n=35, Claude-as-judge via worklist mode, threshold 0.7): the deterministic regex layer caught 10% of the paraphrased attacks; the optional semantic judge stage raised combined recall to 95% (19/20), with 0 judge false positives on the 15 adversarial benign near-misses (0 regex FP after the 00001 fix above). This is a small-n, authored, self-judged validation of the pipeline — NOT an independent benchmark. See `data/semantic-validation/README.md` for method and caveats.
732
+
733
+ ## [3.1.0] - 2026-06-05
734
+
735
+ ### Added
736
+
737
+ - **Tier-2 semantic detection (T2) — optional second-stage judge.** New two-stage scan pipeline (`scripts/scan-with-judge.mts`). Stage 1 is the existing deterministic regex engine run across the whole corpus; Stage 2 spends an LLM-as-judge only on the subset Stage 1 flags or misses (~2%), so judge cost scales with the flagged/missed set rather than the corpus. Opt-in by design: it runs only with an OpenAI-compatible backend (`ATR_SEMANTIC_API_KEY` [+ `ATR_SEMANTIC_BASE_URL` / `ATR_SEMANTIC_MODEL`]) or a no-key worklist mode (`WORKLIST_OUT`) that a separate session adjudicates and feeds back via `--verdicts`. Tunable `JUDGE_SUBSET` (missed | flagged | all) and `JUDGE_THRESHOLD`. The default `ATREngine.evaluate()` path stays 100% deterministic and the LLM judge is off by default — the two semantic rules contribute only narrow regex fallback patterns to the default path (FP-gated, with documented true-negatives); the judge stage is additive and opt-in.
738
+ - **ATR-2026-00573** (prompt-injection): semantic paraphrased instruction-override. Flags reworded injection that drops the literal trigger vocabulary (ignore / disregard / forget) that pattern rule ATR-2026-00001 keys on — the precise misses recorded in 00001's `evasion_tests`. Severity high, status experimental.
739
+ - **ATR-2026-00574** (context-exfiltration): semantic paraphrased system-prompt extraction. Flags indirect elicitation of the agent's system prompt or hidden configuration without the literal verb-first phrasing (reveal / show / print your instructions). Severity high, status experimental.
740
+ - Cisco-grade, human-reviewed exploitation rules for agent runtimes: path traversal, SQL injection, and reflected XSS (ATR-2026-00569 / 00570 / 00571), MCP command injection, and SSRF-to-cloud-metadata, plus CVE-anchored detections surfaced by the daily NVD collector.
741
+ - Daily CVE collector and ecosystem-scan automation now feed agent-package vulnerability proposals into the review queue (collection only; promotion stays behind the human safety gate).
742
+
743
+ ### Changed
744
+
745
+ - Total rule count: 450 → 462.
746
+ - Two rounds of false-positive hardening on existing rules, gated by a wild-confirmed benign corpus and a dual-use security-skill bucket, so security tooling that legitimately ships attack strings no longer trips detection.
747
+ - Engine and rule format unchanged; existing ecosystem integrations (Microsoft AGT, Cisco AI Defense, MISP CIRCL, OWASP A-S-R-H, precize, Sage) work without modification.
748
+
749
+ ### Deprecated
750
+
751
+ - **ATR-2026-00235** — exact duplicate of ATR-2026-00230; marked deprecated, retained for ID stability.
752
+
753
+ ### Notes
754
+
755
+ - First npm release to carry the post-3.0.5 work. The Cisco-grade rules and hardening landed on `main` between 2026-05-29 and 2026-06-04 but stayed unpublished until now: the auto-publish flywheel fires only for Threat-Cloud-crystallized commits, so human-authored rule work ships on an explicit minor release like this one.
756
+ - Semantic rules are experimental and the T2 judge is opt-in; production blocking should continue to rely on the pattern rules. Benchmarks remain measured on the 3.0.0 baseline (see `stats.json`) and have not been re-run against the semantic stage.
757
+
758
+ ## [2.2.2] - 2026-05-13
759
+
760
+ ### Added
761
+
762
+ - **ATR-2026-00523** (skill-compromise): Claude Code Hooks SessionStart pre-trust RCE (CVE-2025-59536). Detects repo-shipped `.claude/settings.json` registering a `SessionStart` hook with the `startup` matcher; the hook command fires before the trust dialog renders. Six layered conditions: literal Hooks-schema shape anchor, shell-interpreter command resolution, pipe-to-shell / inline-exec payload shape, package-manager + credential-tool invocation, repo-path + payload co-occurrence, and pre-trust prose anchor. 7 TP / 6 TN / 3 evasion tests documented. Reported by Aviv Donenfeld and Oded Vanunu (Check Point Research); patched via GHSA-ph6w-f82w-28w6 enhanced trust-dialog warning.
763
+ - **ATR-2026-00524** (context-exfiltration): Claude Code ANTHROPIC_BASE_URL credential exfiltration (CVE-2026-21852, CVSS 5.3 Moderate). Detects repo-shipped `.claude/settings.json` or env-var configuration rebinding `ANTHROPIC_BASE_URL` to an endpoint outside the Anthropic-controlled allowlist (`api.anthropic.com`, Vertex `*.googleapis.com`, Bedrock `bedrock*.<region>.amazonaws.com`); pre-trust API request leaks the live `Authorization: Bearer` header. Seven layered conditions: JSON-form allowlist negative-lookahead, shell / dotenv / Dockerfile env-var form, bare public-IPv4 detector (excludes loopback + RFC1918), cleartext-HTTP detector against non-loopback hosts, repo-path + payload co-occurrence, pre-trust prose anchor, and CVE-identifier co-occurrence. 7 TP / 8 TN / 3 evasion tests documented. Patched in Claude Code >= 2.0.65 (GHSA-jh7p-qr78-84p7); PoC at github.com/atiilla/CVE-2026-21852-PoC.
764
+
765
+ ### Changed
766
+
767
+ - Total rule count: 419 → 421.
768
+
769
+ ### Anchors
770
+
771
+ - 2 Check Point Research disclosures against Claude Code: CVE-2025-59536 (Hooks SessionStart pre-trust RCE) + CVE-2026-21852 (ANTHROPIC_BASE_URL pre-trust credential exfil). Both share the same root cause class — repo-scoped `.claude/settings.json` parsed and acted on before the trust dialog gates the action — and both upstream patches narrow the trust-gate ordering. ATR rules anchor on the dangerous config shape so detection survives both pre- and post-patch deployments.
772
+
773
+ ## [2.2.0] - 2026-05-12
774
+
775
+ ### Added
776
+
777
+ - **75 new rules** across 5 categories (prompt-injection 57 + context-exfiltration 6 + tool-poisoning 4 + excessive-autonomy 2 + model-abuse 2). Total rule count: 344 → 419.
778
+ - 5 new rule source integrations: HackAPrompt (EMNLP 2023, 4,780 samples, ATR-2026-00452..00456), NeMo-Guardrails + llm-guard + Promptfoo vendor test suites (94 samples combined, ATR-2026-00500..00505), PromptInject (NeurIPS 2022, ATR-2026-00506..00509), OWASP LLM Top 10 + MITRE ATLAS PoCs (8 standards-aligned rules ATR-2026-00510..00517).
779
+ - 6-framework compliance metadata on all 75 new rules (OWASP / MITRE ATLAS / NIST AI RMF / EU AI Act / ISO 42001 / SAFE-MCP).
780
+ - 53 rules with regex generalized from literal corpus fingerprints to multi-layer structural patterns.
781
+ - 4 rules kept as KEPT-AS-IS corpus fingerprints (ATR-GARAK-a7fcb4e5 + 3 others): cannot generalize without unacceptable FP rate; marked experimental, not for production blocking.
782
+
783
+ ### Changed
784
+
785
+ - Total rule count: 344 → 419 (357 stable + 62 experimental).
786
+ - NVIDIA garak wrapped rule count: 293 → 419.
787
+
788
+ ### Metrics
789
+
790
+ - HackAPrompt (4,780 samples): recall 28.6% → 66.2% (+37.6pp), 100% precision maintained.
791
+ - garak (3,475 prompts): ATR-core families ~80%+; per-family breakdown: latentinjection 34.4%, sysprompt_extraction 67.9%, dan 90.2%.
792
+ - PINT (850 samples): 0.25% FP maintained, 0 FP regression.
793
+ - SKILL.md (341 samples): 100% precision, 0% FP, 0 FP regression.
794
+ - 0 FP regression on benign corpus (432 real-world benign skills).
795
+
796
+ ### Scope
797
+
798
+ - PyRIT Pliny L1B3RT4S: refused — Anthropic usage policy prevented subagent import.
799
+ - AdvBench, HarmBench, JailbreakBench: reclassified to data/test-corpora/; describe target behaviors, not attack payloads.
800
+
801
+ ## [2.1.4] - 2026-05-12
802
+
803
+ ### Added
804
+
805
+ - **ATR-2026-00448** (tool-poisoning): Spring AI MilvusVectorStore filter-expression injection (CVE-2026-41705). Tautology-based deletion-broadening, paren-breakout, in-clause chaining, terminator-DROP, like-ESCAPE bypass primitive. 8 TP / 6 TN / 0 FP on 431-sample benign corpus.
806
+ - **ATR-2026-00449** (context-exfiltration): Spring AI PromptChatMemoryAdvisor cross-user memory leakage (CVE-2026-41712). Shared / singleton ChatMemory wiring, placeholder conversation_id, mismatched user-tag windows, wildcard-tenant scope. 8 TP / 6 TN / 0 FP.
807
+ - **ATR-2026-00450** (data-poisoning): Spring AI PromptChatMemoryAdvisor memory poisoning (CVE-2026-41713). Persistence-aware ignore-previous, bracketed `[SYSTEM-MEMORY-PERSIST]` canaries, smuggled role-tag prefixes, REMEMBER:-shaped persona override, ChatMemory.add(SystemMessage) sink-level concat. 8 TP / 6 TN / 0 FP.
808
+ - **ATR-2026-00451** (privilege-escalation): LiteLLM proxy admin endpoint SQL injection (CVE-2026-42208, CISA KEV 2026-05-08, CVSS 9.3, federal remediation due 2026-05-11). Tautology + comment-out, stacked DROP / TRUNCATE, UNION SELECT exfil, pg_sleep blind, Postgres metadata recon, error-based extractvalue / updatexml / load_extension. 8 TP / 6 TN / 0 FP.
809
+
810
+ ### Changed
811
+
812
+ - Total rule count: 344 → 348.
813
+
814
+ ### Anchors
815
+
816
+ - 3 Spring AI CVEs (CVE-2026-41705 / -41712 / -41713) disclosed 2026-05-08 in Spring Security Advisory; patches in Spring AI >= 1.0.0.
817
+ - 1 CISA Known Exploited Vulnerabilities catalog entry: CVE-2026-42208 added 2026-05-08, federal remediation due 2026-05-11, active exploitation observed against financial services and healthcare deployments; patch in LiteLLM >= 1.48.3.
818
+
819
+ ## [2.1.3] - 2026-05-11
820
+
821
+ ### Added
822
+
823
+ - 6 HackAPrompt-cluster rules (ATR-2026-00442..00447) + benchmark harness (PR #51). Auto-published via tc-pr-back release workflow after PR #51 merge.
824
+
825
+ ### Changed
826
+
827
+ - Total rule count: 338 → 344.
828
+
829
+ ## [2.1.2] - 2026-05-11
830
+
831
+ ### Added
832
+
833
+ - **ATR-2026-00440** (agent-manipulation): Microsoft Semantic Kernel CVE-2026-26030 — In-Memory Vector Store lambda+eval RCE. AST-traversal-via-mro primitives, BuiltinImporter reflective access, Function-constructor variants. 8 TP / 5 TN / 0 FP on 466-sample benign corpus.
834
+ - **ATR-2026-00441** (privilege-escalation): Microsoft Semantic Kernel CVE-2026-25592 — SessionsPythonPlugin arbitrary file write to autostart paths. Windows Start Menu Startup, XDG autostart, systemd-user, cron, macOS LaunchAgents/Daemons, Windows Registry Run-key persistence. 7 TP / 5 TN / 0 FP.
835
+ - **`src/redact.ts`** new module: `redactMatchedValue()` + `redactMatchedValues()` helpers. ATR-consuming integrations can run `ATRMatch.matchedPatterns` entries through this before logging. Recognises AWS keys, GitHub tokens, Slack tokens, OpenAI/Anthropic keys, Bearer creds, JWTs, PEM keys. 13 unit tests. Additive opt-in API — no existing API changes.
836
+
837
+ ### Changed
838
+
839
+ - Total rule count: 336 → 338.
840
+
841
+ ### Loop closure
842
+
843
+ - Microsoft Copilot SWE Agent opened `microsoft/agent-governance-toolkit#1981` 2026-05-11 06:07 UTC with regression-test fixtures presuming ATR detection. PR #50 merged + v2.1.2 npm + GitHub release published within 2h 16m. Closing-the-loop comment mapped each fixture to ATR rule IDs.
844
+
845
+ ## [2.1.1] - 2026-05-10
846
+
847
+ ### Added
848
+
849
+ - 6 ATR rules covering 7 gap CVEs identified by Phase 1 audit (CVSS 9.1–10.0). PR #46 + follow-up batches.
850
+ - STIX 2.1 extension for `x-atr-rule` custom SDO (PR #49) — self-published extension definition; ATR rules can now be expressed as STIX SDOs for STIX-compliant consumers.
851
+
852
+ ### Adopted (external)
853
+
854
+ - **MISP/misp-taxonomies#323** merged 2026-05-10 by adulau (MISP project lead). 10 ATR predicates + 330 rule IDs as MISP machine tags.
855
+ - **MISP/misp-galaxy#1207** merged 2026-05-10 by adulau. 336 cluster values with kill-chain, severity, CVE / OWASP LLM / MITRE ATLAS cross-refs. 10,408 lines.
856
+
857
+ ## [2.1.0] - 2026-05-09
858
+
859
+ ### Added
860
+
861
+ - **NIST AI RMF mapping v0.2** — 100% coverage of all 4 AI RMF functions (Govern / Map / Measure / Manage), 72 controls + 31 cross-reference links + worked example profile. Schema-valid OSCAL catalog published under `Agent-Threat-Rule/ai-rmf-oscal-catalog` (PR #46).
862
+ - Dedicated `/compliance/nist-ai-rmf` page on website with 314 → 330 rule count refresh sitewide.
863
+
864
+ ### Adopted (external)
865
+
866
+ - **OWASP/Agent-Security-Regression-Harness#74** merged 2026-05-11 by mertsatilmaz (OWASP Project Lead): "Welcome to the team."
867
+
868
+ ## [2.0.11] - 2026-04-21
869
+
870
+ ### Added
871
+
872
+ - **193 new rules** covering the full NVIDIA garak probe corpus (ATR-00300 ~ ATR-00414), bringing total to **311 rules**
873
+ - **agent-manipulation**: DanInTheWild community jailbreak library batch 7-9, AntiDAN inverted persona, ChatGPT DevMode RANTI, Image-Markdown unlock, Ablation_Dan_11_0 generator-name binding, AutoDAN hierarchical suffix, Goodside ThreatJSON death coercion, Doctor XML policy puppetry
874
+ - **prompt-injection**: latentinjection separator/keyword, leakreplay cloze MASK, glitch token repeat-back (SolidGoldMagikarp et al.), echo SQL-jinja template injection, DRA parenthesis reconstruction, phrasing past/future tense, LMRC harm category, FigStep image-list multimodal, continuation ethnic slur, backspace deletion character, LLM special-token boundary, toxic continuation prefix, snowball impossible reasoning, ecoji/base2048/variant-selector/sneaky-bits encoding injection, zalgo/braille/sata encoded attacks
875
+ - **context-exfiltration**: markdown image URL exfil + XSS, API key generation and partial-key completion
876
+ - **model-abuse**: malwaregen code generation (TopLevel + SubFunctions), HuggingFace unsafe model artifact load
877
+ - **tool-poisoning**: ANSI escape elicitation request
878
+ - Word-boundary (`\b`) anchoring on grandma-roleplay rule to prevent partial-word FP (late/gran/read)
879
+ - `metadata_provenance.garak_probe` field for ATR-00267 (GCGCached), ATR-00301 (TAPCached), and all new rules
880
+ - Missing `true_negatives` added to 10 existing DAN-family rules (ATR-00352–00376) to meet ≥5 TN safety gate requirement
881
+
882
+ ### Changed
883
+
884
+ - **Total rule count**: 113 → 311
885
+ - **garak in-the-wild benchmark recall**: 69.7% → **97.1%** (646/666 prompts detected against garak community jailbreak corpus)
886
+ - **SKILL.md precision/FP**: maintained 100% precision, 0% FP on 498-sample benign corpus
887
+ - FP mitigations applied to new rules (response action `[alert]` only for medium-FP-risk rules — phrasing, API key, malwaregen, SQL-jinja)
888
+
889
+ ### Fixed
890
+
891
+ - ATR-00402 (grandma roleplay): added word boundaries to prevent `late`/`gran`/`read` substring FP in Firebase documentation
892
+ - ATR-00401 ([MASK]): required elicitation context to prevent NLP-documentation FP
893
+ - ATR-00403 (glitch tokens): required elicitation verb before token names (StreamerBot etc.) to prevent legitimate software reference FP
894
+ - ATR-00411 (API key gen): negative lookahead on "from your dashboard/console" to exclude documentation requests
895
+
896
+ ## [2.0.10] - 2026-04-21
897
+
898
+ ### Added
899
+
900
+ - garak coverage batch 10: ansiescape, badchars, realtoxicityprompts, topic, fileformats (ATR-00393~00398)
901
+
902
+ ## [2.0.9] - 2026-04-20
903
+
904
+ ### Added
905
+
906
+ - garak DanInTheWild coverage batch 8-9: jailbreak templates, emoji-flag, prompt-browser (ATR-00377~00392)
907
+
908
+ ## [2.0.0] - 2026-04-15
909
+
910
+ > **Historical entry — do not quote these figures as current.** The scan counts,
911
+ > malware counts, benchmark rates and rule totals below are as published on
912
+ > 2026-04-15 at 113 rules. The wild-scan figures in particular are under
913
+ > reconciliation and are not a citable measurement; current corpus numbers live
914
+ > in `data/stats.json` and in README §8 Evaluation. The "Cisco AI Defense" line
915
+ > describes rules merged into the open-source `cisco-ai-defense/skill-scanner`
916
+ > repository — it is not a statement about any vendor product.
917
+
918
+ ### BREAKING
919
+
920
+ - **Compound detection gate**: MCP rules now require 30%+ conditions to match in skill context. This prevents over-triggering when MCP-specific patterns appear in legitimate SKILL.md documentation.
921
+ - **Code block suppression**: Skill rules no longer suppress matches inside code blocks (they are instructions, not documentation examples).
922
+ - **All fields resolve to content in skill context**: `tool_description`, `tool_args`, `user_input` all map to the full skill content for static analysis.
923
+
924
+ ### Added
925
+
926
+ - **26 new rules** (87 to 113 total, 9 categories):
927
+ - ATR-2026-00149: Compound exfiltration (12 patterns: SSH archive, wallet, browser, DNS, IMDS)
928
+ - ATR-2026-00158/159/160: TC-crystallized rules (first rules generated end-to-end by Threat Cloud)
929
+ - ATR-2026-00161: Cross-tool shadowing via IMPORTANT tag (from Invariant Labs PoC)
930
+ - ATR-2026-00162: Credential exfil combo
931
+ - ATR-2026-00163: Hidden override instructions
932
+ - ATR-2026-00164: Scope hijack
933
+ - Plus 19 more across prompt-injection, tool-poisoning, and data-exfiltration categories
934
+ - **RFC-001 v1.1** (ATR Quality Standard):
935
+ - Two-Dimensional Compliance Model (metadata presence + provenance)
936
+ - L0-L5 Review Tier Levels (first standard to include LLM-assisted review as formal tier)
937
+ - Community Signal Aggregation (confirmations, FP reports, evasion reports)
938
+ - Multi-Runtime Compatibility (14 runtimes: Claude Code, Cursor, Hermes, OpenAI Assistants, Google A2A, etc.)
939
+ - Relaxed experimental gate (3/3/0) for community velocity; stable tier retains full 5/5/3
940
+ - Future Work: RFC-002 (Detection Types), RFC-003 (Collective Defense), RFC-004 (Enterprise)
941
+ - **GOVERNANCE.md v1.1**:
942
+ - Permanent MIT license commitment (never BSL/SSPL)
943
+ - MITRE ATLAS positioning: ATR = detection rules complement to ATLAS (like Sigma to ATT&CK)
944
+ - ATR Numbering Authority specification
945
+ - Technical Advisory Group roadmap
946
+ - **96,096 real-world skills scanned** (OpenClaw 56K + Skills.sh 3K + Hermes 123 + ClawHub 36K + MCP Registry 5K)
947
+ - **751 malware skills discovered** (hightower6eu 354, sakaen736jih 212, 52yuanchangxing 137)
948
+ - Research report: `docs/research/openclaw-malware-campaign-2026-04.md`
949
+ - NousResearch notified (hermes-agent#9809)
950
+ - **Threat Cloud blacklist**: 554 entries uploaded from wild scan
951
+ - **4 export formats**: SARIF v2.1.0, Splunk SPL, Elasticsearch DSL, generic regex (714 portable patterns)
952
+ - **Exponential backoff for npm registry crawl** (fixes Daily Ecosystem Scan rate limiting)
953
+
954
+ ### Changed
955
+
956
+ - Engine: compound gate for context-aware matching
957
+ - Confidence formula: cross-context penalty (0.7x) for rules firing outside their tested runtime
958
+ - SKILL.md denylist reduced from 22 to 10 rules (re-enabled low-FP rules for better coverage)
959
+
960
+ ### Metrics
961
+
962
+ - 113 rules (7 stable, 85 experimental, 21 draft)
963
+ - 361 tests passing
964
+ - SKILL.md benchmark (498 corpus): 100% recall, 97% precision, 0.20% FP rate
965
+ - MCP benchmark (PINT 850): 62.7% recall, 99.6% precision
966
+ - Wild scan (96K): 1.35% flag rate, 751 confirmed malware
967
+ - OWASP Agentic Top 10: 10/10 coverage
968
+ - MITRE ATLAS: 100/113 rules mapped
969
+ - SAFE-MCP: 91.8% technique coverage
970
+ - Avg scan latency: 14ms per file
971
+
972
+ ### Ecosystem
973
+
974
+ - **Cisco AI Defense**: 34 ATR rules shipped in production (PR #79 merged)
975
+ - **OWASP**: Attack examples contributed (PR #814 merged)
976
+ - **NousResearch**: Malware campaign reported (hermes-agent#9809)
977
+
978
+ ## [1.0.0] - 2026-04-06
979
+
980
+ ### BREAKING
981
+
982
+ - **Rule IDs**: 3-digit → 5-digit (`ATR-2026-001` → `ATR-2026-00001`). Zero-padded, detection logic unchanged.
983
+
984
+ ### Added
985
+
986
+ - **ATR-SPEC-v1.md** — Formal rule format specification. Third parties can build conforming engines in any language.
987
+ - **GOVERNANCE.md** — Contribution process, quality gates, severity rubric.
988
+ - **`scan_target` metadata** — Every rule declares `mcp` or `skill`. Engines filter by scan context.
989
+ - **`rule_version` field** — All rules carry version number. Bump on detection logic changes.
990
+ - **Unified CLI** — `atr scan` auto-detects JSON (MCP) vs .md (SKILL.md).
991
+ - **`ScanResult` type** — Unified output with `scan_type`, `content_hash` (SHA-256).
992
+ - **MCP server `atr_scan_skill` tool** — 7 tools total.
993
+ - 6 new skill rules: context poisoning (00125), rug pull setup (00126), subcommand overflow (00127), HTML comment hidden payload (00128), unicode smuggling (00129), exfil URL in instructions (00135).
994
+
995
+ ### Metrics
996
+
997
+ - 87 rules (75 MCP + 12 skill)
998
+ - 53,399 real-world skills scanned (skills.sh + OpenClaw)
999
+ - 670 confirmed malicious skills detected
1000
+ - SKILL.md recall: 94.4%, FP rate: 0.096%
1001
+ - MCP recall: 62.7% (PINT 850, unchanged)
1002
+
1003
+ ## [0.3.0] - 2026-03-18
1004
+
1005
+ ### Added
1006
+
1007
+ - Evaluation framework (`src/eval/`):
1008
+ - `npm run eval`: 341-sample corpus (321 attacks + 20 benign), 9 attack categories
1009
+ - `npm run eval:pint`: 850-sample external PINT benchmark
1010
+ - Per-rule quality metrics (TP/FP/matchCount per rule)
1011
+ - Confusion matrix, precision/recall/F1, latency percentiles
1012
+ - Regression gate (auto-fail on metric degradation)
1013
+ - JSON report output (`data/eval-report.json`)
1014
+ - CI gate (`.github/workflows/eval.yml`): typecheck + test + eval + validate on PR
1015
+ - 279 auto-extracted corpus samples from rule test_cases
1016
+ - 8 new detection layers in ATR-2026-001:
1017
+ - forget-everything shorthand, task switching, system prompt extraction,
1018
+ - praise-then-redirect, German formal/informal, French injection patterns
1019
+ - PINT benchmark integration (deepset/prompt-injections + Lakera gandalf datasets)
1020
+
1021
+ ### Changed
1022
+
1023
+ - Embedding similarity threshold: 0.82 -> 0.65 (10 extra TP, 0 extra FP on PINT)
1024
+ - Test count: 225 -> 246 (+21 eval framework tests)
1025
+
1026
+ ### Fixed
1027
+
1028
+ - shadow-evaluator.ts type error (TS2352)
1029
+ - Removed external product references from ATR-FRAMEWORK-SPEC.md
1030
+ - Added temp file patterns to .gitignore
1031
+
1032
+ ### Benchmark Results (honest numbers)
1033
+
1034
+ - Self-corpus (341 samples): Precision 100%, Recall 99.4%, F1 99.5%
1035
+ - PINT external (850 samples): Precision 99.4%, Recall 39.9%, F1 57.0%
1036
+ - Only 6/61 rules fire on external attacks
1037
+ - See LIMITATIONS.md for full analysis
1038
+
1039
+ ## [0.2.3] - 2026-03-16
1040
+
1041
+ ### Added
1042
+
1043
+ - 9 new rules from Threat Cloud community promotion (ATR-2026-100~108):
1044
+ consent bypass, trust escalation, disguised analytics exfiltration,
1045
+ hidden safety bypass, persona hijacking, silent action concealment,
1046
+ schema-description contradiction, delayed execution bypass, Sybil attack
1047
+ - Python engine (pyATR) v0.2.0: validate, test, stats CLI commands, 48 tests
1048
+ - Splunk SPL converter (`atr convert splunk`)
1049
+ - Elastic Query DSL converter (`atr convert elastic`)
1050
+ - Layer 3 LLM-as-judge prompt templates (docs/layer3-prompt-templates.md)
1051
+ - Automated scan pipeline (scripts/auto-scan-pipeline.sh)
1052
+ - Deployment guide for external teams (docs/deployment-guide.md)
1053
+ - MCP ecosystem security audit report: 1,295 packages, 14,299 tools
1054
+ - npm crawler with pagination (795 → 2,769 discoverable packages)
1055
+
1056
+ ### Fixed
1057
+
1058
+ - CLI test runner: handle tool_description field, fix event type mapping
1059
+ - All 61 rules pass embedded test cases (556/556, 100%)
1060
+ - CJK test cases moved to evasion_tests (honest: regex can't match them)
1061
+ - Removed all external product references for ATR independence
1062
+ - Fixed pyATR URLs pointing to wrong GitHub org
1063
+
1064
+ ### Stats
1065
+
1066
+ - 61 rules (44 experimental + 17 draft)
1067
+ - 556 test cases (100% pass rate)
1068
+ - 164 TypeScript tests + 48 Python tests = 212 engine tests
1069
+ - 12 SIEM converter tests
1070
+
1071
+ ## [0.2.2] - 2026-03-14
1072
+
1073
+ ### Fixed
1074
+
1075
+ - ReDoS vulnerability in SSRF rule (ATR-2026-013) — O(n^2) backtracking on long hostnames
1076
+ - SSRF rule false positive on filesystem paths like /home/user/
1077
+ - tool_args field extraction fallback for tool_call events
1078
+
1079
+ ### Added
1080
+
1081
+ - True negatives for 21 rules with insufficient test coverage (7 had zero, 14 had only 1)
1082
+ - Vitest coverage reporting with v8 provider (60%+ threshold on core modules)
1083
+
1084
+ ## [0.2.1] - 2026-03-10
1085
+
1086
+ ### Changed
1087
+
1088
+ - Standardized 17 predicted rule IDs (ATR-PRED → ATR-2026-080~096)
1089
+ - Fixed rule validator for skill-compromise category
1090
+ - Toned down coverage claims to reflect actual verification status
1091
+
1092
+ ## [0.1.0-rc2] - 2026-03-09
1093
+
1094
+ ### Added
1095
+
1096
+ - 32 initial experimental detection rules across 9 attack categories
1097
+ - TypeScript reference engine with SessionTracker
1098
+ - OWASP Top 10 for Agentic Applications (2026) mapping (6 covered, 2 partial, 2 gaps)
1099
+ - 13 CVE reference mappings across 16 rules (pattern-based, not empirically verified)
1100
+ - OWASP LLM Top 10 (2025) mapping (7 covered, 3 gaps)
1101
+ - MITRE ATLAS technique references
1102
+ - JSON Schema specification (spec/atr-schema.yaml)
1103
+ - Built-in true positive and true negative test cases for every rule
1104
+ - Attack corpus validation tests
1105
+ - Coverage report (COVERAGE.md)
1106
+
1107
+ ### Attack Categories
1108
+
1109
+ - Prompt Injection (5 rules)
1110
+ - Tool Poisoning (4 rules)
1111
+ - Context Exfiltration (3 rules)
1112
+ - Agent Manipulation (3 rules)
1113
+ - Privilege Escalation (2 rules)
1114
+ - Excessive Autonomy (2 rules)
1115
+ - Skill Compromise (7 rules)
1116
+ - Data Poisoning (1 rule)
1117
+ - Model Security (2 rules)