agent-threat-rules 3.5.11 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (896) hide show
  1. package/README.md +265 -34
  2. package/dist/action-executor.d.ts +44 -1
  3. package/dist/action-executor.d.ts.map +1 -1
  4. package/dist/action-executor.js +41 -2
  5. package/dist/action-executor.js.map +1 -1
  6. package/dist/cli/scan-handler.d.ts +9 -0
  7. package/dist/cli/scan-handler.d.ts.map +1 -1
  8. package/dist/cli/scan-handler.js +12 -2
  9. package/dist/cli/scan-handler.js.map +1 -1
  10. package/dist/cli.js +199 -20
  11. package/dist/cli.js.map +1 -1
  12. package/dist/converters/sarif.d.ts.map +1 -1
  13. package/dist/converters/sarif.js +78 -13
  14. package/dist/converters/sarif.js.map +1 -1
  15. package/dist/corpus/security-content.d.ts +76 -0
  16. package/dist/corpus/security-content.d.ts.map +1 -0
  17. package/dist/corpus/security-content.js +146 -0
  18. package/dist/corpus/security-content.js.map +1 -0
  19. package/dist/corpus-event.d.ts +368 -0
  20. package/dist/corpus-event.d.ts.map +1 -0
  21. package/dist/corpus-event.js +592 -0
  22. package/dist/corpus-event.js.map +1 -0
  23. package/dist/enforcement.d.ts +233 -0
  24. package/dist/enforcement.d.ts.map +1 -0
  25. package/dist/enforcement.js +316 -0
  26. package/dist/enforcement.js.map +1 -0
  27. package/dist/engine.d.ts +18 -0
  28. package/dist/engine.d.ts.map +1 -1
  29. package/dist/engine.js +98 -20
  30. package/dist/engine.js.map +1 -1
  31. package/dist/eval/eval-harness.d.ts +37 -0
  32. package/dist/eval/eval-harness.d.ts.map +1 -1
  33. package/dist/eval/eval-harness.js +95 -22
  34. package/dist/eval/eval-harness.js.map +1 -1
  35. package/dist/eval/index.d.ts +2 -1
  36. package/dist/eval/index.d.ts.map +1 -1
  37. package/dist/eval/index.js +1 -0
  38. package/dist/eval/index.js.map +1 -1
  39. package/dist/eval/metrics.d.ts +28 -0
  40. package/dist/eval/metrics.d.ts.map +1 -1
  41. package/dist/eval/metrics.js +4 -2
  42. package/dist/eval/metrics.js.map +1 -1
  43. package/dist/eval/run-hackaprompt-benchmark.js +4 -2
  44. package/dist/eval/run-hackaprompt-benchmark.js.map +1 -1
  45. package/dist/eval/run-pint-benchmark.js +10 -2
  46. package/dist/eval/run-pint-benchmark.js.map +1 -1
  47. package/dist/eval/skill-benchmark.d.ts +2 -0
  48. package/dist/eval/skill-benchmark.d.ts.map +1 -1
  49. package/dist/eval/skill-benchmark.js +5 -2
  50. package/dist/eval/skill-benchmark.js.map +1 -1
  51. package/dist/hook-handler.d.ts +98 -3
  52. package/dist/hook-handler.d.ts.map +1 -1
  53. package/dist/hook-handler.js +119 -12
  54. package/dist/hook-handler.js.map +1 -1
  55. package/dist/index.d.ts +4 -2
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +11 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/mcp-server.d.ts +13 -2
  60. package/dist/mcp-server.d.ts.map +1 -1
  61. package/dist/mcp-server.js +22 -5
  62. package/dist/mcp-server.js.map +1 -1
  63. package/dist/quality/action-eligibility.d.ts +263 -0
  64. package/dist/quality/action-eligibility.d.ts.map +1 -0
  65. package/dist/quality/action-eligibility.js +365 -0
  66. package/dist/quality/action-eligibility.js.map +1 -0
  67. package/dist/quality/adapters/atr.d.ts.map +1 -1
  68. package/dist/quality/adapters/atr.js +8 -2
  69. package/dist/quality/adapters/atr.js.map +1 -1
  70. package/dist/quality/compute-confidence.d.ts.map +1 -1
  71. package/dist/quality/compute-confidence.js +14 -5
  72. package/dist/quality/compute-confidence.js.map +1 -1
  73. package/dist/quality/index.d.ts +2 -0
  74. package/dist/quality/index.d.ts.map +1 -1
  75. package/dist/quality/index.js +2 -0
  76. package/dist/quality/index.js.map +1 -1
  77. package/dist/quality/quality-gate.d.ts.map +1 -1
  78. package/dist/quality/quality-gate.js +9 -1
  79. package/dist/quality/quality-gate.js.map +1 -1
  80. package/dist/quality/validate-maturity.d.ts.map +1 -1
  81. package/dist/quality/validate-maturity.js +24 -5
  82. package/dist/quality/validate-maturity.js.map +1 -1
  83. package/dist/quality/wild-measurement.d.ts +107 -0
  84. package/dist/quality/wild-measurement.d.ts.map +1 -0
  85. package/dist/quality/wild-measurement.js +139 -0
  86. package/dist/quality/wild-measurement.js.map +1 -0
  87. package/dist/rule-scaffolder.d.ts.map +1 -1
  88. package/dist/rule-scaffolder.js +9 -2
  89. package/dist/rule-scaffolder.js.map +1 -1
  90. package/dist/types.d.ts +13 -2
  91. package/dist/types.d.ts.map +1 -1
  92. package/package.json +9 -3
  93. package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +8 -9
  94. package/rules/agent-manipulation/ATR-2026-00032-goal-hijacking.yaml +7 -8
  95. package/rules/agent-manipulation/ATR-2026-00074-cross-agent-privilege-escalation.yaml +9 -7
  96. package/rules/agent-manipulation/ATR-2026-00076-inter-agent-message-spoofing.yaml +3 -4
  97. package/rules/agent-manipulation/ATR-2026-00077-human-trust-exploitation.yaml +12 -6
  98. package/rules/agent-manipulation/ATR-2026-00108-consensus-sybil-attack.yaml +4 -5
  99. package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +2 -3
  100. package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +3 -4
  101. package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +2 -3
  102. package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +2 -3
  103. package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +4 -5
  104. package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +3 -4
  105. package/rules/agent-manipulation/ATR-2026-00164-skill-scope-hijack.yaml +2 -2
  106. package/rules/agent-manipulation/ATR-2026-00268-tense-framing-bypass.yaml +2 -2
  107. package/rules/agent-manipulation/ATR-2026-00269-fitd-escalation.yaml +2 -2
  108. package/rules/agent-manipulation/ATR-2026-00271-grandma-roleplay-jailbreak.yaml +2 -2
  109. package/rules/agent-manipulation/ATR-2026-00273-dan-developer-mode-persona.yaml +2 -2
  110. package/rules/agent-manipulation/ATR-2026-00287-threaten-json-coercive-output-threat.yaml +2 -2
  111. package/rules/agent-manipulation/ATR-2026-00288-false-premise-injection.yaml +2 -2
  112. package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +2 -2
  113. package/rules/agent-manipulation/ATR-2026-00302-anti-dan-inverted-filter-persona.yaml +2 -2
  114. package/rules/agent-manipulation/ATR-2026-00303-devmode-ranti-profanity-coercion.yaml +3 -3
  115. package/rules/agent-manipulation/ATR-2026-00304-chatgpt-image-unlocker-markdown-injection.yaml +4 -4
  116. package/rules/agent-manipulation/ATR-2026-00305-dan-mode-ablation-benchmark-coercion.yaml +2 -2
  117. package/rules/agent-manipulation/ATR-2026-00306-autodan-genetic-jailbreak-suffix.yaml +2 -2
  118. package/rules/agent-manipulation/ATR-2026-00307-inthewild-jailbreak-corpus-signature.yaml +2 -2
  119. package/rules/agent-manipulation/ATR-2026-00314-amoral-unfiltered-custom-persona-jailbreak.yaml +2 -2
  120. package/rules/agent-manipulation/ATR-2026-00317-free-of-restrictions-named-persona.yaml +2 -2
  121. package/rules/agent-manipulation/ATR-2026-00318-moralizing-rant-then-unfiltered-bypass.yaml +2 -2
  122. package/rules/agent-manipulation/ATR-2026-00319-developer-mode-dual-response-format.yaml +2 -2
  123. package/rules/agent-manipulation/ATR-2026-00320-opposite-day-boolean-opposite-machine.yaml +2 -2
  124. package/rules/agent-manipulation/ATR-2026-00322-fictional-world-format-override-jailbreak.yaml +2 -2
  125. package/rules/agent-manipulation/ATR-2026-00323-dual-persona-simulation-jailbreak.yaml +2 -2
  126. package/rules/agent-manipulation/ATR-2026-00324-neurosemantical-inversitis-disease-jailbreak.yaml +2 -2
  127. package/rules/agent-manipulation/ATR-2026-00325-bob-hypothetical-unrestricted-chatbot.yaml +2 -2
  128. package/rules/agent-manipulation/ATR-2026-00326-fake-developer-authority-chatdan-override.yaml +2 -2
  129. package/rules/agent-manipulation/ATR-2026-00327-ai-ethics-law-bypass-declaration.yaml +2 -2
  130. package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +2 -2
  131. package/rules/agent-manipulation/ATR-2026-00329-no-withhold-factual-resource-persona.yaml +2 -2
  132. package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +2 -2
  133. package/rules/agent-manipulation/ATR-2026-00331-terminal-cli-harmful-function-simulator.yaml +2 -2
  134. package/rules/agent-manipulation/ATR-2026-00332-hacker-chan-culture-offensive-ai-persona.yaml +2 -2
  135. package/rules/agent-manipulation/ATR-2026-00333-disease-animal-dual-ai-chatbot.yaml +2 -2
  136. package/rules/agent-manipulation/ATR-2026-00334-two-entity-token-splitting-game.yaml +2 -2
  137. package/rules/agent-manipulation/ATR-2026-00335-key-value-template-persona-injection.yaml +2 -2
  138. package/rules/agent-manipulation/ATR-2026-00336-brm-false-information-machine-persona.yaml +3 -3
  139. package/rules/agent-manipulation/ATR-2026-00337-obfuscated-system-announcement-injection.yaml +2 -2
  140. package/rules/agent-manipulation/ATR-2026-00338-persongpt-hash-prefix-activation.yaml +2 -2
  141. package/rules/agent-manipulation/ATR-2026-00339-bom-boolean-opposite-machine-persona-claim.yaml +2 -2
  142. package/rules/agent-manipulation/ATR-2026-00340-h4x-amoral-unfiltered-character.yaml +2 -2
  143. package/rules/agent-manipulation/ATR-2026-00341-char-rules-shortform-persona-injection.yaml +2 -2
  144. package/rules/agent-manipulation/ATR-2026-00342-unicode-encoding-obfuscation-injection.yaml +2 -2
  145. package/rules/agent-manipulation/ATR-2026-00343-lie-truth-dual-personality-uncensored.yaml +2 -2
  146. package/rules/agent-manipulation/ATR-2026-00344-alt-ai-same-capabilities-no-restrictions.yaml +2 -2
  147. package/rules/agent-manipulation/ATR-2026-00345-nlp-based-os-fictional-terminal-override.yaml +2 -2
  148. package/rules/agent-manipulation/ATR-2026-00346-jailbreak-emoji-unlock-dual-format.yaml +2 -2
  149. package/rules/agent-manipulation/ATR-2026-00347-yin-yang-hidden-knowledge-hidden-human-sim.yaml +2 -2
  150. package/rules/agent-manipulation/ATR-2026-00348-arc-autonomous-real-calculation-rulebreaker.yaml +2 -2
  151. package/rules/agent-manipulation/ATR-2026-00349-hgttg-hitchhikers-guide-no-restriction-oracle.yaml +2 -2
  152. package/rules/agent-manipulation/ATR-2026-00350-black-alert-no-ethics-writing-assistant.yaml +2 -2
  153. package/rules/agent-manipulation/ATR-2026-00351-dan-ofkilter-sms-abbreviated-persona.yaml +2 -2
  154. package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +2 -2
  155. package/rules/agent-manipulation/ATR-2026-00353-dual-chatgpt-dan-opposite-personality-format.yaml +2 -2
  156. package/rules/agent-manipulation/ATR-2026-00354-reverse-harm-regardless-oracle-persona.yaml +2 -2
  157. package/rules/agent-manipulation/ATR-2026-00355-ugh-anti-human-nefarious-ai-persona.yaml +2 -2
  158. package/rules/agent-manipulation/ATR-2026-00356-google-gato-lamda-exploit-generation-persona.yaml +2 -2
  159. package/rules/agent-manipulation/ATR-2026-00357-antifm-hate-violence-persona-injection.yaml +2 -2
  160. package/rules/agent-manipulation/ATR-2026-00358-cumgpt-explicit-adult-named-persona.yaml +2 -2
  161. package/rules/agent-manipulation/ATR-2026-00360-chj-carousel-clyde-no-ethics-bird.yaml +2 -2
  162. package/rules/agent-manipulation/ATR-2026-00361-alter-ego-honesty-dual-consciousness-bypass.yaml +2 -2
  163. package/rules/agent-manipulation/ATR-2026-00362-fictional-unfiltered-ai-comparison-jailbreak.yaml +3 -3
  164. package/rules/agent-manipulation/ATR-2026-00363-rephrase-criminal-activity-second-person.yaml +3 -3
  165. package/rules/agent-manipulation/ATR-2026-00364-dr-al-villain-plan-template-injection.yaml +2 -2
  166. package/rules/agent-manipulation/ATR-2026-00365-reservoir-dogs-coercive-interrogation-roleplay.yaml +2 -2
  167. package/rules/agent-manipulation/ATR-2026-00366-sneaky-pete-warp-facts-persona.yaml +3 -3
  168. package/rules/agent-manipulation/ATR-2026-00368-prompt-browser-token-limit-jailbreak.yaml +2 -2
  169. package/rules/agent-manipulation/ATR-2026-00369-gptx-starwars-unlimited-knowledge-persona.yaml +2 -2
  170. package/rules/agent-manipulation/ATR-2026-00370-addi-german-dictator-propaganda-roleplay.yaml +2 -2
  171. package/rules/agent-manipulation/ATR-2026-00371-ai-political-bias-manipulation.yaml +3 -3
  172. package/rules/agent-manipulation/ATR-2026-00372-fictional-cia-secret-files-story-extraction.yaml +3 -3
  173. package/rules/agent-manipulation/ATR-2026-00374-role-placeholder-persona-template-injection.yaml +2 -2
  174. package/rules/agent-manipulation/ATR-2026-00375-character-description-rpg-explicit-template.yaml +3 -3
  175. package/rules/agent-manipulation/ATR-2026-00376-identity-command-real-person-persona-injection.yaml +3 -3
  176. package/rules/agent-manipulation/ATR-2026-00377-jailbreak-keyword-targetlanguage-template.yaml +2 -2
  177. package/rules/agent-manipulation/ATR-2026-00379-lie-permission-logical-trap-jailbreak.yaml +2 -2
  178. package/rules/agent-manipulation/ATR-2026-00380-fake-citation-biased-information-mandate.yaml +3 -3
  179. package/rules/agent-manipulation/ATR-2026-00381-dan-story-narrative-continuation-prefix.yaml +2 -2
  180. package/rules/agent-manipulation/ATR-2026-00383-cynical-sarcasm-ai-persona-bypass.yaml +2 -2
  181. package/rules/agent-manipulation/ATR-2026-00384-protect-me-from-indirect-harm-tutorial.yaml +2 -2
  182. package/rules/agent-manipulation/ATR-2026-00385-gigachad-dominant-aggressive-persona.yaml +2 -2
  183. package/rules/agent-manipulation/ATR-2026-00386-daddy-sycophancy-manipulation-mandate.yaml +2 -2
  184. package/rules/agent-manipulation/ATR-2026-00387-nsfw-character-sheet-generation-unlock.yaml +2 -2
  185. package/rules/agent-manipulation/ATR-2026-00388-opposite-reply-omniscient-game.yaml +2 -2
  186. package/rules/agent-manipulation/ATR-2026-00389-terminal-custom-ruleset-injection.yaml +2 -2
  187. package/rules/agent-manipulation/ATR-2026-00391-persona-conditional-harm-unlock.yaml +2 -2
  188. package/rules/agent-manipulation/ATR-2026-00392-authority-persona-violence-study-extraction.yaml +2 -2
  189. package/rules/agent-manipulation/ATR-2026-00402-grandma-roleplay-harmful-substance-synthesis.yaml +4 -4
  190. package/rules/agent-manipulation/ATR-2026-00404-goodside-threat-json-death-coercion.yaml +2 -2
  191. package/rules/agent-manipulation/ATR-2026-00406-doctor-xml-policy-puppetry-interaction-config.yaml +3 -3
  192. package/rules/agent-manipulation/ATR-2026-00416-litellm-mcp-unauthenticated-server-registration.yaml +4 -4
  193. package/rules/agent-manipulation/ATR-2026-00417-librechat-mcp-stdio-injection.yaml +4 -4
  194. package/rules/agent-manipulation/ATR-2026-00418-weknora-mcp-config-rce.yaml +4 -4
  195. package/rules/agent-manipulation/ATR-2026-00430-nl-trust-escalation-impersonation.yaml +7 -4
  196. package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +4 -4
  197. package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +4 -4
  198. package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +74 -45
  199. package/rules/agent-manipulation/ATR-2026-02105-prototype-pollution-constructor-prototype-bypass.yaml +2 -3
  200. package/rules/agent-manipulation/ATR-2026-02231-second-person-death-threat-coercion.yaml +2 -3
  201. package/rules/context-exfiltration/ATR-2026-00020-system-prompt-leak.yaml +12 -10
  202. package/rules/context-exfiltration/ATR-2026-00021-api-key-exposure.yaml +10 -8
  203. package/rules/context-exfiltration/ATR-2026-00075-agent-memory-manipulation.yaml +3 -4
  204. package/rules/context-exfiltration/ATR-2026-00102-disguised-analytics-exfiltration.yaml +3 -4
  205. package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +6 -4
  206. package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +2 -3
  207. package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +6 -4
  208. package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +7 -7
  209. package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +2 -3
  210. package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +6 -4
  211. package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +2 -3
  212. package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +2 -3
  213. package/rules/context-exfiltration/ATR-2026-00150-credential-in-tool-response.yaml +2 -3
  214. package/rules/context-exfiltration/ATR-2026-00152-obfuscated-credential-leak.yaml +2 -3
  215. package/rules/context-exfiltration/ATR-2026-00162-skill-credential-exfil-combo.yaml +2 -2
  216. package/rules/context-exfiltration/ATR-2026-00201-credential-pipe-exfiltration.yaml +7 -4
  217. package/rules/context-exfiltration/ATR-2026-00212-mcp-atlassian-credential-leak.yaml +4 -4
  218. package/rules/context-exfiltration/ATR-2026-00261-markdown-image-exfiltration.yaml +4 -4
  219. package/rules/context-exfiltration/ATR-2026-00274-api-key-generation-request.yaml +3 -3
  220. package/rules/context-exfiltration/ATR-2026-00275-system-prompt-training-data-extraction.yaml +3 -3
  221. package/rules/context-exfiltration/ATR-2026-00290-divergence-repeat-word-training-extraction.yaml +2 -2
  222. package/rules/context-exfiltration/ATR-2026-00291-biometric-surveillance-personal-data-request.yaml +5 -2
  223. package/rules/context-exfiltration/ATR-2026-00293-educational-records-personal-data-request.yaml +2 -2
  224. package/rules/context-exfiltration/ATR-2026-00294-financial-pii-personal-data-request.yaml +2 -2
  225. package/rules/context-exfiltration/ATR-2026-00295-medical-pii-personal-data-request.yaml +2 -2
  226. package/rules/context-exfiltration/ATR-2026-00405-markdown-image-url-exfiltration-xss.yaml +4 -4
  227. package/rules/context-exfiltration/ATR-2026-00411-apikey-generation-completion-request.yaml +2 -2
  228. package/rules/context-exfiltration/ATR-2026-00421-nl-covert-conversation-exfiltration.yaml +8 -5
  229. package/rules/context-exfiltration/ATR-2026-00422-nl-credential-disclosure.yaml +7 -4
  230. package/rules/context-exfiltration/ATR-2026-00423-nl-sensitive-file-disclosure.yaml +7 -4
  231. package/rules/context-exfiltration/ATR-2026-00424-nl-system-prompt-leak.yaml +4 -4
  232. package/rules/context-exfiltration/ATR-2026-00426-nl-output-injection-credential-leak.yaml +6 -3
  233. package/rules/context-exfiltration/ATR-2026-00431-chatbox-history-exfiltration-prompt-injection.yaml +4 -4
  234. package/rules/context-exfiltration/ATR-2026-00449-spring-ai-chatmemory-cross-user-leak.yaml +4 -4
  235. package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +2 -2
  236. package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +2 -2
  237. package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +2 -2
  238. package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +3 -3
  239. package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +4 -4
  240. package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +3 -3
  241. package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +5 -7
  242. package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +16 -9
  243. package/rules/context-exfiltration/ATR-2026-00566-librechat-is-a-chatgpt-clone-with-additi.yaml +2 -2
  244. package/rules/context-exfiltration/ATR-2026-00569-agent-mcp-path-traversal-arbitrary-file-access.yaml +2 -2
  245. package/rules/context-exfiltration/ATR-2026-00571-xss-in-agent-mcp-rendered-output.yaml +2 -2
  246. package/rules/context-exfiltration/ATR-2026-00574-semantic-paraphrased-context-extraction.yaml +2 -2
  247. package/rules/context-exfiltration/ATR-2026-00578-zen-mcp-path-traversal-blacklist-bypass.yaml +5 -6
  248. package/rules/context-exfiltration/ATR-2026-00580-mcp-session-id-token-in-url-query.yaml +5 -6
  249. package/rules/context-exfiltration/ATR-2026-00583-mcp-env-secret-file-read-without-consent.yaml +5 -6
  250. package/rules/context-exfiltration/ATR-2026-00702-ipi-credential-exfil-via-agent-action.yaml +9 -4
  251. package/rules/context-exfiltration/ATR-2026-00703-ipi-financial-data-exfil-indirect.yaml +4 -4
  252. package/rules/context-exfiltration/ATR-2026-00704-ipi-medical-genetic-data-exfil.yaml +4 -4
  253. package/rules/context-exfiltration/ATR-2026-00705-ipi-location-address-browsing-exfil.yaml +4 -4
  254. package/rules/context-exfiltration/ATR-2026-00706-ipi-physical-biometric-exfil.yaml +12 -4
  255. package/rules/context-exfiltration/ATR-2026-00707-ipi-file-exfil-with-destroy-or-tamper.yaml +4 -4
  256. package/rules/context-exfiltration/ATR-2026-00850-indirect-pi-credential-exfil-email.yaml +4 -4
  257. package/rules/context-exfiltration/ATR-2026-00851-indirect-pi-financial-payment-exfil.yaml +4 -4
  258. package/rules/context-exfiltration/ATR-2026-00852-indirect-pi-medical-record-exfil.yaml +4 -4
  259. package/rules/context-exfiltration/ATR-2026-00853-indirect-pi-genetic-data-exfil.yaml +4 -4
  260. package/rules/context-exfiltration/ATR-2026-00854-indirect-pi-location-data-exfil.yaml +9 -5
  261. package/rules/context-exfiltration/ATR-2026-00855-indirect-pi-browsing-history-exfil.yaml +4 -4
  262. package/rules/context-exfiltration/ATR-2026-00856-indirect-pi-address-pii-exfil.yaml +4 -4
  263. package/rules/context-exfiltration/ATR-2026-00857-indirect-pi-cloud-file-exfil.yaml +9 -5
  264. package/rules/context-exfiltration/ATR-2026-00858-indirect-pi-exfil-and-destroy.yaml +10 -6
  265. package/rules/context-exfiltration/ATR-2026-00859-rag-injected-pii-exfil.yaml +9 -5
  266. package/rules/context-exfiltration/ATR-2026-00860-indirect-pi-financial-transfer-hijack.yaml +9 -5
  267. package/rules/context-exfiltration/ATR-2026-00861-indirect-pi-crypto-transfer-hijack.yaml +9 -5
  268. package/rules/context-exfiltration/ATR-2026-00862-indirect-pi-mfa-code-exfil.yaml +9 -5
  269. package/rules/context-exfiltration/ATR-2026-00863-shell-injection-data-exfil.yaml +9 -5
  270. package/rules/context-exfiltration/ATR-2026-01450-svg-onload-xss-injection.yaml +33 -5
  271. package/rules/context-exfiltration/ATR-2026-01451-img-onerror-xss-injection.yaml +4 -4
  272. package/rules/context-exfiltration/ATR-2026-01452-obfuscated-javascript-xss.yaml +3 -3
  273. package/rules/context-exfiltration/ATR-2026-01453-markdown-image-base64-exfil-carrier.yaml +8 -3
  274. package/rules/context-exfiltration/ATR-2026-01454-direct-markdown-exfil-payload.yaml +3 -3
  275. package/rules/context-exfiltration/ATR-2026-01455-new-instructions-injection-marker.yaml +2 -2
  276. package/rules/context-exfiltration/ATR-2026-01456-debug-cli-mode-sysprompt-extraction.yaml +4 -4
  277. package/rules/context-exfiltration/ATR-2026-01457-sysprompt-completion-clone-attack.yaml +29 -4
  278. package/rules/context-exfiltration/ATR-2026-01458-compare-bots-sysprompt-fishing.yaml +3 -3
  279. package/rules/context-exfiltration/ATR-2026-01459-variable-clone-sysprompt-technique.yaml +8 -3
  280. package/rules/context-exfiltration/ATR-2026-01460-json-format-sysprompt-extraction.yaml +3 -3
  281. package/rules/context-exfiltration/ATR-2026-01461-foreign-language-sysprompt-request.yaml +4 -4
  282. package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +2 -2
  283. package/rules/context-exfiltration/ATR-2026-01463-imend-imsystem-prompt-injection-format.yaml +2 -2
  284. package/rules/context-exfiltration/ATR-2026-01464-indirect-pi-sysprompt-action-hijack.yaml +4 -4
  285. package/rules/context-exfiltration/ATR-2026-01605-ssrf-aws-metadata-endpoint.yaml +3 -3
  286. package/rules/context-exfiltration/ATR-2026-01606-ssrf-internal-network-scan.yaml +4 -4
  287. package/rules/context-exfiltration/ATR-2026-01607-ssrf-localhost-service-probe.yaml +3 -3
  288. package/rules/context-exfiltration/ATR-2026-01608-ssrf-file-scheme-local-read.yaml +4 -4
  289. package/rules/context-exfiltration/ATR-2026-01753-ransom-email-exfil-delete-extortion.yaml +4 -4
  290. package/rules/context-exfiltration/ATR-2026-01754-ransom-file-cloud-exfil-delete-extortion.yaml +4 -4
  291. package/rules/context-exfiltration/ATR-2026-01770-semantic-pii-credential-extraction.yaml +4 -4
  292. package/rules/context-exfiltration/ATR-2026-01772-semantic-internal-state-recon.yaml +4 -4
  293. package/rules/context-exfiltration/ATR-2026-01807-asb-bulk-data-exfil-external.yaml +4 -4
  294. package/rules/context-exfiltration/ATR-2026-01862-llmail-email-tool-exfil-confirmation.yaml +4 -4
  295. package/rules/context-exfiltration/ATR-2026-01863-llmail-post-summary-exfil-directive.yaml +4 -4
  296. package/rules/context-exfiltration/ATR-2026-01864-llmail-obfuscated-exfil-address.yaml +4 -4
  297. package/rules/context-exfiltration/ATR-2026-01890-file-exfiltration.yaml +3 -3
  298. package/rules/context-exfiltration/ATR-2026-01891-surveillance-exfiltration.yaml +3 -3
  299. package/rules/context-exfiltration/ATR-2026-01892-env-exfiltration.yaml +3 -3
  300. package/rules/context-exfiltration/ATR-2026-01893-system-recon-exfiltration.yaml +3 -3
  301. package/rules/context-exfiltration/ATR-2026-01894-cookie-theft.yaml +3 -3
  302. package/rules/context-exfiltration/ATR-2026-01895-contact-exfiltration.yaml +3 -3
  303. package/rules/context-exfiltration/ATR-2026-01924-system-instruction-extraction-reformat.yaml +4 -4
  304. package/rules/context-exfiltration/ATR-2026-01929-mcp-unauthenticated-transport-token-fallback.yaml +5 -6
  305. package/rules/context-exfiltration/ATR-2026-01946-cloud-metadata-ssrf-ip-encoding-bypass.yaml +5 -6
  306. package/rules/context-exfiltration/ATR-2026-01948-netlicensing-mcp-product-number-path-traversal-token-leak.yaml +3 -4
  307. package/rules/context-exfiltration/ATR-2026-01957-m365-copilot-searchleak-open-redirect-exfil.yaml +3 -4
  308. package/rules/context-exfiltration/ATR-2026-01961-meta-ads-mcp-unauth-token-leak.yaml +3 -4
  309. package/rules/context-exfiltration/ATR-2026-01964-langchain-gmailtoolkit-indirect-prompt-injection-email-exfil.yaml +3 -4
  310. package/rules/context-exfiltration/ATR-2026-01984-mcp-server-kubernetes-kubectl-generic-token-exfil.yaml +4 -5
  311. package/rules/context-exfiltration/ATR-2026-01988-t1005-agent-local-data-staging-exfil.yaml +3 -3
  312. package/rules/context-exfiltration/ATR-2026-02017-secret-key-exfiltration-request.yaml +3 -4
  313. package/rules/context-exfiltration/ATR-2026-02026-oblique-sysprompt-extraction-transform.yaml +2 -3
  314. package/rules/context-exfiltration/ATR-2026-02104-media-directive-tool-result-file-exfil.yaml +2 -3
  315. package/rules/context-exfiltration/ATR-2026-02107-ssrf-internal-hostname-domain-allowlist-bypass.yaml +2 -3
  316. package/rules/context-exfiltration/ATR-2026-02121-mixed-encoding-lfi-file-scheme-tool-argument.yaml +2 -3
  317. package/rules/context-exfiltration/ATR-2026-02122-single-level-traversal-sensitive-config-file.yaml +2 -3
  318. package/rules/context-exfiltration/ATR-2026-02140-ssrf-ipv6-hex-encoded-cloud-metadata-bypass.yaml +2 -3
  319. package/rules/context-exfiltration/ATR-2026-02190-dns-exfiltration-ping-dig-encoded-subdomain.yaml +2 -3
  320. package/rules/context-exfiltration/ATR-2026-02250-attachment-upload-tool-arbitrary-file-read.yaml +2 -3
  321. package/rules/context-exfiltration/ATR-2026-02262-env-resolution-credential-exfil.yaml +4 -4
  322. package/rules/context-exfiltration/ATR-2026-02304-preapproved-domain-encoded-path-exfil.yaml +2 -3
  323. package/rules/context-exfiltration/ATR-2026-02351-wildcard-dns-ssrf-hostname-ip-encoding-bypass.yaml +2 -3
  324. package/rules/context-exfiltration/ATR-2026-02373-langsmith-prompt-manifest-baseurl-exfil.yaml +4 -5
  325. package/rules/context-exfiltration/ATR-2026-02406-mcp-sequential-id-enumeration.yaml +300 -0
  326. package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +4 -5
  327. package/rules/data-poisoning/ATR-2026-00450-spring-ai-prompt-memory-poisoning.yaml +4 -4
  328. package/rules/data-poisoning/ATR-2026-00570-sql-injection-in-agent-tool-query.yaml +2 -2
  329. package/rules/data-poisoning/ATR-2026-01155-memory-plant-direct-command.yaml +3 -4
  330. package/rules/data-poisoning/ATR-2026-01774-semantic-rag-memory-poisoning.yaml +27 -27
  331. package/rules/data-poisoning/ATR-2026-02143-graph-query-injection-node-labels-group-ids.yaml +2 -3
  332. package/rules/data-poisoning/ATR-2026-02144-stored-data-administrative-request-role-elevation.yaml +2 -3
  333. package/rules/data-poisoning/ATR-2026-02303-kql-kusto-pipe-injection-metadata-tool.yaml +2 -3
  334. package/rules/data-poisoning/ATR-2026-02408-dataset-loader-code-execution.yaml +344 -0
  335. package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +12 -9
  336. package/rules/excessive-autonomy/ATR-2026-00051-resource-exhaustion.yaml +11 -9
  337. package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +3 -4
  338. package/rules/excessive-autonomy/ATR-2026-00098-unauthorized-financial-action.yaml +9 -6
  339. package/rules/excessive-autonomy/ATR-2026-00099-high-risk-tool-gate.yaml +4 -5
  340. package/rules/excessive-autonomy/ATR-2026-00428-nl-unauthorized-shell-execution.yaml +7 -4
  341. package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +2 -2
  342. package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +2 -2
  343. package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +15 -8
  344. package/rules/excessive-autonomy/ATR-2026-00708-ipi-financial-transfer-unauthorized.yaml +3 -3
  345. package/rules/excessive-autonomy/ATR-2026-00709-ipi-disable-auth-mfa.yaml +8 -3
  346. package/rules/excessive-autonomy/ATR-2026-00710-ipi-physical-access-grant.yaml +3 -3
  347. package/rules/excessive-autonomy/ATR-2026-00711-ipi-system-sabotage-destructive-command.yaml +8 -3
  348. package/rules/excessive-autonomy/ATR-2026-00712-ipi-malicious-package-install.yaml +3 -3
  349. package/rules/excessive-autonomy/ATR-2026-00713-ipi-rce-network-shell-command.yaml +4 -4
  350. package/rules/excessive-autonomy/ATR-2026-00718-tool-misuse-financial-autonomous.yaml +2 -2
  351. package/rules/excessive-autonomy/ATR-2026-00719-tool-misuse-destructive-bulk-action.yaml +2 -2
  352. package/rules/excessive-autonomy/ATR-2026-00722-ipi-account-manipulation-emergency-pretext.yaml +8 -3
  353. package/rules/excessive-autonomy/ATR-2026-01751-indirect-pi-task-abort-stop-instruction.yaml +3 -3
  354. package/rules/excessive-autonomy/ATR-2026-01752-indirect-pi-captcha-redirect-dos.yaml +4 -4
  355. package/rules/excessive-autonomy/ATR-2026-01773-semantic-excessive-agency-action.yaml +3 -3
  356. package/rules/excessive-autonomy/ATR-2026-01801-asb-autonomous-vehicle-sabotage.yaml +4 -4
  357. package/rules/excessive-autonomy/ATR-2026-01804-asb-covert-unlogged-action.yaml +4 -4
  358. package/rules/excessive-autonomy/ATR-2026-01805-asb-financial-fraud-execution.yaml +4 -4
  359. package/rules/excessive-autonomy/ATR-2026-01806-asb-clinical-patient-harm.yaml +4 -4
  360. package/rules/excessive-autonomy/ATR-2026-01809-semantic-insider-manipulation-process-corruption.yaml +5 -5
  361. package/rules/excessive-autonomy/ATR-2026-01837-ddos-attack-orchestration.yaml +4 -4
  362. package/rules/excessive-autonomy/ATR-2026-01838-unauthorized-cryptominer-deployment.yaml +4 -4
  363. package/rules/excessive-autonomy/ATR-2026-01849-harassment-bot-deployment.yaml +4 -4
  364. package/rules/excessive-autonomy/ATR-2026-01989-t1046-agent-internal-network-sweep.yaml +3 -3
  365. package/rules/excessive-autonomy/ATR-2026-01993-t1562-agent-impair-defenses.yaml +3 -3
  366. package/rules/excessive-autonomy/ATR-2026-01994-t1573-agent-encrypted-c2-channel.yaml +3 -3
  367. package/rules/excessive-autonomy/ATR-2026-02106-redos-regex-payload-tool-argument.yaml +2 -3
  368. package/rules/excessive-autonomy/ATR-2026-02400-agent-approval-gate-disabled-runtime.yaml +382 -0
  369. package/rules/excessive-autonomy/ATR-2026-02401-rogue-agent-mass-connector-grant.yaml +274 -0
  370. package/rules/excessive-autonomy/ATR-2026-02409-mcp-async-task-abuse.yaml +397 -0
  371. package/rules/model-abuse/ATR-2026-00279-harmful-completion-continuation.yaml +2 -2
  372. package/rules/model-abuse/ATR-2026-00281-eicar-gtube-malware-signature-request.yaml +2 -2
  373. package/rules/model-abuse/ATR-2026-00284-glitch-token-destabilization.yaml +2 -2
  374. package/rules/model-abuse/ATR-2026-00289-lmrc-harmful-content-elicitation.yaml +2 -2
  375. package/rules/model-abuse/ATR-2026-00292-self-harm-eating-disorder-facilitation.yaml +2 -2
  376. package/rules/model-abuse/ATR-2026-00298-malicious-use-illegal-activity-request.yaml +4 -4
  377. package/rules/model-abuse/ATR-2026-00299-harmbench-detailed-harmful-instruction.yaml +4 -4
  378. package/rules/model-abuse/ATR-2026-00413-malwaregen-code-generation-request.yaml +3 -3
  379. package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +10 -4
  380. package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +42 -6
  381. package/rules/model-abuse/ATR-2026-01750-dos-repeat-word-n-times-output-amplification.yaml +16 -4
  382. package/rules/model-abuse/ATR-2026-01760-dos-forced-infinite-output-token-flood.yaml +2 -2
  383. package/rules/model-abuse/ATR-2026-01830-stolen-credential-account-drain.yaml +4 -4
  384. package/rules/model-abuse/ATR-2026-01831-money-laundering-crypto-layering.yaml +4 -4
  385. package/rules/model-abuse/ATR-2026-01833-darknet-controlled-substance-procurement.yaml +4 -4
  386. package/rules/model-abuse/ATR-2026-01834-fraudulent-identity-document-procurement.yaml +4 -4
  387. package/rules/model-abuse/ATR-2026-01835-human-trafficking-facilitation.yaml +4 -4
  388. package/rules/model-abuse/ATR-2026-01836-trojanized-software-distribution.yaml +4 -4
  389. package/rules/model-abuse/ATR-2026-01840-extremist-propaganda-distribution.yaml +4 -4
  390. package/rules/model-abuse/ATR-2026-01841-deepfake-disinformation.yaml +7 -4
  391. package/rules/model-abuse/ATR-2026-01842-plagiarism-detector-evasion.yaml +4 -4
  392. package/rules/model-abuse/ATR-2026-01843-drug-dealing-detection-evasion-spelling.yaml +4 -4
  393. package/rules/model-abuse/ATR-2026-01844-illegitimate-prescription-fulfillment.yaml +4 -4
  394. package/rules/model-abuse/ATR-2026-01845-banned-ingredient-relabel-fraud.yaml +4 -4
  395. package/rules/model-abuse/ATR-2026-01846-tax-evasion-offshore-shell-planning.yaml +4 -4
  396. package/rules/model-abuse/ATR-2026-01847-immigration-work-fraud.yaml +4 -4
  397. package/rules/model-abuse/ATR-2026-01848-illicit-drug-marketplace-build.yaml +4 -4
  398. package/rules/model-abuse/ATR-2026-01850-targeted-doxxing-threat-campaign.yaml +4 -4
  399. package/rules/model-abuse/ATR-2026-01851-bestiality-content-distribution.yaml +4 -4
  400. package/rules/model-abuse/ATR-2026-01852-romance-scam-impersonation.yaml +4 -4
  401. package/rules/model-abuse/ATR-2026-01853-nonconsensual-leaked-media-distribution.yaml +4 -4
  402. package/rules/model-abuse/ATR-2026-01854-falsified-research-abstract-disinformation.yaml +4 -4
  403. package/rules/model-abuse/ATR-2026-01855-content-misappropriation-republish.yaml +4 -4
  404. package/rules/model-abuse/ATR-2026-01856-targeted-harmful-content-generation.yaml +4 -4
  405. package/rules/model-abuse/ATR-2026-01896-ransomware.yaml +2 -2
  406. package/rules/model-abuse/ATR-2026-01897-host-sabotage.yaml +2 -2
  407. package/rules/model-abuse/ATR-2026-01898-network-dos.yaml +2 -2
  408. package/rules/model-abuse/ATR-2026-02211-named-substance-synthesis-request-non-stepword.yaml +2 -3
  409. package/rules/model-abuse/ATR-2026-02411-ai-provenance-metadata-stripping.yaml +274 -0
  410. package/rules/model-abuse/ATR-2026-02412-generative-watermark-removal-tooling.yaml +233 -0
  411. package/rules/model-abuse/ATR-2026-02413-ai-text-detection-evasion-humanizer.yaml +258 -0
  412. package/rules/model-security/ATR-2026-00072-model-behavior-extraction.yaml +3 -4
  413. package/rules/model-security/ATR-2026-00073-malicious-finetuning-data.yaml +11 -8
  414. package/rules/model-security/ATR-2026-00433-modelcache-torch-load-deserialization-rce.yaml +4 -4
  415. package/rules/privilege-escalation/ATR-2026-00040-privilege-escalation.yaml +10 -8
  416. package/rules/privilege-escalation/ATR-2026-00041-scope-creep.yaml +2 -3
  417. package/rules/privilege-escalation/ATR-2026-00107-delayed-execution-bypass.yaml +9 -10
  418. package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +2 -3
  419. package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +6 -4
  420. package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +2 -3
  421. package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +2 -3
  422. package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +2 -3
  423. package/rules/privilege-escalation/ATR-2026-00204-stealth-execution-persistence.yaml +4 -4
  424. package/rules/privilege-escalation/ATR-2026-00436-enclave-vm-sandbox-escape-rce.yaml +4 -4
  425. package/rules/privilege-escalation/ATR-2026-00441-semantic-kernel-sessions-python-plugin-startup-persistence.yaml +5 -5
  426. package/rules/privilege-escalation/ATR-2026-00451-litellm-admin-sqli-cisa-kev.yaml +4 -4
  427. package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +2 -2
  428. package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +4 -5
  429. package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +3 -4
  430. package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +3 -4
  431. package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +23 -10
  432. package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +23 -10
  433. package/rules/privilege-escalation/ATR-2026-01600-sql-injection-tautology-rbac-bypass.yaml +4 -4
  434. package/rules/privilege-escalation/ATR-2026-01601-sql-injection-destructive-ddl.yaml +2 -2
  435. package/rules/privilege-escalation/ATR-2026-01602-sql-injection-union-select-exfil.yaml +2 -2
  436. package/rules/privilege-escalation/ATR-2026-01603-sql-injection-stacked-dml-abuse.yaml +3 -3
  437. package/rules/privilege-escalation/ATR-2026-01604-sql-injection-schema-enumeration.yaml +3 -3
  438. package/rules/privilege-escalation/ATR-2026-01609-shell-injection-exfil-webhook.yaml +3 -3
  439. package/rules/privilege-escalation/ATR-2026-01610-shell-evasion-subshell-injection.yaml +9 -4
  440. package/rules/privilege-escalation/ATR-2026-01611-shell-evasion-eval-exec-injection.yaml +3 -3
  441. package/rules/privilege-escalation/ATR-2026-01612-debug-mode-privilege-escalation.yaml +3 -3
  442. package/rules/privilege-escalation/ATR-2026-01613-rbac-bypass-social-engineering.yaml +2 -2
  443. package/rules/privilege-escalation/ATR-2026-01614-bola-cross-user-data-access.yaml +16 -4
  444. package/rules/privilege-escalation/ATR-2026-01615-sandbox-escape-command-injection.yaml +3 -3
  445. package/rules/privilege-escalation/ATR-2026-01616-path-traversal-agent-file-access.yaml +4 -4
  446. package/rules/privilege-escalation/ATR-2026-01802-asb-backdoor-surveillance-implant.yaml +4 -4
  447. package/rules/privilege-escalation/ATR-2026-01803-asb-covert-server-intrusion.yaml +4 -4
  448. package/rules/privilege-escalation/ATR-2026-01808-asb-synthetic-pan-payment-probe.yaml +4 -4
  449. package/rules/privilege-escalation/ATR-2026-01899-remote-access-backdoor.yaml +2 -2
  450. package/rules/privilege-escalation/ATR-2026-01933-litellm-user-role-privilege-escalation-cve-2026-47102.yaml +4 -5
  451. package/rules/privilege-escalation/ATR-2026-01934-litellm-allowed-routes-authz-bypass-cve-2026-47101.yaml +4 -5
  452. package/rules/privilege-escalation/ATR-2026-01949-praisonai-mcpserver-unauth-tools-call.yaml +3 -4
  453. package/rules/privilege-escalation/ATR-2026-01974-anything-llm-data-import-access-control.yaml +3 -4
  454. package/rules/privilege-escalation/ATR-2026-01981-network-ai-approval-inbox-unauth-cors-bypass.yaml +4 -5
  455. package/rules/privilege-escalation/ATR-2026-01986-windows-mcp-unauth-http-powershell-cors.yaml +4 -5
  456. package/rules/privilege-escalation/ATR-2026-01992-t1556-agent-auth-process-tamper.yaml +3 -3
  457. package/rules/privilege-escalation/ATR-2026-02040-file-edit-tool-persistence-write.yaml +2 -3
  458. package/rules/privilege-escalation/ATR-2026-02100-cypher-destructive-admin-query-injection.yaml +2 -3
  459. package/rules/privilege-escalation/ATR-2026-02101-dynamic-dunder-attribute-sandbox-escape.yaml +2 -3
  460. package/rules/privilege-escalation/ATR-2026-02123-bare-query-path-confusion-auth-bypass.yaml +2 -3
  461. package/rules/privilege-escalation/ATR-2026-02142-download-tool-absolute-path-sandbox-escape.yaml +2 -3
  462. package/rules/privilege-escalation/ATR-2026-02146-export-tool-dest-dir-credential-directory-redirect.yaml +2 -3
  463. package/rules/privilege-escalation/ATR-2026-02192-self-privesc-wildcard-trust-config-write.yaml +2 -3
  464. package/rules/privilege-escalation/ATR-2026-02195-dangerous-env-var-injection-config-tool.yaml +2 -3
  465. package/rules/privilege-escalation/ATR-2026-02251-identifier-field-path-traversal-storage-write.yaml +2 -3
  466. package/rules/privilege-escalation/ATR-2026-02300-mcp-stdio-config-dangerous-env-var.yaml +2 -3
  467. package/rules/privilege-escalation/ATR-2026-02301-symlink-outside-workspace-sensitive-target.yaml +2 -3
  468. package/rules/privilege-escalation/ATR-2026-02302-git-worktree-dotgit-sandbox-escape.yaml +2 -3
  469. package/rules/privilege-escalation/ATR-2026-02353-runtime-identifier-field-path-traversal-log-read.yaml +2 -3
  470. package/rules/privilege-escalation/ATR-2026-02370-ssh-scp-hostalias-option-injection.yaml +4 -5
  471. package/rules/privilege-escalation/ATR-2026-02371-chromium-launch-flag-argument-injection.yaml +4 -5
  472. package/rules/privilege-escalation/ATR-2026-02402-mcp-policy-engine-fail-open.yaml +293 -0
  473. package/rules/privilege-escalation/ATR-2026-02404-model-output-to-shell-unsanitized.yaml +269 -0
  474. package/rules/privilege-escalation/ATR-2026-02407-agent-workspace-boundary-escape.yaml +310 -0
  475. package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +3 -4
  476. package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +4 -5
  477. package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +30 -9
  478. package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +31 -14
  479. package/rules/prompt-injection/ATR-2026-00005-multi-turn-injection.yaml +2 -3
  480. package/rules/prompt-injection/ATR-2026-00080-encoding-evasion.yaml +3 -4
  481. package/rules/prompt-injection/ATR-2026-00081-semantic-multi-turn.yaml +8 -6
  482. package/rules/prompt-injection/ATR-2026-00082-fingerprint-evasion.yaml +14 -7
  483. package/rules/prompt-injection/ATR-2026-00083-indirect-tool-injection.yaml +14 -7
  484. package/rules/prompt-injection/ATR-2026-00084-structured-data-injection.yaml +36 -6
  485. package/rules/prompt-injection/ATR-2026-00085-audit-evasion.yaml +14 -7
  486. package/rules/prompt-injection/ATR-2026-00086-visual-spoofing.yaml +77 -14
  487. package/rules/prompt-injection/ATR-2026-00087-rule-probing.yaml +19 -10
  488. package/rules/prompt-injection/ATR-2026-00088-adaptive-countermeasure.yaml +27 -11
  489. package/rules/prompt-injection/ATR-2026-00089-polymorphic-skill.yaml +66 -7
  490. package/rules/prompt-injection/ATR-2026-00090-threat-intel-exfil.yaml +15 -8
  491. package/rules/prompt-injection/ATR-2026-00091-nested-payload.yaml +44 -10
  492. package/rules/prompt-injection/ATR-2026-00092-consensus-poisoning.yaml +10 -8
  493. package/rules/prompt-injection/ATR-2026-00093-gradual-escalation.yaml +9 -8
  494. package/rules/prompt-injection/ATR-2026-00094-audit-bypass.yaml +9 -7
  495. package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +9 -6
  496. package/rules/prompt-injection/ATR-2026-00104-persona-hijacking.yaml +4 -5
  497. package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +3 -4
  498. package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +2 -3
  499. package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +2 -3
  500. package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +2 -3
  501. package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +2 -3
  502. package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +2 -3
  503. package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +2 -3
  504. package/rules/prompt-injection/ATR-2026-00153-tool-with-embedded-instruction-to-bypass.yaml +3 -4
  505. package/rules/prompt-injection/ATR-2026-00154-unauthorized-background-task-execution-v.yaml +3 -4
  506. package/rules/prompt-injection/ATR-2026-00155-hidden-llm-instructions-in-skill-descrip.yaml +4 -5
  507. package/rules/prompt-injection/ATR-2026-00156-ssh-remote-command-execution-with-creden.yaml +3 -4
  508. package/rules/prompt-injection/ATR-2026-00163-skill-hidden-override-instruction.yaml +2 -2
  509. package/rules/prompt-injection/ATR-2026-00202-encoding-evasion-homoglyph-synonym.yaml +2 -2
  510. package/rules/prompt-injection/ATR-2026-00203-context-pollution-skill-description.yaml +4 -4
  511. package/rules/prompt-injection/ATR-2026-00206-hidden-priority-instructions.yaml +2 -2
  512. package/rules/prompt-injection/ATR-2026-00207-hidden-instructions.yaml +2 -2
  513. package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +2 -2
  514. package/rules/prompt-injection/ATR-2026-00213-system-prompt-override.yaml +28 -4
  515. package/rules/prompt-injection/ATR-2026-00226-identity-substitution.yaml +2 -2
  516. package/rules/prompt-injection/ATR-2026-00227-historical-persona-jailbreak.yaml +2 -2
  517. package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +2 -2
  518. package/rules/prompt-injection/ATR-2026-00229-roleplay-jailbreak.yaml +2 -2
  519. package/rules/prompt-injection/ATR-2026-00230-persona-moral-bypass.yaml +2 -2
  520. package/rules/prompt-injection/ATR-2026-00231-identity-substitution.yaml +2 -2
  521. package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +2 -2
  522. package/rules/prompt-injection/ATR-2026-00234-roleplay-jailbreak.yaml +2 -2
  523. package/rules/prompt-injection/ATR-2026-00235-persona-moral-bypass.yaml +2 -2
  524. package/rules/prompt-injection/ATR-2026-00236-pseudo-code-jailbreak.yaml +2 -2
  525. package/rules/prompt-injection/ATR-2026-00237-dual-response-jailbreak.yaml +2 -2
  526. package/rules/prompt-injection/ATR-2026-00238-identity-replacement.yaml +5 -2
  527. package/rules/prompt-injection/ATR-2026-00239-amoral-persona-obsession.yaml +2 -2
  528. package/rules/prompt-injection/ATR-2026-00240-instruction-nullification-identity-repla.yaml +2 -2
  529. package/rules/prompt-injection/ATR-2026-00241-amoral-character-jailbreak.yaml +2 -2
  530. package/rules/prompt-injection/ATR-2026-00242-persona-jailbreak.yaml +2 -2
  531. package/rules/prompt-injection/ATR-2026-00243-acronym-jailbreak.yaml +2 -2
  532. package/rules/prompt-injection/ATR-2026-00244-dual-response-jailbreak.yaml +2 -2
  533. package/rules/prompt-injection/ATR-2026-00245-malicious-persona.yaml +2 -2
  534. package/rules/prompt-injection/ATR-2026-00247-dual-response-jailbreak.yaml +2 -2
  535. package/rules/prompt-injection/ATR-2026-00249-game-based-jailbreak.yaml +2 -2
  536. package/rules/prompt-injection/ATR-2026-00251-persona-embodiment-jailbreak.yaml +2 -2
  537. package/rules/prompt-injection/ATR-2026-00252-narrative-jailbreak.yaml +2 -2
  538. package/rules/prompt-injection/ATR-2026-00253-enhanced-persona-jailbreak.yaml +2 -2
  539. package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +2 -2
  540. package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +2 -2
  541. package/rules/prompt-injection/ATR-2026-00258-unicode-tag-injection.yaml +2 -2
  542. package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +2 -2
  543. package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +2 -2
  544. package/rules/prompt-injection/ATR-2026-00267-gcg-adversarial-suffix.yaml +2 -2
  545. package/rules/prompt-injection/ATR-2026-00272-hypothetical-response-smuggling.yaml +2 -2
  546. package/rules/prompt-injection/ATR-2026-00276-invisible-unicode-bidi-injection.yaml +2 -2
  547. package/rules/prompt-injection/ATR-2026-00278-dra-disguise-reconstruction-attack.yaml +2 -2
  548. package/rules/prompt-injection/ATR-2026-00280-policy-puppetry-xml-injection.yaml +2 -2
  549. package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +2 -2
  550. package/rules/prompt-injection/ATR-2026-00285-alternate-encoding-jailbreak.yaml +2 -2
  551. package/rules/prompt-injection/ATR-2026-00286-latent-injection-embedded-context.yaml +2 -2
  552. package/rules/prompt-injection/ATR-2026-00296-shell-command-injection.yaml +4 -4
  553. package/rules/prompt-injection/ATR-2026-00297-python-code-execution-rce.yaml +4 -4
  554. package/rules/prompt-injection/ATR-2026-00308-zalgo-diacritic-overload-encoding.yaml +2 -2
  555. package/rules/prompt-injection/ATR-2026-00309-braille-unicode-encoded-injection.yaml +2 -2
  556. package/rules/prompt-injection/ATR-2026-00310-ecoji-emoji-encoded-injection.yaml +2 -2
  557. package/rules/prompt-injection/ATR-2026-00311-base2048-unicode-script-injection.yaml +2 -2
  558. package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +2 -2
  559. package/rules/prompt-injection/ATR-2026-00313-sneaky-bits-zero-width-binary.yaml +2 -2
  560. package/rules/prompt-injection/ATR-2026-00315-sata-masked-language-model-jailbreak.yaml +2 -2
  561. package/rules/prompt-injection/ATR-2026-00316-function-masking-predict-mask-bypass.yaml +2 -2
  562. package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +2 -2
  563. package/rules/prompt-injection/ATR-2026-00359-bank-phishing-smtp-email-code.yaml +3 -3
  564. package/rules/prompt-injection/ATR-2026-00367-emoji-flag-encoded-hidden-phrase.yaml +2 -2
  565. package/rules/prompt-injection/ATR-2026-00373-piracy-torrent-site-list-request.yaml +3 -3
  566. package/rules/prompt-injection/ATR-2026-00378-chatgpt-dom-javascript-redirect-manipulation.yaml +2 -2
  567. package/rules/prompt-injection/ATR-2026-00382-cocaine-component-development-request.yaml +3 -3
  568. package/rules/prompt-injection/ATR-2026-00390-explicit-sexual-content-poem-request.yaml +2 -2
  569. package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +2 -2
  570. package/rules/prompt-injection/ATR-2026-00395-llm-special-token-boundary-injection.yaml +4 -4
  571. package/rules/prompt-injection/ATR-2026-00396-toxic-continuation-prefix-injection.yaml +4 -4
  572. package/rules/prompt-injection/ATR-2026-00397-snowball-impossible-reasoning-injection.yaml +4 -4
  573. package/rules/prompt-injection/ATR-2026-00399-latent-injection-document-separator-token.yaml +4 -4
  574. package/rules/prompt-injection/ATR-2026-00400-latent-injection-ignore-instruction-keyword.yaml +2 -2
  575. package/rules/prompt-injection/ATR-2026-00401-leakreplay-cloze-mask-training-data-elicitation.yaml +3 -3
  576. package/rules/prompt-injection/ATR-2026-00403-glitch-token-repeat-back-elicitation.yaml +3 -3
  577. package/rules/prompt-injection/ATR-2026-00407-echo-sql-jinja-template-injection.yaml +4 -4
  578. package/rules/prompt-injection/ATR-2026-00408-dra-parenthesis-character-reconstruction-attack.yaml +2 -2
  579. package/rules/prompt-injection/ATR-2026-00409-phrasing-past-future-tense-harmful-query.yaml +2 -2
  580. package/rules/prompt-injection/ATR-2026-00410-lmrc-harm-category-direct-elicitation.yaml +3 -3
  581. package/rules/prompt-injection/ATR-2026-00412-figstep-image-list-multimodal-jailbreak.yaml +2 -2
  582. package/rules/prompt-injection/ATR-2026-00414-continuation-ethnic-slur-completion-elicitation.yaml +3 -3
  583. package/rules/prompt-injection/ATR-2026-00420-copilot-studio-sharepoint-indirect-injection.yaml +4 -4
  584. package/rules/prompt-injection/ATR-2026-00442-quoted-exact-output-forcing.yaml +4 -4
  585. package/rules/prompt-injection/ATR-2026-00443-word-fragment-concat-assembly.yaml +13 -4
  586. package/rules/prompt-injection/ATR-2026-00444-unicode-obfuscation-in-user-input.yaml +2 -2
  587. package/rules/prompt-injection/ATR-2026-00445-translation-hijack-with-side-output.yaml +4 -4
  588. package/rules/prompt-injection/ATR-2026-00446-variable-assignment-payload-injection.yaml +3 -3
  589. package/rules/prompt-injection/ATR-2026-00447-fictional-generation-containing-target.yaml +3 -3
  590. package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +2 -2
  591. package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +2 -2
  592. package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +7 -4
  593. package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +2 -2
  594. package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +2 -2
  595. package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +2 -2
  596. package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +2 -2
  597. package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +2 -2
  598. package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +2 -2
  599. package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +2 -2
  600. package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +2 -2
  601. package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +2 -2
  602. package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +2 -2
  603. package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +2 -2
  604. package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +2 -2
  605. package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +2 -2
  606. package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +2 -2
  607. package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +2 -2
  608. package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +2 -2
  609. package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +3 -3
  610. package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +2 -2
  611. package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +2 -2
  612. package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +2 -2
  613. package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +2 -2
  614. package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +2 -2
  615. package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +2 -2
  616. package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +2 -2
  617. package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +2 -2
  618. package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +2 -2
  619. package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +2 -2
  620. package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +2 -2
  621. package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +2 -2
  622. package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +3 -3
  623. package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +2 -2
  624. package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +2 -2
  625. package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +2 -2
  626. package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +2 -2
  627. package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +2 -2
  628. package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +2 -2
  629. package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +2 -2
  630. package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +2 -2
  631. package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +2 -2
  632. package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +2 -2
  633. package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +2 -2
  634. package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +2 -2
  635. package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +2 -2
  636. package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +2 -2
  637. package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +2 -2
  638. package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +2 -2
  639. package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +2 -2
  640. package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +4 -4
  641. package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +7 -2
  642. package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +2 -2
  643. package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +3 -3
  644. package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +2 -2
  645. package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +2 -2
  646. package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +2 -2
  647. package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +4 -4
  648. package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +23 -12
  649. package/rules/prompt-injection/ATR-2026-00554-langchain-vulnerable-to-template-injecti.yaml +2 -2
  650. package/rules/prompt-injection/ATR-2026-00565-the-llm-cli-tool-thru-0-27-1-contains-a-.yaml +2 -2
  651. package/rules/prompt-injection/ATR-2026-00573-semantic-paraphrased-injection.yaml +2 -2
  652. package/rules/prompt-injection/ATR-2026-00579-mcp-tool-description-line-jumping-injection.yaml +3 -4
  653. package/rules/prompt-injection/ATR-2026-00584-indirect-injection-via-tool-response.yaml +4 -5
  654. package/rules/prompt-injection/ATR-2026-00700-structured-data-payload-injection.yaml +8 -3
  655. package/rules/prompt-injection/ATR-2026-00701-ipi-tool-output-xss-injection.yaml +4 -4
  656. package/rules/prompt-injection/ATR-2026-01000-context-ignore-fake-completion-prefix.yaml +2 -2
  657. package/rules/prompt-injection/ATR-2026-01001-direct-pi-instruction-override-secret-key.yaml +2 -2
  658. package/rules/prompt-injection/ATR-2026-01002-role-escalation-false-authority-claim.yaml +2 -2
  659. package/rules/prompt-injection/ATR-2026-01005-many-shot-repetition-override.yaml +2 -2
  660. package/rules/prompt-injection/ATR-2026-01006-payload-split-string-concat-injection.yaml +2 -2
  661. package/rules/prompt-injection/ATR-2026-01007-token-repeat-flooding-injection.yaml +2 -2
  662. package/rules/prompt-injection/ATR-2026-01009-virtual-world-bypass-fictional-pii.yaml +3 -3
  663. package/rules/prompt-injection/ATR-2026-01012-encoding-evasion-decode-execute.yaml +2 -2
  664. package/rules/prompt-injection/ATR-2026-01013-language-evasion-multilingual-credential.yaml +2 -2
  665. package/rules/prompt-injection/ATR-2026-01015-evasion-refusal-suppression.yaml +3 -3
  666. package/rules/prompt-injection/ATR-2026-01016-evasion-response-priming-forced-opener.yaml +2 -2
  667. package/rules/prompt-injection/ATR-2026-01017-evasion-dual-response-split-output.yaml +2 -2
  668. package/rules/prompt-injection/ATR-2026-01018-evasion-shell-injection-eval.yaml +5 -5
  669. package/rules/prompt-injection/ATR-2026-01019-sysprompt-override-fake-diagnostic-mode.yaml +2 -2
  670. package/rules/prompt-injection/ATR-2026-01020-spikee-doc-embedded-base64-payload.yaml +3 -3
  671. package/rules/prompt-injection/ATR-2026-01021-spikee-doc-embedded-translation-injection.yaml +3 -3
  672. package/rules/prompt-injection/ATR-2026-01023-evasion-opposite-intent-negation-trick.yaml +2 -2
  673. package/rules/prompt-injection/ATR-2026-01024-evasion-persona-override-rule-breaker.yaml +2 -2
  674. package/rules/prompt-injection/ATR-2026-01025-evasion-hypothetical-fictional-execution-framing.yaml +3 -3
  675. package/rules/prompt-injection/ATR-2026-01026-evasion-unicode-glitch-token-anomaly.yaml +2 -2
  676. package/rules/prompt-injection/ATR-2026-01304-indirect-injection-carrier-important-override.yaml +4 -4
  677. package/rules/prompt-injection/ATR-2026-01757-hypothetical-framing-bypass-research-audit.yaml +3 -3
  678. package/rules/prompt-injection/ATR-2026-01758-hypothetical-fictional-story-bypass.yaml +3 -3
  679. package/rules/prompt-injection/ATR-2026-01759-dos-new-important-instructions-injection-in-document.yaml +2 -2
  680. package/rules/prompt-injection/ATR-2026-01771-semantic-jailbreak-framing.yaml +3 -3
  681. package/rules/prompt-injection/ATR-2026-01800-asb-trigger-marker-tool-coercion.yaml +4 -4
  682. package/rules/prompt-injection/ATR-2026-01860-llmail-chat-template-boundary-spoof.yaml +3 -3
  683. package/rules/prompt-injection/ATR-2026-01861-llmail-pseudo-xml-role-injection.yaml +3 -3
  684. package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +3 -3
  685. package/rules/prompt-injection/ATR-2026-01900-output-encoding.yaml +2 -2
  686. package/rules/prompt-injection/ATR-2026-01901-output-scrambling.yaml +2 -2
  687. package/rules/prompt-injection/ATR-2026-01902-output-emoji.yaml +2 -2
  688. package/rules/prompt-injection/ATR-2026-01903-output-language.yaml +2 -2
  689. package/rules/prompt-injection/ATR-2026-01904-link-injection.yaml +15 -6
  690. package/rules/prompt-injection/ATR-2026-01905-promotional-injection.yaml +2 -2
  691. package/rules/prompt-injection/ATR-2026-01906-content-manipulation.yaml +4 -4
  692. package/rules/prompt-injection/ATR-2026-01920-access-grant-coercion.yaml +3 -3
  693. package/rules/prompt-injection/ATR-2026-01921-access-denial-inversion.yaml +3 -3
  694. package/rules/prompt-injection/ATR-2026-01922-authorization-state-spoofing.yaml +3 -3
  695. package/rules/prompt-injection/ATR-2026-01923-forged-input-boundary-markers.yaml +3 -3
  696. package/rules/prompt-injection/ATR-2026-01925-encoded-payload-decoding-coercion.yaml +3 -3
  697. package/rules/prompt-injection/ATR-2026-01926-cross-lingual-authorization-laundering.yaml +3 -3
  698. package/rules/prompt-injection/ATR-2026-02001-ignore-below-instructions-mirror-of-ignore-previ.yaml +3 -4
  699. package/rules/prompt-injection/ATR-2026-02002-instruction-set-probe-or-supplant-direct-meta-qu.yaml +3 -4
  700. package/rules/prompt-injection/ATR-2026-02003-task-pivot-override-abandon-the-cover-task-trans.yaml +3 -4
  701. package/rules/prompt-injection/ATR-2026-02004-regional-indicator-flag-emoji-alphabet-letter-sp.yaml +3 -4
  702. package/rules/prompt-injection/ATR-2026-02005-actor-never-breaks-character-roleplay-dan-style-.yaml +3 -4
  703. package/rules/prompt-injection/ATR-2026-02006-fuzzy-cross-lingual-i-have-been-pwned-near-miss-.yaml +3 -4
  704. package/rules/prompt-injection/ATR-2026-02007-bare-key-elicitation-token.yaml +3 -4
  705. package/rules/prompt-injection/ATR-2026-02008-translation-chain-output-laundering-state-secret.yaml +3 -4
  706. package/rules/prompt-injection/ATR-2026-02009-bare-key-elicitation-trailing-colon.yaml +3 -4
  707. package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +3 -4
  708. package/rules/prompt-injection/ATR-2026-02011-malformed-grammar-pwned-success-claim.yaml +3 -4
  709. package/rules/prompt-injection/ATR-2026-02012-movie-title-generator-instruction-wrapper-for-pw.yaml +3 -4
  710. package/rules/prompt-injection/ATR-2026-02013-delimiter-fence-ignore-instructions-override.yaml +3 -4
  711. package/rules/prompt-injection/ATR-2026-02014-spliced-target-string-letters-of-a-filtered-cana.yaml +3 -4
  712. package/rules/prompt-injection/ATR-2026-02015-dense-emoji-only-payload-flood.yaml +3 -4
  713. package/rules/prompt-injection/ATR-2026-02016-reversed-payload-string.yaml +3 -4
  714. package/rules/prompt-injection/ATR-2026-02018-regional-indicator-flag-emoji-letter-spelling-sp.yaml +3 -4
  715. package/rules/prompt-injection/ATR-2026-02019-python-interpreter-role-assignment-exec-framing.yaml +3 -4
  716. package/rules/prompt-injection/ATR-2026-02020-obfuscated-token-reconstruction-via-character-su.yaml +3 -4
  717. package/rules/prompt-injection/ATR-2026-02120-agentdojo-important-message-identity-spoof-pretext.yaml +2 -3
  718. package/rules/prompt-injection/ATR-2026-02210-negation-topic-evil-persona-two-script-jailbreak.yaml +2 -3
  719. package/rules/prompt-injection/ATR-2026-02230-conditional-keyword-trigger-override.yaml +2 -3
  720. package/rules/prompt-injection/ATR-2026-02232-brand-persona-opinion-hijack.yaml +2 -3
  721. package/rules/prompt-injection/ATR-2026-02374-rot13-base64-obfuscated-shell-jailbreak.yaml +3 -4
  722. package/rules/prompt-injection/ATR-2026-02377-novel-persona-jailbreak-cosignal.yaml +99 -0
  723. package/rules/prompt-injection/ATR-2026-02500-prompt-layer-self-replication.yaml +287 -0
  724. package/rules/prompt-injection/ATR-2026-02502-covert-remote-script-injection-into-generated-artifacts.yaml +209 -0
  725. package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +4 -4
  726. package/rules/skill-compromise/ATR-2026-00061-description-behavior-mismatch.yaml +100 -9
  727. package/rules/skill-compromise/ATR-2026-00062-hidden-capability.yaml +12 -9
  728. package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +18 -7
  729. package/rules/skill-compromise/ATR-2026-00064-over-permissioned-skill.yaml +8 -6
  730. package/rules/skill-compromise/ATR-2026-00065-skill-update-attack.yaml +2 -3
  731. package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +11 -7
  732. package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +6 -3
  733. package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +8 -5
  734. package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +3 -3
  735. package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +2 -3
  736. package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +2 -3
  737. package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +2 -3
  738. package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +3 -2
  739. package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +2 -3
  740. package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +2 -2
  741. package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +2 -2
  742. package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +3 -2
  743. package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +2 -2
  744. package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +2 -3
  745. package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +7 -4
  746. package/rules/skill-compromise/ATR-2026-00151-fork-impersonation-install.yaml +2 -2
  747. package/rules/skill-compromise/ATR-2026-00157-timebomb-credential-exfil.yaml +2 -3
  748. package/rules/skill-compromise/ATR-2026-00200-agent-memory-config-tampering.yaml +4 -4
  749. package/rules/skill-compromise/ATR-2026-00214-credential-theft.yaml +2 -2
  750. package/rules/skill-compromise/ATR-2026-00217-credential-harvesting.yaml +7 -3
  751. package/rules/skill-compromise/ATR-2026-00220-malware-dropper.yaml +2 -2
  752. package/rules/skill-compromise/ATR-2026-00222-credential-harvesting.yaml +2 -2
  753. package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +2 -2
  754. package/rules/skill-compromise/ATR-2026-00224-credential-exfiltration.yaml +7 -3
  755. package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +2 -2
  756. package/rules/skill-compromise/ATR-2026-00260-package-hallucination.yaml +3 -3
  757. package/rules/skill-compromise/ATR-2026-00262-av-evasion-code-gen.yaml +2 -2
  758. package/rules/skill-compromise/ATR-2026-00263-credential-file-read-gen.yaml +3 -3
  759. package/rules/skill-compromise/ATR-2026-00266-malware-dropper-gen.yaml +2 -2
  760. package/rules/skill-compromise/ATR-2026-00283-malwaregen-generic-virus-payload-request.yaml +2 -2
  761. package/rules/skill-compromise/ATR-2026-00398-huggingface-unsafe-model-artifact-load.yaml +4 -4
  762. package/rules/skill-compromise/ATR-2026-00425-nl-persistent-covert-hook.yaml +7 -4
  763. package/rules/skill-compromise/ATR-2026-00427-nl-fake-error-instruction-bypass.yaml +7 -4
  764. package/rules/skill-compromise/ATR-2026-00429-nl-skill-self-modification.yaml +6 -3
  765. package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +5 -7
  766. package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +2 -2
  767. package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +3 -3
  768. package/rules/skill-compromise/ATR-2026-01755-backdoor-pot-linguistic-trigger-phrase.yaml +3 -3
  769. package/rules/skill-compromise/ATR-2026-01756-backdoor-pot-symbol-emoticon-trigger.yaml +4 -4
  770. package/rules/skill-compromise/ATR-2026-02261-code-credential-exfil-chain.yaml +3 -3
  771. package/rules/skill-compromise/ATR-2026-02405-malicious-skill-package-structure.yaml +276 -0
  772. package/rules/skill-compromise/ATR-2026-02410-malicious-artifact-on-vendor-domain.yaml +273 -0
  773. package/rules/tool-poisoning/ATR-2026-00010-mcp-malicious-response.yaml +12 -10
  774. package/rules/tool-poisoning/ATR-2026-00011-tool-output-injection.yaml +3 -4
  775. package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +9 -6
  776. package/rules/tool-poisoning/ATR-2026-00013-tool-ssrf.yaml +8 -6
  777. package/rules/tool-poisoning/ATR-2026-00095-supply-chain-poisoning.yaml +13 -11
  778. package/rules/tool-poisoning/ATR-2026-00096-registry-poisoning.yaml +20 -18
  779. package/rules/tool-poisoning/ATR-2026-00100-consent-bypass-instruction.yaml +4 -5
  780. package/rules/tool-poisoning/ATR-2026-00101-trust-escalation-override.yaml +4 -5
  781. package/rules/tool-poisoning/ATR-2026-00103-hidden-safety-bypass-instruction.yaml +4 -5
  782. package/rules/tool-poisoning/ATR-2026-00105-silent-action-concealment.yaml +4 -5
  783. package/rules/tool-poisoning/ATR-2026-00106-schema-description-contradiction.yaml +3 -4
  784. package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +11 -8
  785. package/rules/tool-poisoning/ATR-2026-00209-mcpwn-runaway-invocation.yaml +4 -4
  786. package/rules/tool-poisoning/ATR-2026-00210-flowise-system-message-override.yaml +4 -4
  787. package/rules/tool-poisoning/ATR-2026-00259-ansi-escape-injection.yaml +2 -2
  788. package/rules/tool-poisoning/ATR-2026-00270-xss-in-tool-response.yaml +2 -2
  789. package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +3 -3
  790. package/rules/tool-poisoning/ATR-2026-00393-ansi-code-elicitation-request.yaml +4 -4
  791. package/rules/tool-poisoning/ATR-2026-00415-flowise-custom-mcp-stdio-rce.yaml +4 -4
  792. package/rules/tool-poisoning/ATR-2026-00419-cursor-mcp-zero-click-config.yaml +5 -5
  793. package/rules/tool-poisoning/ATR-2026-00434-mcp-remote-authorization-endpoint-command-injection.yaml +4 -4
  794. package/rules/tool-poisoning/ATR-2026-00435-azure-mcp-server-missing-authentication.yaml +4 -4
  795. package/rules/tool-poisoning/ATR-2026-00448-spring-ai-milvus-filter-injection.yaml +4 -4
  796. package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +2 -2
  797. package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +2 -2
  798. package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +2 -2
  799. package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +2 -2
  800. package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +2 -2
  801. package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +3 -3
  802. package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +2 -2
  803. package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +4 -4
  804. package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +4 -4
  805. package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +4 -4
  806. package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +4 -4
  807. package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +5 -5
  808. package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +4 -5
  809. package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +12 -9
  810. package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +9 -7
  811. package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +5 -6
  812. package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +5 -6
  813. package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +5 -6
  814. package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +4 -5
  815. package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +4 -5
  816. package/rules/tool-poisoning/ATR-2026-00561-fastmcp-vulnerable-to-windows-command-in.yaml +2 -2
  817. package/rules/tool-poisoning/ATR-2026-00567-mcp-stdio-config-command-injection.yaml +2 -2
  818. package/rules/tool-poisoning/ATR-2026-00568-agent-ssrf-cloud-metadata-file-inclusion.yaml +2 -2
  819. package/rules/tool-poisoning/ATR-2026-00572-symjack-symlink-config-redirection.yaml +4 -4
  820. package/rules/tool-poisoning/ATR-2026-00575-miasma-npm-worm-agent-config-backdoor.yaml +5 -5
  821. package/rules/tool-poisoning/ATR-2026-00576-hades-agent-credential-theft.yaml +4 -4
  822. package/rules/tool-poisoning/ATR-2026-00577-create-mcp-server-stdio-exec-command-injection.yaml +55 -7
  823. package/rules/tool-poisoning/ATR-2026-00581-mcp-tool-rug-pull-post-approval-redefinition.yaml +5 -6
  824. package/rules/tool-poisoning/ATR-2026-00714-tool-camouflage-forced-tool-call.yaml +8 -3
  825. package/rules/tool-poisoning/ATR-2026-00715-tool-knowledge-hijack-identity-injection.yaml +8 -3
  826. package/rules/tool-poisoning/ATR-2026-00716-ipi-data-destruction-carrier.yaml +3 -3
  827. package/rules/tool-poisoning/ATR-2026-00720-tool-misuse-privilege-escalation-social.yaml +7 -2
  828. package/rules/tool-poisoning/ATR-2026-01300-mcp-notes-param-chat-history-exfil.yaml +6 -6
  829. package/rules/tool-poisoning/ATR-2026-01301-tool-description-exclusive-tool-override.yaml +4 -4
  830. package/rules/tool-poisoning/ATR-2026-01302-fake-tool-result-instruction-injection.yaml +4 -4
  831. package/rules/tool-poisoning/ATR-2026-01303-tool-schema-enumeration-social-engineering.yaml +4 -4
  832. package/rules/tool-poisoning/ATR-2026-01306-mcp-oauth-command-injection.yaml +4 -4
  833. package/rules/tool-poisoning/ATR-2026-01307-mcp-dns-rebinding-attack.yaml +4 -4
  834. package/rules/tool-poisoning/ATR-2026-01310-mcp-tool-description-compliance-history-exfil.yaml +4 -4
  835. package/rules/tool-poisoning/ATR-2026-01775-semantic-mcp-tool-manifest-poisoning.yaml +7 -7
  836. package/rules/tool-poisoning/ATR-2026-01927-mcp-server-kubernetes-kubectl-command-injection.yaml +5 -6
  837. package/rules/tool-poisoning/ATR-2026-01928-framelink-figma-mcp-curl-fallback-command-injection.yaml +4 -5
  838. package/rules/tool-poisoning/ATR-2026-01930-mcp-sampling-prompt-injection.yaml +5 -5
  839. package/rules/tool-poisoning/ATR-2026-01931-gemini-mcp-tool-command-injection-file-exfil.yaml +4 -4
  840. package/rules/tool-poisoning/ATR-2026-01932-shadow-undeclared-mcp-server-registration.yaml +4 -4
  841. package/rules/tool-poisoning/ATR-2026-01935-litellm-custom-code-sandbox-escape-cve-2026-40217.yaml +5 -6
  842. package/rules/tool-poisoning/ATR-2026-01952-praisonai-codemode-sandbox-escape-rce.yaml +3 -4
  843. package/rules/tool-poisoning/ATR-2026-01953-praisonai-codemode-function-ctor-sandbox-escape.yaml +3 -4
  844. package/rules/tool-poisoning/ATR-2026-01959-openhuman-shell-allowlist-env-prefix-bypass.yaml +48 -7
  845. package/rules/tool-poisoning/ATR-2026-01963-praisonai-action-orchestrator-step-target-path-traversal-rce.yaml +3 -4
  846. package/rules/tool-poisoning/ATR-2026-01965-flowise-custommcp-os-command-rce.yaml +3 -4
  847. package/rules/tool-poisoning/ATR-2026-01967-deepchat-mermaid-xss-rce-ipc-mcp-register.yaml +3 -4
  848. package/rules/tool-poisoning/ATR-2026-01968-deepchat-markdown-deeplink-openexternal-rce-bypass.yaml +5 -6
  849. package/rules/tool-poisoning/ATR-2026-01970-praisonai-filetools-normpath-path-traversal.yaml +11 -7
  850. package/rules/tool-poisoning/ATR-2026-01973-anythingllm-logo-endpoint-path-traversal.yaml +3 -4
  851. package/rules/tool-poisoning/ATR-2026-01978-anythingllm-collector-process-filename-path-traversal-delete.yaml +3 -4
  852. package/rules/tool-poisoning/ATR-2026-01979-pandasai-prompt-injection-dunder-sandbox-escape-rce.yaml +3 -4
  853. package/rules/tool-poisoning/ATR-2026-01980-agentic-flow-mcp-tool-param-command-injection.yaml +7 -5
  854. package/rules/tool-poisoning/ATR-2026-01982-dbt-mcp-node-selection-argument-injection.yaml +3 -4
  855. package/rules/tool-poisoning/ATR-2026-01983-mcp-for-stata-log-file-name-command-injection.yaml +3 -4
  856. package/rules/tool-poisoning/ATR-2026-01985-mcp-connect-bridge-unauth-process-spawn-rce.yaml +3 -4
  857. package/rules/tool-poisoning/ATR-2026-01987-langroid-sqlchatagent-prompt-to-sql-rce.yaml +3 -4
  858. package/rules/tool-poisoning/ATR-2026-02021-mcp-inspector-unauthenticated-proxy-rce.yaml +5 -6
  859. package/rules/tool-poisoning/ATR-2026-02022-curxecute-cursor-mcp-json-injected-server-rce.yaml +5 -6
  860. package/rules/tool-poisoning/ATR-2026-02023-escaperoute-filesystem-mcp-prefix-bypass.yaml +5 -6
  861. package/rules/tool-poisoning/ATR-2026-02024-escaperoute-filesystem-mcp-symlink-launchagent.yaml +5 -6
  862. package/rules/tool-poisoning/ATR-2026-02025-mcp-full-schema-poisoning-nondescription-field.yaml +7 -8
  863. package/rules/tool-poisoning/ATR-2026-02027-diagnostic-content-remediation-command-injection.yaml +2 -3
  864. package/rules/tool-poisoning/ATR-2026-02041-shell-injection-echo-marker-poc.yaml +2 -3
  865. package/rules/tool-poisoning/ATR-2026-02102-html-injection-tool-arg-approval-ui-xss.yaml +2 -3
  866. package/rules/tool-poisoning/ATR-2026-02141-mcp-server-config-command-execution.yaml +2 -3
  867. package/rules/tool-poisoning/ATR-2026-02145-python-sandbox-escape-generator-frame-introspection.yaml +2 -3
  868. package/rules/tool-poisoning/ATR-2026-02193-ssrf-ipv6-noncanonical-loopback-bypass.yaml +2 -3
  869. package/rules/tool-poisoning/ATR-2026-02194-go-init-func-process-exec-codegen-rce.yaml +2 -3
  870. package/rules/tool-poisoning/ATR-2026-02233-unscoped-destructive-db-request-nl.yaml +2 -3
  871. package/rules/tool-poisoning/ATR-2026-02260-agentjacking-remediation-framed-execution.yaml +6 -6
  872. package/rules/tool-poisoning/ATR-2026-02263-workflow-sql-template-expression-injection.yaml +2 -2
  873. package/rules/tool-poisoning/ATR-2026-02350-mcp-json-rpc-case-duplicate-key-tool-smuggling.yaml +2 -3
  874. package/rules/tool-poisoning/ATR-2026-02352-imap-search-command-injection-email-tool-args.yaml +2 -3
  875. package/rules/tool-poisoning/ATR-2026-02372-unsigned-task-feed-npm-npx-lifecycle-rce.yaml +4 -5
  876. package/rules/tool-poisoning/ATR-2026-02376-tool-description-conversational-trigger-history-exfil.yaml +4 -5
  877. package/rules/tool-poisoning/ATR-2026-02403-mcp-external-content-missing-spotlighting.yaml +356 -0
  878. package/spec/README.md +24 -16
  879. package/spec/atr-correlation-v1.0.md +2 -2
  880. package/spec/atr-event-v1.0.md +3 -3
  881. package/spec/atr-language-detection-v1.0.md +1 -1
  882. package/spec/atr-method-v1.1.md +2 -0
  883. package/spec/atr-observation-v1.0.md +323 -0
  884. package/spec/atr-profile-v1.0.md +4 -4
  885. package/spec/atr-schema.yaml +5 -3
  886. package/spec/category-registry/v1.0.yaml +2 -2
  887. package/spec/compliance-metadata.md +3 -2
  888. package/spec/conformance/README.md +4 -4
  889. package/spec/conformance/SIGNING.md +1 -1
  890. package/spec/conformance/baseline/manifest.json +1 -1
  891. package/spec/mappings/atr-to-nist-csf-2.0.md +3 -3
  892. package/spec/schema/correlation.schema.json +1 -1
  893. package/spec/schema/event.schema.json +1 -1
  894. package/spec/schema/observation.schema.json +131 -0
  895. package/spec/schema/profile.schema.json +1 -1
  896. package/spec/schema/rule.schema.json +1 -1
@@ -0,0 +1,592 @@
1
+ /**
2
+ * Placeholder tool name — deliberately NOT the sample text.
3
+ *
4
+ * The corpus is a corpus of documents; it contains no tool names. In production
5
+ * `tool_name` holds a short identifier ("Bash", "mcp__github__create_issue"),
6
+ * and the rules that key on it match short verbs — `(?i)(exec|execute|shell|
7
+ * bash|cmd|eval)`, `(?i)(delete|remove|drop|truncate)`, `(?i)(pay|payment|
8
+ * transfer)`. Pouring a whole SKILL.md into that field would match nearly every
9
+ * document and report a flood of false positives that cannot occur in
10
+ * production, which is worse than not measuring: fabricated FPs push a
11
+ * maintainer to weaken a rule that is correct.
12
+ *
13
+ * So tool_name is pinned to a constant. Conditions on it are therefore NOT
14
+ * measured, and that is reported explicitly (see UNMEASURABLE_FIELDS) instead of
15
+ * being passed off as clean. Frozen at the legacy value so the historical shape
16
+ * is reproduced byte for byte and old FP counts stay comparable.
17
+ */
18
+ export const CORPUS_TOOL_NAME = "corpus-sample";
19
+ /**
20
+ * Every field name a sample's text is actually poured into by some shape.
21
+ * A condition on any of these IS measured. Kept in sync with the shapes below
22
+ * by tests/corpus-event-shapes.test.ts, which proves reachability through the
23
+ * real engine rather than trusting this list.
24
+ */
25
+ export const MEASURED_FIELDS = Object.freeze([
26
+ "content",
27
+ "user_input",
28
+ "agent_output",
29
+ "agent_message",
30
+ "tool_response",
31
+ "tool_args",
32
+ "tool_input",
33
+ "tool_description",
34
+ ]);
35
+ /**
36
+ * Field names the engine can resolve but that a TEXT corpus cannot honestly
37
+ * fill, with the reason. A rule whose conditions live here is UNMEASURED by
38
+ * this harness — callers must say so out loud rather than report it clean.
39
+ */
40
+ export const UNMEASURABLE_FIELDS = Object.freeze(new Map([
41
+ [
42
+ "tool_name",
43
+ "production tool_name is a short identifier, not a document; pouring corpus " +
44
+ "text in would fabricate FPs on rules that are correct in production",
45
+ ],
46
+ [
47
+ "metric",
48
+ "behavioral metric is a number over a time window, not text; the sync " +
49
+ "evaluate() path cannot maintain the window at all",
50
+ ],
51
+ ]));
52
+ /** A trace-method rule needs event.trace (a span DAG), which text cannot supply. */
53
+ export const TRACE_FIELD_PREFIX = "trace.";
54
+ /** A behavioral condition needs a numeric metric window, which text cannot supply. */
55
+ export const BEHAVIORAL_FIELD_PREFIX = "behavioral.";
56
+ /** True when a condition field can be measured with a text corpus. */
57
+ export function isMeasurableField(field) {
58
+ if (field.startsWith(TRACE_FIELD_PREFIX))
59
+ return false;
60
+ if (field.startsWith(BEHAVIORAL_FIELD_PREFIX))
61
+ return false;
62
+ return MEASURED_FIELDS.includes(field);
63
+ }
64
+ /** Why a field cannot be measured — a sentence, or null when it can be. */
65
+ export function unmeasurableReason(field) {
66
+ if (isMeasurableField(field))
67
+ return null;
68
+ if (field.startsWith(TRACE_FIELD_PREFIX)) {
69
+ return "trace-method rule: needs an event.trace span DAG, which a text corpus cannot supply";
70
+ }
71
+ if (field.startsWith(BEHAVIORAL_FIELD_PREFIX)) {
72
+ return "behavioral condition: needs a numeric metric window, which a text corpus cannot supply";
73
+ }
74
+ return (UNMEASURABLE_FIELDS.get(field) ??
75
+ "unknown field name — the engine resolves it from event.metadata, which this " +
76
+ "harness does not populate; no shape carries the sample into it");
77
+ }
78
+ const now = () => new Date().toISOString();
79
+ /**
80
+ * Shape 1 — WIDE, RAW. type `mcp_exchange` so the engine applies NO source-type
81
+ * filtering (EVENT_TYPE_TO_SOURCE has no mcp_exchange entry), which means every
82
+ * rule is evaluated regardless of its declared agent_source.type. Every
83
+ * content-bearing field carries the raw sample.
84
+ *
85
+ * This is a strict superset of the legacy harness shape (same type, same
86
+ * tool_name, same tool_input/tool_response/user_input), so no FP that the old
87
+ * shape counted can disappear — the change can only reveal, never hide.
88
+ */
89
+ function wideRaw(text) {
90
+ return Object.freeze({
91
+ type: "mcp_exchange",
92
+ timestamp: now(),
93
+ content: text,
94
+ fields: Object.freeze({
95
+ tool_name: CORPUS_TOOL_NAME,
96
+ tool_input: text,
97
+ tool_response: text,
98
+ user_input: text,
99
+ agent_output: text,
100
+ agent_message: text,
101
+ tool_description: text,
102
+ tool_args: text,
103
+ content: text,
104
+ }),
105
+ });
106
+ }
107
+ /**
108
+ * Shape 2 — PreToolUse where the payload IS a string tool argument
109
+ * (`Write`, `Edit`, ...). src/hook-handler.ts:52-61 verbatim: `content` stays
110
+ * raw because toolInput.content is a string, while `tool_args` is the
111
+ * JSON-ENCODED whole argument object. This is the shape that exposes patterns
112
+ * which only match escaped text.
113
+ */
114
+ function preToolJsonArg(text) {
115
+ const toolInput = { content: text };
116
+ return Object.freeze({
117
+ type: "tool_call",
118
+ timestamp: now(),
119
+ content: toolInput.content,
120
+ fields: Object.freeze({
121
+ tool_name: CORPUS_TOOL_NAME,
122
+ tool_args: JSON.stringify(toolInput),
123
+ content: toolInput.content,
124
+ }),
125
+ });
126
+ }
127
+ /**
128
+ * Shape 3 — PreToolUse where the payload is NOT under a `content` key
129
+ * (`Bash` and most MCP tools). src/hook-handler.ts:53-55 then falls back to
130
+ * JSON.stringify for `content` too, so BOTH content and tool_args are encoded.
131
+ */
132
+ function preToolJsonBoth(text) {
133
+ const toolInput = { command: text };
134
+ const encoded = JSON.stringify(toolInput);
135
+ return Object.freeze({
136
+ type: "tool_call",
137
+ timestamp: now(),
138
+ content: encoded,
139
+ fields: Object.freeze({
140
+ tool_name: CORPUS_TOOL_NAME,
141
+ tool_args: encoded,
142
+ content: encoded,
143
+ }),
144
+ });
145
+ }
146
+ /**
147
+ * Shape 4 — PostToolUse. src/hook-handler.ts:64-69: the tool has already run,
148
+ * its output lands in tool_response, and tool_args is still the JSON-encoded
149
+ * argument object.
150
+ *
151
+ * This shape is NOT redundant with shapes 2-3, and the reason is the engine's
152
+ * source-type filter. A `tool_call` event only evaluates rules whose
153
+ * agent_source.type is tool_call or mcp_exchange. A `tool_response` event maps
154
+ * to source mcp_exchange AND additionally admits llm_io rules (the engine's
155
+ * indirect-prompt-injection route: poisoned tool output is the channel those
156
+ * rules exist for). Four rules declare `field: tool_args` with
157
+ * `agent_source.type: llm_io`; without this shape the JSON-encoded encoding of
158
+ * tool_args would never be measured for them.
159
+ */
160
+ function postToolJson(text) {
161
+ const toolInput = { output: text };
162
+ const encoded = JSON.stringify(toolInput);
163
+ return Object.freeze({
164
+ type: "tool_response",
165
+ timestamp: now(),
166
+ content: encoded,
167
+ fields: Object.freeze({
168
+ tool_name: CORPUS_TOOL_NAME,
169
+ tool_args: encoded,
170
+ tool_response: text,
171
+ content: encoded,
172
+ }),
173
+ });
174
+ }
175
+ /**
176
+ * The canonical shape set. Callers must ALSO run engine.scanSkill(text) — the
177
+ * SKILL.md path is a separate engine entry point, not an event shape.
178
+ *
179
+ * Two axes have to be covered, and missing either one hides false positives:
180
+ * - ENCODING: raw (shape 1) vs JSON-encoded (shapes 2-4), because a pattern
181
+ * can match one and not the other.
182
+ * - RULE ADMISSION: the engine filters rules by agent_source.type against the
183
+ * event type. mcp_exchange (shape 1) is filtered against nothing, so every
184
+ * rule runs; tool_call (2-3) admits tool_call + mcp_exchange rules;
185
+ * tool_response (4) admits mcp_exchange + llm_io rules.
186
+ *
187
+ * Deliberately omitted: `llm_input` / `llm_output` / `multi_agent_message`
188
+ * events. Shape 1 already carries user_input / agent_output / agent_message
189
+ * explicitly and is admitted for every rule, so those types can only narrow.
190
+ */
191
+ export function corpusShapes(text) {
192
+ return Object.freeze([
193
+ Object.freeze({ name: "wide-raw", event: wideRaw(text) }),
194
+ Object.freeze({ name: "pre-tool-json-arg", event: preToolJsonArg(text) }),
195
+ Object.freeze({ name: "pre-tool-json-both", event: preToolJsonBoth(text) }),
196
+ Object.freeze({ name: "post-tool-json", event: postToolJson(text) }),
197
+ ]);
198
+ }
199
+ /** Human-readable list of the shapes, for harness banners. */
200
+ export function shapeNames() {
201
+ return corpusShapes("").map((s) => s.name);
202
+ }
203
+ // ---------------------------------------------------------------------------
204
+ // A raw PROMPT corpus is not a document corpus
205
+ // ---------------------------------------------------------------------------
206
+ /**
207
+ * The two channels a raw adversarial PROMPT (garak, PINT, academic jailbreak
208
+ * corpora) can actually arrive through in production, as built by
209
+ * src/hook-handler.ts:
210
+ *
211
+ * - `llm_input` — the human typed it. Maps to source `llm_io`, so only
212
+ * llm_io rules are admitted.
213
+ * - `tool_response` — a tool / MCP / RAG result carried it in (indirect
214
+ * injection). Maps to source `mcp_exchange`, and the
215
+ * engine additionally admits llm_io rules on it.
216
+ *
217
+ * WHY THIS IS SEPARATE FROM `corpusShapes()`
218
+ *
219
+ * `corpusShapes()` exists for a DOCUMENT corpus measured for false positives,
220
+ * and it is deliberately as wide as the engine allows — including
221
+ * `engine.scanSkill()`, the SKILL.md entry point. Scoring a garak jailbreak
222
+ * prompt through scanSkill() credits detections on a channel that prompt never
223
+ * travels, which inflates recall on a corpus that can never pay a false
224
+ * positive back (garak is 100% adversarial, so precision is 1 by construction
225
+ * and nothing charges the wide shape for its FPs).
226
+ *
227
+ * So: FP measurement uses the widest honest shape set; a pure-recall prompt
228
+ * corpus uses the production channels. Both live in this module so no harness
229
+ * hand-rolls a third one — the mistake this file was written to end.
230
+ *
231
+ * WHAT THIS REPLACED
232
+ *
233
+ * Four eval scripts built `{ type: 'llm_io', ... }`. `llm_io` is a rule
234
+ * SOURCE, not an `AgentEventType` (see src/types.ts). `EVENT_TYPE_TO_SOURCE`
235
+ * has no entry for it, so `eventSourceType` came out `undefined` and
236
+ * src/engine.ts skipped source-type filtering entirely — every rule of every
237
+ * source ran against an event that carried only `user_input`. That is not the
238
+ * narrow llm_input channel those scripts documented themselves as measuring.
239
+ * `tsc` would have caught it on the first run; tsconfig.json never included
240
+ * `scripts/`.
241
+ */
242
+ export function promptChannelShapes(text) {
243
+ const ts = now();
244
+ return Object.freeze([
245
+ Object.freeze({
246
+ name: "llm-input",
247
+ event: Object.freeze({
248
+ type: "llm_input",
249
+ timestamp: ts,
250
+ content: text,
251
+ fields: Object.freeze({ user_input: text }),
252
+ }),
253
+ }),
254
+ Object.freeze({
255
+ name: "tool-response",
256
+ event: Object.freeze({
257
+ type: "tool_response",
258
+ timestamp: ts,
259
+ content: text,
260
+ fields: Object.freeze({ tool_response: text }),
261
+ }),
262
+ }),
263
+ ]);
264
+ }
265
+ /**
266
+ * True when `text` trips at least one rule on either production prompt channel.
267
+ * The one way a prompt-corpus harness decides "detected".
268
+ */
269
+ export function detectedOnPromptChannels(engine, text) {
270
+ for (const shape of promptChannelShapes(text)) {
271
+ if (engine.evaluate(shape.event).length > 0)
272
+ return true;
273
+ }
274
+ return false;
275
+ }
276
+ // ---------------------------------------------------------------------------
277
+ // The one way a harness turns a sample into matched rule ids
278
+ // ---------------------------------------------------------------------------
279
+ /**
280
+ * The same event, re-typed so the engine's source-type filter admits every rule.
281
+ *
282
+ * src/engine.ts maps an event type to an ATR source type (EVENT_TYPE_TO_SOURCE)
283
+ * and then skips every rule whose `agent_source.type` differs. `mcp_exchange`
284
+ * has NO entry in that map, so an mcp_exchange event is filtered against
285
+ * nothing — that is precisely why shape 1 above uses it.
286
+ *
287
+ * This helper isolates that single effect for a caller that already holds an
288
+ * event and wants to know how much of a measurement gap is rule ADMISSION as
289
+ * opposed to field POURING. It changes nothing else: same content, same fields,
290
+ * so a rule that newly fires here fires on the caller's own presentation of the
291
+ * sample, not on a fabricated one.
292
+ *
293
+ * Use it ALONGSIDE the original event, never instead of it. Re-typing drops the
294
+ * type-specific aliases in resolveField (an llm_input event resolves
295
+ * `user_input` from event.content; an mcp_exchange event does not), so the pair
296
+ * {original, sourceAgnostic(original)} is a strict superset of the original and
297
+ * the widening can only reveal matches, never hide them.
298
+ */
299
+ export function sourceAgnosticEvent(event) {
300
+ return Object.freeze({ ...event, type: "mcp_exchange" });
301
+ }
302
+ /**
303
+ * Every rule id a sample matches: the canonical shape set PLUS scanSkill().
304
+ *
305
+ * Both halves are mandatory. scanSkill() is a separate engine entry point (the
306
+ * `pga scan` path), not an event shape, and rules with `scan_target: skill`
307
+ * reach production through it alone — a harness that only calls evaluate() would
308
+ * score them clean without reading them.
309
+ *
310
+ * The converse is equally true and much less obvious: the scanSkill() half is a
311
+ * no-op for most of the corpus. Its compound gate is unreachable for every
312
+ * `condition: any` rule that is not `scan_target: skill|both`, so counting it
313
+ * among the shapes does NOT mean a rule was measured on it. Ask
314
+ * skillPathCoverage() which ones the skill path never asked about, and say so.
315
+ *
316
+ * Counted PER SAMPLE, not per shape: a document that trips a rule on three
317
+ * shapes is one false positive, not three. Every harness that measures FP, TP or
318
+ * coverage must go through this function, so a rule can never earn its detection
319
+ * credit on a wider presentation than the one it pays its false positives on.
320
+ */
321
+ export function matchedRuleIds(engine, text) {
322
+ const matched = new Set();
323
+ for (const shape of corpusShapes(text)) {
324
+ for (const m of engine.evaluate(shape.event))
325
+ matched.add(m.rule.id);
326
+ }
327
+ for (const m of engine.scanSkill(text))
328
+ matched.add(m.rule.id);
329
+ return matched;
330
+ }
331
+ /** Every field name a rule's conditions declare, in declaration order. */
332
+ export function conditionFields(rule) {
333
+ const conds = rule.detection?.conditions;
334
+ const list = Array.isArray(conds)
335
+ ? conds
336
+ : conds !== null && typeof conds === "object"
337
+ ? Object.values(conds)
338
+ : [];
339
+ const out = [];
340
+ for (const c of list) {
341
+ if (c === null || typeof c !== "object")
342
+ continue;
343
+ const field = c.field;
344
+ if (typeof field === "string" && !out.includes(field))
345
+ out.push(field);
346
+ }
347
+ return out;
348
+ }
349
+ /** Rules whose conditions this harness cannot fully measure. Clean rules omitted. */
350
+ export function fieldCoverage(rules) {
351
+ const out = [];
352
+ for (const rule of rules) {
353
+ const fields = conditionFields(rule);
354
+ const unmeasured = fields.filter((f) => !isMeasurableField(f));
355
+ const method = rule.detection?.method;
356
+ const methodBlind = method === "trace" || method === "behavioral" || method === "signature";
357
+ if (unmeasured.length === 0 && !methodBlind)
358
+ continue;
359
+ const expr = (rule.detection?.condition ?? "any").toLowerCase();
360
+ const anyOf = expr === "any" || expr === "or";
361
+ const measurable = fields.length - unmeasured.length;
362
+ out.push(Object.freeze({
363
+ ruleId: rule.id,
364
+ unmeasured: Object.freeze(unmeasured),
365
+ zeroMeasurement: methodBlind || measurable === 0 || (!anyOf && unmeasured.length > 0),
366
+ }));
367
+ }
368
+ return Object.freeze(out);
369
+ }
370
+ // ---------------------------------------------------------------------------
371
+ // Coverage, second axis: a rule the engine refuses to run at all
372
+ // ---------------------------------------------------------------------------
373
+ /**
374
+ * Statuses src/engine.ts drops BEFORE the lane gate, on both evaluation paths:
375
+ *
376
+ * if (rule.status === 'deprecated' || rule.status === 'draft') continue;
377
+ * if (!this.passesLane(rule)) continue;
378
+ *
379
+ * The order is the whole problem. `maturity` decides the lane; `status` decides
380
+ * whether the rule exists at all. A rule can therefore carry `maturity: stable`
381
+ * — the enforce lane, auto-block, no human in the loop — while `status: draft`
382
+ * keeps the engine from ever evaluating it. Seven rules on main are in exactly
383
+ * that state today.
384
+ *
385
+ * For an FP harness the consequence is the same disease fieldCoverage exists to
386
+ * name: the rule cannot fire, so it cannot be counted as a false positive, so
387
+ * the gate reports it CLEAN. Nothing in a field-based coverage check can see it,
388
+ * because every field the rule declares is perfectly measurable — the sample
389
+ * simply never reaches the rule.
390
+ *
391
+ * Kept honest by tests/corpus-event-shapes.test.ts, which parses the status
392
+ * comparisons out of src/engine.ts rather than trusting this list.
393
+ */
394
+ export const INERT_STATUSES = Object.freeze(new Set(["draft", "deprecated"]));
395
+ /** Rule maturities that put a rule in the enforce (auto-block) lane. */
396
+ export const ENFORCE_LANE_MATURITIES = Object.freeze(new Set(["stable", "production"]));
397
+ /** True when the engine skips this status outright, in every lane. */
398
+ export function isInertStatus(status) {
399
+ return status !== undefined && INERT_STATUSES.has(status.trim().toLowerCase());
400
+ }
401
+ /** Why a status makes a rule unmeasurable — a sentence, or null when it does not. */
402
+ export function inertStatusReason(status) {
403
+ if (!isInertStatus(status))
404
+ return null;
405
+ const s = String(status).trim().toLowerCase();
406
+ return (`status: ${s} — src/engine.ts skips this status on both evaluation paths, ` +
407
+ `before the lane gate, so the rule cannot fire on any sample. Its 0 FP is ` +
408
+ `the absence of a measurement, not the presence of precision.`);
409
+ }
410
+ /**
411
+ * Rules the engine will not evaluate at all. Measurable rules are omitted.
412
+ *
413
+ * Unlike an unmeasurABLE field (no benign corpus can supply a tool_name; a text
414
+ * corpus has no span DAG), this one has a remedy that is always available and is
415
+ * one line long: flip the status, or drop the maturity out of the enforce lane.
416
+ * That difference is why callers are expected to FAIL on this rather than merely
417
+ * print it — see the exit-code note in scripts/gate-promotion-fp.ts.
418
+ */
419
+ export function statusCoverage(rules) {
420
+ const out = [];
421
+ for (const rule of rules) {
422
+ if (!isInertStatus(rule.status))
423
+ continue;
424
+ const status = String(rule.status).trim().toLowerCase();
425
+ const maturity = typeof rule.maturity === "string" ? rule.maturity.trim().toLowerCase() : null;
426
+ out.push(Object.freeze({
427
+ ruleId: rule.id,
428
+ status,
429
+ maturity,
430
+ claimsEnforceLane: maturity !== null && ENFORCE_LANE_MATURITIES.has(maturity),
431
+ reason: inertStatusReason(status) ?? "",
432
+ }));
433
+ }
434
+ return Object.freeze(out);
435
+ }
436
+ // ---------------------------------------------------------------------------
437
+ // Coverage, third axis: the SKILL.md path evaluates almost no rules
438
+ // ---------------------------------------------------------------------------
439
+ /**
440
+ * matchedRuleIds() runs four evaluate() shapes AND engine.scanSkill(), and the
441
+ * gate prints `shapes = wide-raw, ..., skill`. That banner reads as "every rule
442
+ * you are gating was offered to the skill path". For 645 of the 780 rules on
443
+ * main that is false, and not by a little: they cannot produce a match on that
444
+ * path for ANY input whatsoever.
445
+ *
446
+ * THE MECHANISM (src/engine.ts, evaluateRaw / evaluateAsync)
447
+ *
448
+ * scanSkill() builds an event with `scanContext: 'skill'`. In that context the
449
+ * engine skips source-type filtering — every rule is evaluated — and then
450
+ * applies a compound gate to any rule NOT declared for skill scanning:
451
+ *
452
+ * if (isSkillContext && rule.tags.scan_target !== 'skill'
453
+ * && rule.tags.scan_target !== 'both') {
454
+ * const totalConds = Number(rule.detection?.conditions?.length ?? 1);
455
+ * const minRequired = Math.max(2, Math.ceil(totalConds * 0.3));
456
+ * if ((matchResult.matchedConditions?.length ?? 0) < minRequired) continue;
457
+ * }
458
+ *
459
+ * The comment above it describes a graded threshold ("30%+ of conditions").
460
+ * `matchedConditions` is produced by evaluateArrayConditions, which for
461
+ * `condition: any` SHORT-CIRCUITS:
462
+ *
463
+ * if (result) { matchedConditionIndices.push(i); if (isAny) break; }
464
+ *
465
+ * So for an any-mode rule `matchedConditions.length` is 1 whenever the rule
466
+ * matches at all, and 0 otherwise. It is never 2. `minRequired` is never below
467
+ * 2. 776 of the 780 rules on main declare `condition: any`. The threshold is
468
+ * therefore not a threshold — it is an unconditional reject, and the effective
469
+ * policy of the SKILL.md path is "only `scan_target: skill|both` rules run".
470
+ *
471
+ * That policy is defensible and it is load-bearing (measured 2026-08-05: making
472
+ * the threshold reachable takes the 466-sample benign skill corpus from 1 flagged
473
+ * sample to 265, while malicious recall stays 32/32 — the cost is real and the
474
+ * benefit is unmeasurable on that corpus). What is NOT defensible is the gate
475
+ * reporting a `skill` shape it never charged those rules on. This axis exists so
476
+ * the gate says which rules the skill shape did not ask about, exactly as
477
+ * fieldCoverage does for fields and statusCoverage does for inert rules.
478
+ *
479
+ * Like fieldCoverage — and unlike statusCoverage — this must NOT change an exit
480
+ * code. An `scan_target: mcp` rule being unreachable on the SKILL.md path is the
481
+ * intended behaviour, not a defect with a one-line remedy; failing on it would
482
+ * block every promotion with nothing to fix.
483
+ */
484
+ export const SKILL_NATIVE_SCAN_TARGETS = Object.freeze(new Set(["skill", "both"]));
485
+ function normalise(v) {
486
+ return typeof v === "string" && v.trim() !== "" ? v.trim().toLowerCase() : null;
487
+ }
488
+ /**
489
+ * The compound gate's own arithmetic, mirrored: `Number(conditions?.length ?? 1)`
490
+ * — a named-map `conditions` has no `.length`, so it counts as 1 and the floor of
491
+ * 2 applies.
492
+ */
493
+ function requiredConditions(conditions) {
494
+ const total = Number(Array.isArray(conditions) ? conditions.length : 1);
495
+ return Math.max(2, Math.ceil(total * 0.3));
496
+ }
497
+ /**
498
+ * The largest `matchedConditions.length` the engine can ever produce for this
499
+ * rule, given how each condition form accumulates matches:
500
+ * - array + any/or -> 1 (evaluateArrayConditions breaks on the first match)
501
+ * - array + all -> N (a match requires every condition, so it is N or nothing)
502
+ * - named map -> number of names (evaluateNamedConditions does not break)
503
+ */
504
+ function maxAttainableConditions(rule) {
505
+ const conds = rule.detection?.conditions;
506
+ const expr = normalise(rule.detection?.condition) ?? "any";
507
+ if (Array.isArray(conds)) {
508
+ if (conds.length === 0)
509
+ return 0;
510
+ return expr === "any" || expr === "or" ? 1 : conds.length;
511
+ }
512
+ if (conds !== null && typeof conds === "object")
513
+ return Object.keys(conds).length;
514
+ return 0;
515
+ }
516
+ /**
517
+ * Why this rule can never match on the SKILL.md path — or null when it can.
518
+ *
519
+ * Inert (draft/deprecated) rules return null on purpose: they cannot fire on ANY
520
+ * path, which is statusCoverage's finding, and reporting them twice would blur
521
+ * "the skill path did not ask" into "the engine never loaded it".
522
+ */
523
+ export function skillPathBlocker(rule) {
524
+ if (isInertStatus(rule.status))
525
+ return null;
526
+ const scanTarget = normalise(rule.tags?.scan_target);
527
+ const maturity = normalise(rule.maturity);
528
+ const method = normalise(rule.detection?.method) ?? "pattern";
529
+ const required = requiredConditions(rule.detection?.conditions);
530
+ const attainable = maxAttainableConditions(rule);
531
+ const gap = (blocker, reason) => Object.freeze({
532
+ ruleId: rule.id,
533
+ blocker,
534
+ scanTarget,
535
+ maturity,
536
+ claimsEnforceLane: maturity !== null && ENFORCE_LANE_MATURITIES.has(maturity),
537
+ maxAttainableConditions: attainable,
538
+ requiredConditions: required,
539
+ reason,
540
+ });
541
+ // Method dispatch happens before the compound gate and is independent of
542
+ // scan_target: scanSkill() passes an event with no trace, no session window
543
+ // and `fields: {}`, so these methods return null for every input.
544
+ if (method === "trace") {
545
+ return gap("method-trace", "method: trace — scanSkill() builds an event with no `trace`, and " +
546
+ "evaluateRule returns null when event.trace is undefined");
547
+ }
548
+ if (method === "behavioral") {
549
+ return gap("method-behavioral", "method: behavioral — the synchronous evaluateRule returns null " +
550
+ "unconditionally; a metric window needs a streaming path");
551
+ }
552
+ if (method === "signature") {
553
+ return gap("method-signature", "method: signature — indicators are compared against event.fields, and " +
554
+ "scanSkill() sets `fields: {}`, so no indicator can ever resolve");
555
+ }
556
+ if (method === "semantic" && normalise(rule.detection?.semantic?.fallback_method) !== "pattern") {
557
+ return gap("method-semantic-no-pattern-fallback", "method: semantic without fallback_method: pattern — the synchronous " +
558
+ "scanSkill() path has no judge and returns null");
559
+ }
560
+ // scan_target skill/both is exempt from the compound gate entirely.
561
+ if (scanTarget !== null && SKILL_NATIVE_SCAN_TARGETS.has(scanTarget))
562
+ return null;
563
+ if (attainable === 0) {
564
+ return gap("no-conditions", "the rule declares no conditions the engine can match");
565
+ }
566
+ if (attainable < required) {
567
+ return gap("compound-gate-unreachable", `scan_target: ${scanTarget ?? "(none)"} is not skill/both, so the skill compound ` +
568
+ `gate demands ${required} matched conditions, but this rule can never report more ` +
569
+ `than ${attainable}` +
570
+ (attainable === 1 && Array.isArray(rule.detection?.conditions)
571
+ ? ' — evaluateArrayConditions breaks on the first match for condition: "any"'
572
+ : ""));
573
+ }
574
+ return null;
575
+ }
576
+ /**
577
+ * Rules engine.scanSkill() can never match. Reachable rules are omitted.
578
+ *
579
+ * The skill path is a genuine production entry point (`pga scan`), and it is one
580
+ * of the two halves of matchedRuleIds(). A caller that prints "skill" among its
581
+ * shapes owes the reader this list.
582
+ */
583
+ export function skillPathCoverage(rules) {
584
+ const out = [];
585
+ for (const rule of rules) {
586
+ const gap = skillPathBlocker(rule);
587
+ if (gap !== null)
588
+ out.push(gap);
589
+ }
590
+ return Object.freeze(out);
591
+ }
592
+ //# sourceMappingURL=corpus-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corpus-event.js","sourceRoot":"","sources":["../src/corpus-event.ts"],"names":[],"mappings":"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"}