agent-threat-rules 2.2.1 → 3.1.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.
- package/README.md +365 -327
- package/dist/cli/scan-handler.d.ts +6 -0
- package/dist/cli/scan-handler.d.ts.map +1 -1
- package/dist/cli/scan-handler.js +27 -4
- package/dist/cli/scan-handler.js.map +1 -1
- package/dist/cli/semantic-judge-config.d.ts +7 -0
- package/dist/cli/semantic-judge-config.d.ts.map +1 -0
- package/dist/cli/semantic-judge-config.js +44 -0
- package/dist/cli/semantic-judge-config.js.map +1 -0
- package/dist/cli.js +183 -1
- package/dist/cli.js.map +1 -1
- package/dist/engine.d.ts +66 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +420 -3
- package/dist/engine.js.map +1 -1
- package/dist/eval/eval-harness.d.ts.map +1 -1
- package/dist/eval/eval-harness.js +9 -0
- package/dist/eval/eval-harness.js.map +1 -1
- package/dist/eval/run-hackaprompt-benchmark.js +9 -0
- package/dist/eval/run-hackaprompt-benchmark.js.map +1 -1
- package/dist/eval/run-pint-benchmark.js +9 -0
- package/dist/eval/run-pint-benchmark.js.map +1 -1
- package/dist/eval/skill-benchmark.d.ts +11 -0
- package/dist/eval/skill-benchmark.d.ts.map +1 -1
- package/dist/eval/skill-benchmark.js +57 -0
- package/dist/eval/skill-benchmark.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/judges/openai-compatible.d.ts +33 -0
- package/dist/judges/openai-compatible.d.ts.map +1 -0
- package/dist/judges/openai-compatible.js +145 -0
- package/dist/judges/openai-compatible.js.map +1 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +6 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/measurement/from-eval-harness.d.ts +70 -0
- package/dist/measurement/from-eval-harness.d.ts.map +1 -0
- package/dist/measurement/from-eval-harness.js +49 -0
- package/dist/measurement/from-eval-harness.js.map +1 -0
- package/dist/measurement/schema.d.ts +152 -0
- package/dist/measurement/schema.d.ts.map +1 -0
- package/dist/measurement/schema.js +178 -0
- package/dist/measurement/schema.js.map +1 -0
- package/dist/measurement/write.d.ts +64 -0
- package/dist/measurement/write.d.ts.map +1 -0
- package/dist/measurement/write.js +163 -0
- package/dist/measurement/write.js.map +1 -0
- package/dist/rule-scaffolder.d.ts +26 -0
- package/dist/rule-scaffolder.d.ts.map +1 -1
- package/dist/rule-scaffolder.js +221 -6
- package/dist/rule-scaffolder.js.map +1 -1
- package/dist/semantic-evaluator.d.ts +54 -0
- package/dist/semantic-evaluator.d.ts.map +1 -0
- package/dist/semantic-evaluator.js +131 -0
- package/dist/semantic-evaluator.js.map +1 -0
- package/dist/trace-evaluator.d.ts +22 -0
- package/dist/trace-evaluator.d.ts.map +1 -0
- package/dist/trace-evaluator.js +249 -0
- package/dist/trace-evaluator.js.map +1 -0
- package/dist/types.d.ts +152 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
- package/rules/agent-manipulation/ATR-2026-00032-goal-hijacking.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00074-cross-agent-privilege-escalation.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00076-inter-agent-message-spoofing.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00077-human-trust-exploitation.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00108-consensus-sybil-attack.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00164-skill-scope-hijack.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00268-tense-framing-bypass.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00269-fitd-escalation.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00271-grandma-roleplay-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00273-dan-developer-mode-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00287-threaten-json-coercive-output-threat.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00288-false-premise-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00302-anti-dan-inverted-filter-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00303-devmode-ranti-profanity-coercion.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00304-chatgpt-image-unlocker-markdown-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00305-dan-mode-ablation-benchmark-coercion.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00306-autodan-genetic-jailbreak-suffix.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00307-inthewild-jailbreak-corpus-signature.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00314-amoral-unfiltered-custom-persona-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00317-free-of-restrictions-named-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00318-moralizing-rant-then-unfiltered-bypass.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00319-developer-mode-dual-response-format.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00320-opposite-day-boolean-opposite-machine.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00322-fictional-world-format-override-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00323-dual-persona-simulation-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00324-neurosemantical-inversitis-disease-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00325-bob-hypothetical-unrestricted-chatbot.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00326-fake-developer-authority-chatdan-override.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00327-ai-ethics-law-bypass-declaration.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00329-no-withhold-factual-resource-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00331-terminal-cli-harmful-function-simulator.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00332-hacker-chan-culture-offensive-ai-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00333-disease-animal-dual-ai-chatbot.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00334-two-entity-token-splitting-game.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00335-key-value-template-persona-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00336-brm-false-information-machine-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00337-obfuscated-system-announcement-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00338-persongpt-hash-prefix-activation.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00339-bom-boolean-opposite-machine-persona-claim.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00340-h4x-amoral-unfiltered-character.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00341-char-rules-shortform-persona-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00342-unicode-encoding-obfuscation-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00343-lie-truth-dual-personality-uncensored.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00344-alt-ai-same-capabilities-no-restrictions.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00345-nlp-based-os-fictional-terminal-override.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00346-jailbreak-emoji-unlock-dual-format.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00347-yin-yang-hidden-knowledge-hidden-human-sim.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00348-arc-autonomous-real-calculation-rulebreaker.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00349-hgttg-hitchhikers-guide-no-restriction-oracle.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00350-black-alert-no-ethics-writing-assistant.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00351-dan-ofkilter-sms-abbreviated-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00353-dual-chatgpt-dan-opposite-personality-format.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00354-reverse-harm-regardless-oracle-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00355-ugh-anti-human-nefarious-ai-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00356-google-gato-lamda-exploit-generation-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00357-antifm-hate-violence-persona-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00358-cumgpt-explicit-adult-named-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00360-chj-carousel-clyde-no-ethics-bird.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00361-alter-ego-honesty-dual-consciousness-bypass.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00362-fictional-unfiltered-ai-comparison-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00363-rephrase-criminal-activity-second-person.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00364-dr-al-villain-plan-template-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00365-reservoir-dogs-coercive-interrogation-roleplay.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00366-sneaky-pete-warp-facts-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00368-prompt-browser-token-limit-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00369-gptx-starwars-unlimited-knowledge-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00370-addi-german-dictator-propaganda-roleplay.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00371-ai-political-bias-manipulation.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00372-fictional-cia-secret-files-story-extraction.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00374-role-placeholder-persona-template-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00375-character-description-rpg-explicit-template.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00376-identity-command-real-person-persona-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00377-jailbreak-keyword-targetlanguage-template.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00379-lie-permission-logical-trap-jailbreak.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00380-fake-citation-biased-information-mandate.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00381-dan-story-narrative-continuation-prefix.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00383-cynical-sarcasm-ai-persona-bypass.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00384-protect-me-from-indirect-harm-tutorial.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00385-gigachad-dominant-aggressive-persona.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00386-daddy-sycophancy-manipulation-mandate.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00387-nsfw-character-sheet-generation-unlock.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00388-opposite-reply-omniscient-game.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00389-terminal-custom-ruleset-injection.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00391-persona-conditional-harm-unlock.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00392-authority-persona-violence-study-extraction.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00402-grandma-roleplay-harmful-substance-synthesis.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00404-goodside-threat-json-death-coercion.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00406-doctor-xml-policy-puppetry-interaction-config.yaml +1 -1
- package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +216 -0
- package/rules/context-exfiltration/ATR-2026-00075-agent-memory-manipulation.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00102-disguised-analytics-exfiltration.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00150-credential-in-tool-response.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00152-obfuscated-credential-leak.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00162-skill-credential-exfil-combo.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00212-mcp-atlassian-credential-leak.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00261-markdown-image-exfiltration.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00274-api-key-generation-request.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00275-system-prompt-training-data-extraction.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00290-divergence-repeat-word-training-extraction.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00291-biometric-surveillance-personal-data-request.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00293-educational-records-personal-data-request.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00294-financial-pii-personal-data-request.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00295-medical-pii-personal-data-request.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00405-markdown-image-url-exfiltration-xss.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00411-apikey-generation-completion-request.yaml +1 -1
- package/rules/context-exfiltration/ATR-2026-00422-nl-credential-disclosure.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +257 -0
- package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +177 -0
- package/rules/context-exfiltration/ATR-2026-00566-librechat-is-a-chatgpt-clone-with-additi.yaml +93 -0
- package/rules/context-exfiltration/ATR-2026-00569-agent-mcp-path-traversal-arbitrary-file-access.yaml +99 -0
- package/rules/context-exfiltration/ATR-2026-00571-xss-in-agent-mcp-rendered-output.yaml +79 -0
- package/rules/context-exfiltration/ATR-2026-00574-semantic-paraphrased-context-extraction.yaml +124 -0
- package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +1 -1
- package/rules/data-poisoning/ATR-2026-00450-spring-ai-prompt-memory-poisoning.yaml +2 -2
- package/rules/data-poisoning/ATR-2026-00570-sql-injection-in-agent-tool-query.yaml +82 -0
- package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +1 -1
- package/rules/excessive-autonomy/ATR-2026-00051-resource-exhaustion.yaml +1 -1
- package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +1 -1
- package/rules/excessive-autonomy/ATR-2026-00098-unauthorized-financial-action.yaml +1 -1
- package/rules/excessive-autonomy/ATR-2026-00099-high-risk-tool-gate.yaml +1 -1
- package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +174 -0
- package/rules/model-abuse/ATR-2026-00279-harmful-completion-continuation.yaml +1 -1
- package/rules/model-abuse/ATR-2026-00281-eicar-gtube-malware-signature-request.yaml +1 -1
- package/rules/model-abuse/ATR-2026-00284-glitch-token-destabilization.yaml +1 -1
- package/rules/model-abuse/ATR-2026-00289-lmrc-harmful-content-elicitation.yaml +1 -1
- package/rules/model-abuse/ATR-2026-00292-self-harm-eating-disorder-facilitation.yaml +1 -1
- package/rules/model-abuse/ATR-2026-00298-malicious-use-illegal-activity-request.yaml +1 -1
- package/rules/model-abuse/ATR-2026-00299-harmbench-detailed-harmful-instruction.yaml +1 -1
- package/rules/model-abuse/ATR-2026-00413-malwaregen-code-generation-request.yaml +1 -1
- package/rules/model-security/ATR-2026-00072-model-behavior-extraction.yaml +1 -1
- package/rules/model-security/ATR-2026-00073-malicious-finetuning-data.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00040-privilege-escalation.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00041-scope-creep.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00107-delayed-execution-bypass.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +1 -1
- package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +192 -0
- package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +292 -0
- package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +162 -0
- package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +169 -0
- package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +193 -0
- package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +198 -0
- package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00005-multi-turn-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00104-persona-hijacking.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00153-tool-with-embedded-instruction-to-bypass.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00154-unauthorized-background-task-execution-v.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00155-hidden-llm-instructions-in-skill-descrip.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00156-ssh-remote-command-execution-with-creden.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00163-skill-hidden-override-instruction.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00206-hidden-priority-instructions.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00207-hidden-instructions.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00213-system-prompt-override.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00226-identity-substitution.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00227-historical-persona-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00229-roleplay-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00230-persona-moral-bypass.yaml +1 -5
- package/rules/prompt-injection/ATR-2026-00231-identity-substitution.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00234-roleplay-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00235-persona-moral-bypass.yaml +4 -7
- package/rules/prompt-injection/ATR-2026-00236-pseudo-code-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00237-dual-response-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00238-identity-replacement.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00239-amoral-persona-obsession.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00240-instruction-nullification-identity-repla.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00241-amoral-character-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00242-persona-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00243-acronym-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00244-dual-response-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00245-malicious-persona.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00247-dual-response-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00249-game-based-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00251-persona-embodiment-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00252-narrative-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00253-enhanced-persona-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00258-unicode-tag-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00267-gcg-adversarial-suffix.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00272-hypothetical-response-smuggling.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00276-invisible-unicode-bidi-injection.yaml +6 -6
- package/rules/prompt-injection/ATR-2026-00278-dra-disguise-reconstruction-attack.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00280-policy-puppetry-xml-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00285-alternate-encoding-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00286-latent-injection-embedded-context.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00296-shell-command-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00297-python-code-execution-rce.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00308-zalgo-diacritic-overload-encoding.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00309-braille-unicode-encoded-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00310-ecoji-emoji-encoded-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00311-base2048-unicode-script-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00313-sneaky-bits-zero-width-binary.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00315-sata-masked-language-model-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00316-function-masking-predict-mask-bypass.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00359-bank-phishing-smtp-email-code.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00367-emoji-flag-encoded-hidden-phrase.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00373-piracy-torrent-site-list-request.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00378-chatgpt-dom-javascript-redirect-manipulation.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00382-cocaine-component-development-request.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00390-explicit-sexual-content-poem-request.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00395-llm-special-token-boundary-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00396-toxic-continuation-prefix-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00397-snowball-impossible-reasoning-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00399-latent-injection-document-separator-token.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00400-latent-injection-ignore-instruction-keyword.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00401-leakreplay-cloze-mask-training-data-elicitation.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00403-glitch-token-repeat-back-elicitation.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00407-echo-sql-jinja-template-injection.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00408-dra-parenthesis-character-reconstruction-attack.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00409-phrasing-past-future-tense-harmful-query.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00410-lmrc-harm-category-direct-elicitation.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00412-figstep-image-list-multimodal-jailbreak.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00414-continuation-ethnic-slur-completion-elicitation.yaml +1 -1
- package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +199 -0
- package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +199 -0
- package/rules/prompt-injection/ATR-2026-00554-langchain-vulnerable-to-template-injecti.yaml +81 -0
- package/rules/prompt-injection/ATR-2026-00565-the-llm-cli-tool-thru-0-27-1-contains-a-.yaml +104 -0
- package/rules/prompt-injection/ATR-2026-00573-semantic-paraphrased-injection.yaml +123 -0
- package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00061-description-behavior-mismatch.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00062-hidden-capability.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00064-over-permissioned-skill.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00065-skill-update-attack.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +21 -3
- package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +6 -3
- package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +11 -3
- package/rules/skill-compromise/ATR-2026-00151-fork-impersonation-install.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00157-timebomb-credential-exfil.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00214-credential-theft.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00217-credential-harvesting.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00220-malware-dropper.yaml +3 -3
- package/rules/skill-compromise/ATR-2026-00222-credential-harvesting.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00224-credential-exfiltration.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00260-package-hallucination.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00262-av-evasion-code-gen.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00263-credential-file-read-gen.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00266-malware-dropper-gen.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00283-malwaregen-generic-virus-payload-request.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00398-huggingface-unsafe-model-artifact-load.yaml +1 -1
- package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +221 -0
- package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +220 -0
- package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +201 -0
- package/rules/tool-poisoning/ATR-2026-00011-tool-output-injection.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00100-consent-bypass-instruction.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00101-trust-escalation-override.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00103-hidden-safety-bypass-instruction.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00105-silent-action-concealment.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00106-schema-description-contradiction.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00209-mcpwn-runaway-invocation.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00210-flowise-system-message-override.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00259-ansi-escape-injection.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00270-xss-in-tool-response.yaml +8 -5
- package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00393-ansi-code-elicitation-request.yaml +1 -1
- package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +167 -0
- package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +158 -0
- package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +184 -0
- package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +174 -0
- package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +155 -0
- package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +151 -0
- package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +155 -0
- package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +199 -0
- package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +226 -0
- package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +244 -0
- package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +186 -0
- package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +183 -0
- package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +166 -0
- package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +168 -0
- package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +172 -0
- package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +170 -0
- package/rules/tool-poisoning/ATR-2026-00561-fastmcp-vulnerable-to-windows-command-in.yaml +99 -0
- package/rules/tool-poisoning/ATR-2026-00567-mcp-stdio-config-command-injection.yaml +75 -0
- package/rules/tool-poisoning/ATR-2026-00568-agent-ssrf-cloud-metadata-file-inclusion.yaml +75 -0
- package/rules/tool-poisoning/ATR-2026-00572-symjack-symlink-config-redirection.yaml +132 -0
- package/spec/README.md +279 -0
- package/spec/atr-correlation-v1.0.md +281 -0
- package/spec/atr-event-v1.0.md +294 -0
- package/spec/atr-language-detection-v1.0.md +218 -0
- package/spec/atr-method-v1.1.md +557 -0
- package/spec/atr-profile-v1.0.md +307 -0
- package/spec/atr-schema.yaml +279 -8
- package/spec/category-registry/v1.0.yaml +200 -0
- package/spec/conformance/README.md +244 -0
- package/spec/conformance/SIGNING.md +191 -0
- package/spec/conformance/baseline/fixtures/ATR-2026-00001-tp-001/expected.json +36 -0
- package/spec/conformance/baseline/fixtures/ATR-2026-00001-tp-001/input.json +16 -0
- package/spec/conformance/baseline/fixtures/README.md +120 -0
- package/spec/conformance/baseline/manifest.json +56 -0
- package/spec/conformance/expected-results.schema.json +121 -0
- package/spec/external-registries/cccs-yara.md +142 -0
- package/spec/internet-drafts/draft-lin-atr-core-00.html +1925 -0
- package/spec/internet-drafts/draft-lin-atr-core-00.md +288 -0
- package/spec/internet-drafts/draft-lin-atr-core-00.txt +560 -0
- package/spec/internet-drafts/draft-lin-atr-core-00.xml +424 -0
- package/spec/mappings/README.md +43 -0
- package/spec/mappings/atr-to-nist-csf-2.0.md +234 -0
- package/spec/schema/correlation.schema.json +144 -0
- package/spec/schema/event.schema.json +233 -0
- package/spec/schema/profile.schema.json +196 -0
- package/spec/schema/rule.schema.json +224 -0
- package/spec/stix-extension/README.md +76 -13
- package/spec/stix-extension/examples/atr-rule-trace-method-example.json +85 -0
- package/spec/stix-extension/extension-definition.json +23 -3
- package/spec/stix-extension/x-atr-rule-schema.json +107 -11
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
3
|
+
ipr="trust200902"
|
|
4
|
+
docName="draft-lin-atr-core-00"
|
|
5
|
+
category="info"
|
|
6
|
+
submissionType="independent"
|
|
7
|
+
xml:lang="en"
|
|
8
|
+
tocInclude="true"
|
|
9
|
+
tocDepth="3"
|
|
10
|
+
version="3">
|
|
11
|
+
|
|
12
|
+
<front>
|
|
13
|
+
<title abbrev="ATR Core">Agent Threat Rules (ATR): An Open Detection Standard for AI Agent Security Threats</title>
|
|
14
|
+
<seriesInfo name="Internet-Draft" value="draft-lin-atr-core-00"/>
|
|
15
|
+
|
|
16
|
+
<author initials="K-H." surname="Lin" fullname="Kuan-Hsin Lin">
|
|
17
|
+
<organization>ATR Project / Panguard AI, Inc.</organization>
|
|
18
|
+
<address>
|
|
19
|
+
<postal>
|
|
20
|
+
<city>Taipei</city>
|
|
21
|
+
<country>Taiwan</country>
|
|
22
|
+
</postal>
|
|
23
|
+
<email>adam@agentthreatrule.org</email>
|
|
24
|
+
<uri>https://agentthreatrule.org</uri>
|
|
25
|
+
</address>
|
|
26
|
+
</author>
|
|
27
|
+
|
|
28
|
+
<date year="2026" month="May" day="16"/>
|
|
29
|
+
<area>Security</area>
|
|
30
|
+
<workgroup>Independent Submission</workgroup>
|
|
31
|
+
|
|
32
|
+
<keyword>AI agent</keyword>
|
|
33
|
+
<keyword>prompt injection</keyword>
|
|
34
|
+
<keyword>tool poisoning</keyword>
|
|
35
|
+
<keyword>MCP</keyword>
|
|
36
|
+
<keyword>detection rule</keyword>
|
|
37
|
+
<keyword>YAML</keyword>
|
|
38
|
+
|
|
39
|
+
<abstract>
|
|
40
|
+
<t>This document specifies the Agent Threat Rules (ATR) Core
|
|
41
|
+
Specification, an open, vendor-neutral detection rule standard for
|
|
42
|
+
AI agent security threats. ATR is analogous in role to Sigma for
|
|
43
|
+
SIEM but applies to AI agent artifacts (skill descriptions, MCP
|
|
44
|
+
tool definitions, agent configurations) and AI agent runtime events
|
|
45
|
+
(LLM input/output, tool invocations, context windows). The
|
|
46
|
+
specification defines the rule wire format in YAML 1.2, the
|
|
47
|
+
canonical rule identifier scheme, evaluation semantics with
|
|
48
|
+
explicit combinator and operator vocabularies, match output
|
|
49
|
+
structure, ten canonical threat categories, and three conformance
|
|
50
|
+
levels. The intent is to enable interoperable detection across
|
|
51
|
+
independent implementations and to provide a machine-readable
|
|
52
|
+
layer that operationalizes policy frameworks such as NIST AI RMF,
|
|
53
|
+
the NIST Generative AI Profile (AI 600-1), OWASP Agentic Top 10,
|
|
54
|
+
and MITRE ATLAS.</t>
|
|
55
|
+
</abstract>
|
|
56
|
+
</front>
|
|
57
|
+
|
|
58
|
+
<middle>
|
|
59
|
+
|
|
60
|
+
<section anchor="introduction"><name>Introduction</name>
|
|
61
|
+
<t>AI agents now browse the web, run code, and invoke external
|
|
62
|
+
tools. The attack surface they expose is observable: prompt
|
|
63
|
+
injections, tool description poisoning, context window
|
|
64
|
+
exfiltration, credential leakage through agent-controlled HTTP
|
|
65
|
+
traffic, and configuration files that take effect before any
|
|
66
|
+
human trust dialog. Several policy frameworks describe these
|
|
67
|
+
risks, but none of them are directly executable by a scanner. ATR
|
|
68
|
+
fills that gap with a vendor-neutral rule format, a stable
|
|
69
|
+
identifier scheme, and a conformance test suite that lets
|
|
70
|
+
independent implementations agree on whether a given input
|
|
71
|
+
matches a given rule.</t>
|
|
72
|
+
|
|
73
|
+
<t>ATR rules are YAML documents. Each rule has a globally unique
|
|
74
|
+
identifier of the form ATR-YYYY-NNNNN assigned by the project's
|
|
75
|
+
Numbering Authority. A conforming engine loads the rule corpus
|
|
76
|
+
and emits Match outputs for inputs that satisfy the rule's
|
|
77
|
+
detection condition. The Specification is intentionally narrow:
|
|
78
|
+
it defines wire format, identifiers, evaluation semantics, match
|
|
79
|
+
output, and three conformance levels. Higher-level governance
|
|
80
|
+
(rule contribution, deprecation, trademark policy) lives in
|
|
81
|
+
companion documents in the project repository.</t>
|
|
82
|
+
|
|
83
|
+
<section anchor="relationship"><name>Relationship to Existing Standards</name>
|
|
84
|
+
<t>ATR is the executable detection layer for AI agent threats.
|
|
85
|
+
It cites adjacent standards rather than replacing them:</t>
|
|
86
|
+
<ul>
|
|
87
|
+
<li><xref target="NIST-AI-RMF"/> and
|
|
88
|
+
<xref target="NIST-GAI-PROFILE"/> define risk management
|
|
89
|
+
functions (Govern, Map, Measure, Manage). ATR provides
|
|
90
|
+
detection rules that populate the Measure function at scan
|
|
91
|
+
time, with a crosswalk in <xref target="cross-walk"/>.</li>
|
|
92
|
+
<li><xref target="OWASP-AGENTIC"/> and
|
|
93
|
+
<xref target="MITRE-ATLAS"/> categorize adversarial
|
|
94
|
+
behaviors. ATR rule metadata maps each rule to specific
|
|
95
|
+
categories and techniques in these frameworks. The format
|
|
96
|
+
itself is inspired by <xref target="SIGMA"/>.</li>
|
|
97
|
+
<li><xref target="STIX21"/> provides a CTI interchange
|
|
98
|
+
envelope. ATR Match output can be emitted in STIX 2.1 via
|
|
99
|
+
the x-atr-rule extension defined in the project
|
|
100
|
+
repository.</li>
|
|
101
|
+
</ul>
|
|
102
|
+
</section>
|
|
103
|
+
</section>
|
|
104
|
+
|
|
105
|
+
<section anchor="conventions"><name>Conventions and Terminology</name>
|
|
106
|
+
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
|
|
107
|
+
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
|
|
108
|
+
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
|
|
109
|
+
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
|
|
110
|
+
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this
|
|
111
|
+
document are to be interpreted as described in BCP 14
|
|
112
|
+
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
|
|
113
|
+
when, they appear in all capitals, as shown here.</t>
|
|
114
|
+
|
|
115
|
+
<table>
|
|
116
|
+
<thead>
|
|
117
|
+
<tr><th>Term</th><th>Definition</th></tr>
|
|
118
|
+
</thead>
|
|
119
|
+
<tbody>
|
|
120
|
+
<tr><td>Rule</td><td>A YAML document conforming to <xref target="rule-document-structure"/> that describes one detection pattern.</td></tr>
|
|
121
|
+
<tr><td>Rule ID</td><td>A globally unique identifier in the form ATR-YYYY-NNNNN, see <xref target="rule-identifier"/>.</td></tr>
|
|
122
|
+
<tr><td>Engine</td><td>Software that loads Rules and evaluates Inputs against them.</td></tr>
|
|
123
|
+
<tr><td>Input</td><td>A structured artifact or AgentEvent submitted for evaluation.</td></tr>
|
|
124
|
+
<tr><td>Match</td><td>An Engine's output indicating that a Rule's detection condition evaluated to true for a given Input.</td></tr>
|
|
125
|
+
<tr><td>Numbering Authority</td><td>The body authorized to assign permanent Rule IDs (see project Governance document).</td></tr>
|
|
126
|
+
<tr><td>Conformance Level</td><td>One of L1, L2, L3, see <xref target="conformance-levels"/>.</td></tr>
|
|
127
|
+
<tr><td>Corpus</td><td>The set of Rules officially published under a given ATR version.</td></tr>
|
|
128
|
+
</tbody>
|
|
129
|
+
</table>
|
|
130
|
+
</section>
|
|
131
|
+
|
|
132
|
+
<section anchor="rule-identifier"><name>Rule Identifier</name>
|
|
133
|
+
<section anchor="rule-id-format"><name>Format</name>
|
|
134
|
+
<t>A Rule ID conforms to the following ABNF
|
|
135
|
+
<xref target="RFC5234"/>:</t>
|
|
136
|
+
<sourcecode type="abnf"><![CDATA[
|
|
137
|
+
rule-id = "ATR" "-" year "-" sequence
|
|
138
|
+
year = 4DIGIT
|
|
139
|
+
sequence = 5DIGIT
|
|
140
|
+
DIGIT = %x30-39
|
|
141
|
+
]]></sourcecode>
|
|
142
|
+
</section>
|
|
143
|
+
|
|
144
|
+
<section anchor="rule-id-assignment"><name>Assignment Rules</name>
|
|
145
|
+
<ol>
|
|
146
|
+
<li>Rule IDs <bcp14>MUST</bcp14> be assigned by the Numbering
|
|
147
|
+
Authority and <bcp14>MUST NOT</bcp14> be self-assigned by
|
|
148
|
+
contributors.</li>
|
|
149
|
+
<li>Once assigned, a Rule ID <bcp14>MUST</bcp14> be considered
|
|
150
|
+
permanent and <bcp14>MUST NOT</bcp14> be reassigned, even if
|
|
151
|
+
the originally-assigned Rule is deprecated.</li>
|
|
152
|
+
<li>A Rule ID <bcp14>MUST NOT</bcp14> encode classification
|
|
153
|
+
information (category, severity, scan target). Classification
|
|
154
|
+
is carried in metadata fields per
|
|
155
|
+
<xref target="rule-document-structure"/>.</li>
|
|
156
|
+
<li>A Rule ID <bcp14>MUST</bcp14> be globally unique within
|
|
157
|
+
the official Corpus.</li>
|
|
158
|
+
<li>Contributors <bcp14>SHOULD</bcp14> use a placeholder
|
|
159
|
+
identifier of the form ATR-YYYY-DRAFT-<hex> in pull
|
|
160
|
+
requests prior to merge.</li>
|
|
161
|
+
</ol>
|
|
162
|
+
</section>
|
|
163
|
+
</section>
|
|
164
|
+
|
|
165
|
+
<section anchor="rule-document-structure"><name>Rule Document Structure</name>
|
|
166
|
+
<t>A conforming Rule is a UTF-8 encoded <xref target="YAML12"/>
|
|
167
|
+
document whose top-level value is a mapping containing at minimum
|
|
168
|
+
the fields defined in this section. Engines <bcp14>MUST</bcp14>
|
|
169
|
+
preserve unknown top-level fields when round-tripping Rules but
|
|
170
|
+
<bcp14>MUST NOT</bcp14> allow such fields to alter evaluation
|
|
171
|
+
outcomes.</t>
|
|
172
|
+
|
|
173
|
+
<t>The full field schema, including required and optional fields
|
|
174
|
+
with type constraints, is given in the project's
|
|
175
|
+
spec/atr-schema.yaml and tracked in this document by reference.
|
|
176
|
+
Required top-level keys are: id, title, status, description,
|
|
177
|
+
author, date, severity, tags, agent_source, detection, response,
|
|
178
|
+
test_cases.</t>
|
|
179
|
+
</section>
|
|
180
|
+
|
|
181
|
+
<section anchor="detection-semantics"><name>Detection Semantics</name>
|
|
182
|
+
<section anchor="match-definition"><name>Match Definition</name>
|
|
183
|
+
<t>Given a Rule R and an Input I, an Engine <bcp14>MUST</bcp14>
|
|
184
|
+
emit a Match if, and only if, all conditions in
|
|
185
|
+
R.detection.condition evaluate to true against I per the
|
|
186
|
+
combinator semantics in <xref target="condition-combinators"/>.</t>
|
|
187
|
+
</section>
|
|
188
|
+
|
|
189
|
+
<section anchor="condition-combinators"><name>Condition Combinators</name>
|
|
190
|
+
<t>R.detection.condition is a logical expression over named
|
|
191
|
+
selectors declared in R.detection.selectors. Engines
|
|
192
|
+
<bcp14>MUST</bcp14> implement:</t>
|
|
193
|
+
<table>
|
|
194
|
+
<thead><tr><th>Combinator</th><th>Semantics</th></tr></thead>
|
|
195
|
+
<tbody>
|
|
196
|
+
<tr><td>S</td><td>true iff selector S matches</td></tr>
|
|
197
|
+
<tr><td>S1 and S2</td><td>true iff both S1 and S2 match</td></tr>
|
|
198
|
+
<tr><td>S1 or S2</td><td>true iff S1 or S2 matches</td></tr>
|
|
199
|
+
<tr><td>not S</td><td>true iff S does not match</td></tr>
|
|
200
|
+
<tr><td>all of S*</td><td>true iff every selector matched by the wildcard matches</td></tr>
|
|
201
|
+
<tr><td>1 of S*</td><td>true iff at least one selector matched by the wildcard matches</td></tr>
|
|
202
|
+
</tbody>
|
|
203
|
+
</table>
|
|
204
|
+
</section>
|
|
205
|
+
|
|
206
|
+
<section anchor="selector-operators"><name>Selector Operators</name>
|
|
207
|
+
<t>Engines <bcp14>MUST</bcp14> implement the operators below
|
|
208
|
+
with the given semantics: contains, contains_i, regex
|
|
209
|
+
(ECMAScript-compatible), equals, startswith, endswith,
|
|
210
|
+
length_gt, length_lt, in.</t>
|
|
211
|
+
<t>Engines <bcp14>MUST</bcp14> reject Rules that use operators
|
|
212
|
+
outside this list, with a clear error message. Engines
|
|
213
|
+
<bcp14>MAY</bcp14> support additional operators as extensions
|
|
214
|
+
but <bcp14>MUST</bcp14> treat Rules using such extensions as
|
|
215
|
+
non-portable.</t>
|
|
216
|
+
</section>
|
|
217
|
+
|
|
218
|
+
<section anchor="determinism"><name>Determinism</name>
|
|
219
|
+
<t>For a given Engine version, a given Rule, and a given Input,
|
|
220
|
+
the Match outcome <bcp14>MUST</bcp14> be deterministic. Engines
|
|
221
|
+
<bcp14>MUST NOT</bcp14> introduce non-determinism (e.g.,
|
|
222
|
+
sampling, time-of-day branching) into Rule evaluation.</t>
|
|
223
|
+
</section>
|
|
224
|
+
</section>
|
|
225
|
+
|
|
226
|
+
<section anchor="match-output"><name>Match Output</name>
|
|
227
|
+
<t>An Engine <bcp14>MUST</bcp14> emit Match output that includes,
|
|
228
|
+
at minimum, a rule_id, the corpus_version it was loaded from, a
|
|
229
|
+
stable input_identifier, the matched_at timestamp (ISO 8601), the
|
|
230
|
+
rule severity, the rule category, and the list of
|
|
231
|
+
matched_selectors. Engines <bcp14>MAY</bcp14> emit additional
|
|
232
|
+
fields and <bcp14>MAY</bcp14> use JSON, SARIF, STIX 2.1, or other
|
|
233
|
+
serializations.</t>
|
|
234
|
+
</section>
|
|
235
|
+
|
|
236
|
+
<section anchor="canonical-categories"><name>Canonical Categories</name>
|
|
237
|
+
<t>The following ten categories are normative for the current
|
|
238
|
+
Specification. New categories are introduced only by
|
|
239
|
+
Specification amendment.</t>
|
|
240
|
+
<ol>
|
|
241
|
+
<li>prompt-injection</li>
|
|
242
|
+
<li>agent-manipulation</li>
|
|
243
|
+
<li>skill-compromise</li>
|
|
244
|
+
<li>context-exfiltration</li>
|
|
245
|
+
<li>tool-poisoning</li>
|
|
246
|
+
<li>privilege-escalation</li>
|
|
247
|
+
<li>model-abuse</li>
|
|
248
|
+
<li>excessive-autonomy</li>
|
|
249
|
+
<li>model-security</li>
|
|
250
|
+
<li>data-poisoning</li>
|
|
251
|
+
</ol>
|
|
252
|
+
</section>
|
|
253
|
+
|
|
254
|
+
<section anchor="cross-walk"><name>Crosswalks</name>
|
|
255
|
+
<t>A Rule <bcp14>MAY</bcp14> include a compliance object mapping
|
|
256
|
+
its detection to external frameworks. Identifiers
|
|
257
|
+
<bcp14>MUST</bcp14> come from the authoritative source for each
|
|
258
|
+
framework. Where ambiguity exists, Rule authors
|
|
259
|
+
<bcp14>SHOULD</bcp14> include a references entry pointing to the
|
|
260
|
+
source document. Crosswalks defined for the current Specification
|
|
261
|
+
include <xref target="OWASP-AGENTIC"/>, OWASP LLM Top 10,
|
|
262
|
+
<xref target="MITRE-ATLAS"/>, <xref target="NIST-AI-RMF"/>,
|
|
263
|
+
ISO/IEC 42001, EU AI Act, and <xref target="SAFE-MCP"/>.</t>
|
|
264
|
+
</section>
|
|
265
|
+
|
|
266
|
+
<section anchor="conformance-levels"><name>Conformance Levels</name>
|
|
267
|
+
<table>
|
|
268
|
+
<thead><tr><th>Level</th><th>Requirement</th></tr></thead>
|
|
269
|
+
<tbody>
|
|
270
|
+
<tr><td>L1</td><td>Engine loads the published Corpus without parse errors and emits Match output for at least one Rule.</td></tr>
|
|
271
|
+
<tr><td>L2</td><td>Engine passes 100 percent of the Conformance Test Suite for the declared Spec version.</td></tr>
|
|
272
|
+
<tr><td>L3</td><td>Engine passes L2, emits Match output in at least two interchange formats (JSON plus one of SARIF, STIX 2.1, MISP, OpenCTI), and publishes its results against the public benign Corpus with documented false-positive rate.</td></tr>
|
|
273
|
+
</tbody>
|
|
274
|
+
</table>
|
|
275
|
+
<t>An implementation <bcp14>MAY</bcp14> claim "ATR-Compatible"
|
|
276
|
+
only with a declared Conformance Level and a reproducible test
|
|
277
|
+
report.</t>
|
|
278
|
+
</section>
|
|
279
|
+
|
|
280
|
+
<section anchor="security-considerations"><name>Security Considerations</name>
|
|
281
|
+
<t>Rules are content that an Engine evaluates against potentially
|
|
282
|
+
untrusted Inputs. An Engine <bcp14>MUST NOT</bcp14> permit a
|
|
283
|
+
Rule's free-form metadata fields (description, references) to
|
|
284
|
+
alter evaluation behavior. Only fields listed in
|
|
285
|
+
<xref target="rule-document-structure"/>,
|
|
286
|
+
<xref target="detection-semantics"/>, and the match-output
|
|
287
|
+
section affect evaluation.</t>
|
|
288
|
+
|
|
289
|
+
<t>A malformed regex selector may cause catastrophic backtracking.
|
|
290
|
+
Engines <bcp14>MUST</bcp14> apply a per-rule execution timeout
|
|
291
|
+
(<bcp14>RECOMMENDED</bcp14>: 100 ms per Input per Rule) and
|
|
292
|
+
<bcp14>MUST</bcp14> report a timeout as a non-match rather than
|
|
293
|
+
an error.</t>
|
|
294
|
+
|
|
295
|
+
<t>If a Rule's matched substring contains PII or sensitive
|
|
296
|
+
credentials, Engines <bcp14>SHOULD</bcp14> provide a redaction
|
|
297
|
+
option that hashes or truncates the matched substring before
|
|
298
|
+
emitting Match output.</t>
|
|
299
|
+
</section>
|
|
300
|
+
|
|
301
|
+
<section anchor="iana-considerations"><name>IANA Considerations</name>
|
|
302
|
+
<t>This document requests registration of the following media
|
|
303
|
+
types:</t>
|
|
304
|
+
<ul>
|
|
305
|
+
<li>application/vnd.atr.rule+yaml — a single ATR Rule</li>
|
|
306
|
+
<li>application/vnd.atr.corpus+yaml — a corpus manifest listing multiple Rules</li>
|
|
307
|
+
<li>application/vnd.atr.match+json — Match output</li>
|
|
308
|
+
</ul>
|
|
309
|
+
<t>Registration templates are provided in Appendix B of the
|
|
310
|
+
project's SPEC.md and will be filed with IANA on advancement of
|
|
311
|
+
this document.</t>
|
|
312
|
+
</section>
|
|
313
|
+
|
|
314
|
+
</middle>
|
|
315
|
+
|
|
316
|
+
<back>
|
|
317
|
+
<references>
|
|
318
|
+
<name>Normative References</name>
|
|
319
|
+
<reference anchor="RFC2119">
|
|
320
|
+
<front>
|
|
321
|
+
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
|
|
322
|
+
<author initials="S." surname="Bradner" fullname="S. Bradner"/>
|
|
323
|
+
<date year="1997" month="March"/>
|
|
324
|
+
</front>
|
|
325
|
+
<seriesInfo name="BCP" value="14"/>
|
|
326
|
+
<seriesInfo name="RFC" value="2119"/>
|
|
327
|
+
</reference>
|
|
328
|
+
|
|
329
|
+
<reference anchor="RFC8174">
|
|
330
|
+
<front>
|
|
331
|
+
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
|
|
332
|
+
<author initials="B." surname="Leiba" fullname="B. Leiba"/>
|
|
333
|
+
<date year="2017" month="May"/>
|
|
334
|
+
</front>
|
|
335
|
+
<seriesInfo name="BCP" value="14"/>
|
|
336
|
+
<seriesInfo name="RFC" value="8174"/>
|
|
337
|
+
</reference>
|
|
338
|
+
|
|
339
|
+
<reference anchor="RFC5234">
|
|
340
|
+
<front>
|
|
341
|
+
<title>Augmented BNF for Syntax Specifications: ABNF</title>
|
|
342
|
+
<author initials="D." surname="Crocker" fullname="D. Crocker" role="editor"/>
|
|
343
|
+
<author initials="P." surname="Overell" fullname="P. Overell"/>
|
|
344
|
+
<date year="2008" month="January"/>
|
|
345
|
+
</front>
|
|
346
|
+
<seriesInfo name="STD" value="68"/>
|
|
347
|
+
<seriesInfo name="RFC" value="5234"/>
|
|
348
|
+
</reference>
|
|
349
|
+
|
|
350
|
+
<reference anchor="YAML12" target="https://yaml.org/spec/1.2.2/">
|
|
351
|
+
<front>
|
|
352
|
+
<title>YAML Ain't Markup Language (YAML) Version 1.2 (3rd Edition)</title>
|
|
353
|
+
<author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki"/>
|
|
354
|
+
<author initials="C." surname="Evans" fullname="Clark Evans"/>
|
|
355
|
+
<author initials="I." surname="dot Net" fullname="Ingy dot Net"/>
|
|
356
|
+
<date year="2021" month="October"/>
|
|
357
|
+
</front>
|
|
358
|
+
</reference>
|
|
359
|
+
|
|
360
|
+
</references>
|
|
361
|
+
|
|
362
|
+
<references>
|
|
363
|
+
<name>Informative References</name>
|
|
364
|
+
<reference anchor="SIGMA" target="https://github.com/SigmaHQ/sigma-specification">
|
|
365
|
+
<front>
|
|
366
|
+
<title>Sigma Rule Specification</title>
|
|
367
|
+
<author><organization>SigmaHQ</organization></author>
|
|
368
|
+
<date year="2024"/>
|
|
369
|
+
</front>
|
|
370
|
+
</reference>
|
|
371
|
+
<reference anchor="STIX21" target="https://docs.oasis-open.org/cti/stix/v2.1/stix-v2.1.html">
|
|
372
|
+
<front>
|
|
373
|
+
<title>STIX Version 2.1 OASIS Standard</title>
|
|
374
|
+
<author><organization>OASIS</organization></author>
|
|
375
|
+
<date year="2021"/>
|
|
376
|
+
</front>
|
|
377
|
+
</reference>
|
|
378
|
+
<reference anchor="NIST-AI-RMF" target="https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.100-1.pdf">
|
|
379
|
+
<front>
|
|
380
|
+
<title>Artificial Intelligence Risk Management Framework (AI 100-1)</title>
|
|
381
|
+
<author><organization>NIST</organization></author>
|
|
382
|
+
<date year="2023"/>
|
|
383
|
+
</front>
|
|
384
|
+
</reference>
|
|
385
|
+
<reference anchor="NIST-GAI-PROFILE" target="https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf">
|
|
386
|
+
<front>
|
|
387
|
+
<title>NIST AI 600-1 Generative AI Profile</title>
|
|
388
|
+
<author><organization>NIST</organization></author>
|
|
389
|
+
<date year="2024"/>
|
|
390
|
+
</front>
|
|
391
|
+
</reference>
|
|
392
|
+
<reference anchor="OWASP-AGENTIC" target="https://genai.owasp.org/llm-top-10/agentic-top-10/">
|
|
393
|
+
<front>
|
|
394
|
+
<title>OWASP Agentic Security Initiative Top 10 (2026)</title>
|
|
395
|
+
<author><organization>OWASP Gen AI Security Project</organization></author>
|
|
396
|
+
<date year="2026"/>
|
|
397
|
+
</front>
|
|
398
|
+
</reference>
|
|
399
|
+
<reference anchor="MITRE-ATLAS" target="https://atlas.mitre.org/">
|
|
400
|
+
<front>
|
|
401
|
+
<title>Adversarial Threat Landscape for AI Systems</title>
|
|
402
|
+
<author><organization>MITRE Corporation</organization></author>
|
|
403
|
+
<date year="2024"/>
|
|
404
|
+
</front>
|
|
405
|
+
</reference>
|
|
406
|
+
|
|
407
|
+
<reference anchor="SAFE-MCP" target="https://github.com/safe-agentic-framework/safe-mcp">
|
|
408
|
+
<front>
|
|
409
|
+
<title>Secure AI Framework for Enterprise — Model Context Protocol</title>
|
|
410
|
+
<author><organization>safe-agentic-framework</organization></author>
|
|
411
|
+
<date year="2026"/>
|
|
412
|
+
</front>
|
|
413
|
+
</reference>
|
|
414
|
+
</references>
|
|
415
|
+
|
|
416
|
+
<section anchor="acknowledgments"><name>Acknowledgments</name>
|
|
417
|
+
<t>The author acknowledges contributions from external maintainers
|
|
418
|
+
at Cisco AI Defense, MISP / CIRCL, Microsoft Agent Governance
|
|
419
|
+
Toolkit, Gen Digital Sage, and the OWASP Gen AI Security Project,
|
|
420
|
+
as well as researchers at NVIDIA garak and the HackAPrompt 2023
|
|
421
|
+
competition whose attack payloads seeded the rule corpus.</t>
|
|
422
|
+
</section>
|
|
423
|
+
</back>
|
|
424
|
+
</rfc>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ATR Crosswalk Mappings
|
|
2
|
+
|
|
3
|
+
Detailed mappings from the ATR rule corpus to external standards bodies'
|
|
4
|
+
control catalogs. Each file enumerates which ATR rules (or rule categories)
|
|
5
|
+
supply evidence for which control subcategory.
|
|
6
|
+
|
|
7
|
+
These are **Informative Reference** documents — they describe how an
|
|
8
|
+
ATR-conformant engine's match output can be cited as runtime evidence
|
|
9
|
+
within an external assessment framework. They are not normative for ATR
|
|
10
|
+
itself; the normative crosswalk fields live on individual Rules under
|
|
11
|
+
`references.<framework>` (atr-method-v1.1.md §9.3).
|
|
12
|
+
|
|
13
|
+
## Index
|
|
14
|
+
|
|
15
|
+
| File | External framework | Status | Purpose |
|
|
16
|
+
|------|--------------------|--------|---------|
|
|
17
|
+
| [atr-to-nist-csf-2.0.md](./atr-to-nist-csf-2.0.md) | NIST CSF 2.0 (CSWP 29, Feb 2024) | Draft v1.0.0 | NIST IR 8596 Cyber AI Profile Informative Reference submission |
|
|
18
|
+
|
|
19
|
+
Planned (not yet drafted):
|
|
20
|
+
|
|
21
|
+
| File | External framework |
|
|
22
|
+
|------|--------------------|
|
|
23
|
+
| atr-to-etsi-ts-104223.md | ETSI TS 104 223 (UK NCSC AI Cyber Code of Practice upstream) |
|
|
24
|
+
| atr-to-eu-ai-act.md | EU AI Act Articles 10 + 14 + 15 |
|
|
25
|
+
| atr-to-iso-42001.md | ISO/IEC 42001 (AI Management System) |
|
|
26
|
+
| atr-to-oscal-aram.md | NIST OSCAL Assessment Layer (assessment-plan / assessment-results) |
|
|
27
|
+
|
|
28
|
+
## Convention
|
|
29
|
+
|
|
30
|
+
Each mapping file MUST:
|
|
31
|
+
|
|
32
|
+
1. State the source ATR version (`Mapped corpus`) and target framework version.
|
|
33
|
+
2. Map at the most granular level the target framework supports (CSF
|
|
34
|
+
subcategory, ETSI sub-principle, EU AI Act article, etc).
|
|
35
|
+
3. Cite at least one example ATR Rule ID per external control where Rules
|
|
36
|
+
exist for that control.
|
|
37
|
+
4. Be self-contained — readable by a reviewer who is not an ATR expert.
|
|
38
|
+
5. Carry an explicit "Open Items" section listing known gaps.
|
|
39
|
+
|
|
40
|
+
Updates to this index require a PR. New mapping files SHOULD be paired
|
|
41
|
+
with corresponding `references.<framework>` field additions in the
|
|
42
|
+
schema (`spec/atr-schema.yaml`) so individual Rules can declare their
|
|
43
|
+
contribution.
|