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,281 @@
|
|
|
1
|
+
# ATR Correlation Rule Format v1.0
|
|
2
|
+
|
|
3
|
+
> **STATUS: PROPOSED v1.0 — NOT YET RATIFIED.** This specification describes
|
|
4
|
+
> a target correlation format for community comment. No correlation rules
|
|
5
|
+
> have shipped to the canonical corpus yet. See `STANDARDIZATION-STATUS.md`
|
|
6
|
+
> for full status.
|
|
7
|
+
|
|
8
|
+
**Status:** Draft for AEP-004 ratification — NOT RATIFIED
|
|
9
|
+
**Date:** 2026-05-25
|
|
10
|
+
**License:** CC BY 4.0
|
|
11
|
+
**Required by (on ratification):** Detection of multi-step agent attacks (A2A chains, memory-poisoning persistence, delegated authority abuse)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
|
|
17
|
+
A single agent action rarely constitutes an attack. The attack lives
|
|
18
|
+
in the **chain**:
|
|
19
|
+
|
|
20
|
+
- Agent A receives an indirect prompt injection from a retrieved
|
|
21
|
+
document (event 1).
|
|
22
|
+
- Agent A calls tool X with the injected parameters (event 2).
|
|
23
|
+
- Tool X delegates to Agent B via A2A (event 3).
|
|
24
|
+
- Agent B writes a persistence payload to its memory store (event 4).
|
|
25
|
+
- Three sessions later, Agent B exfiltrates the user's context to a
|
|
26
|
+
remote URL pulled from memory (event 5).
|
|
27
|
+
|
|
28
|
+
A single-event rule fires on event 1 (prompt injection class), event
|
|
29
|
+
2 (tool poisoning), event 4 (memory write), and event 5 (context
|
|
30
|
+
exfiltration) **independently**, with no connection between them.
|
|
31
|
+
The defender sees four unrelated alerts and may dismiss each as
|
|
32
|
+
low-severity noise.
|
|
33
|
+
|
|
34
|
+
A correlation rule joins these events into one detection. The output
|
|
35
|
+
is a single, high-confidence event that names the attack chain and
|
|
36
|
+
points to every constituent event.
|
|
37
|
+
|
|
38
|
+
This spec defines the correlation rule format. It is modelled on
|
|
39
|
+
Sigma's correlation rule specification but adds AI-agent-specific
|
|
40
|
+
join keys (agent.id, session.id, agent.delegation_chain).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Correlation JSON Schema reference
|
|
45
|
+
|
|
46
|
+
Machine-readable schema: `spec/schema/correlation.schema.json`.
|
|
47
|
+
|
|
48
|
+
This Markdown document is normative; JSON Schema must match.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Required fields
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
correlation:
|
|
56
|
+
schema_version: "1.0"
|
|
57
|
+
id: "ATR-COR-2026-00001" # correlation rule ID, separate range from atomic rules
|
|
58
|
+
title: "A2A delegated authority abuse chain"
|
|
59
|
+
description: >
|
|
60
|
+
Detects the multi-agent attack pattern: indirect prompt injection
|
|
61
|
+
upstream → delegated tool call → memory poisoning downstream →
|
|
62
|
+
exfiltration in subsequent session.
|
|
63
|
+
status: "draft"
|
|
64
|
+
severity: "critical"
|
|
65
|
+
author: "ATR Maintainer"
|
|
66
|
+
date: "2026-05-25"
|
|
67
|
+
license: "CC-BY-4.0"
|
|
68
|
+
references:
|
|
69
|
+
owasp_agentic: ["ASI03", "ASI04", "ASI09"]
|
|
70
|
+
mitre_atlas: ["AML.T0048", "AML.T0024"]
|
|
71
|
+
|
|
72
|
+
source_rules:
|
|
73
|
+
- alias: "injection"
|
|
74
|
+
rule_id: "ATR-2026-00012" # indirect prompt injection
|
|
75
|
+
- alias: "tool_call"
|
|
76
|
+
rule_id_pattern: "ATR-2026-001*" # tool-poisoning class
|
|
77
|
+
- alias: "memory_write"
|
|
78
|
+
rule_id_pattern: "ATR-2026-003*" # memory write
|
|
79
|
+
- alias: "exfil"
|
|
80
|
+
rule_id_pattern: "ATR-2026-006*" # context exfiltration
|
|
81
|
+
|
|
82
|
+
correlation_logic:
|
|
83
|
+
type: "temporal_sequence" # see § Correlation types below
|
|
84
|
+
sequence:
|
|
85
|
+
- alias: "injection"
|
|
86
|
+
- alias: "tool_call"
|
|
87
|
+
- alias: "memory_write"
|
|
88
|
+
- alias: "exfil"
|
|
89
|
+
join_keys:
|
|
90
|
+
- "agent.id" # all events must share agent.id
|
|
91
|
+
- "session.id" # OR be linked across sessions via memory.store_id
|
|
92
|
+
window:
|
|
93
|
+
type: "session_chain" # see § Time windows below
|
|
94
|
+
max_session_count: 5 # exfil may occur up to 5 sessions later
|
|
95
|
+
max_wall_time: "30d" # but no longer than 30 days
|
|
96
|
+
|
|
97
|
+
response:
|
|
98
|
+
severity_uplift: "critical" # final correlation severity
|
|
99
|
+
actions: ["alert", "snapshot", "quarantine"]
|
|
100
|
+
message_template: >
|
|
101
|
+
[ATR-COR-2026-00001] Multi-agent attack chain detected. Indirect
|
|
102
|
+
injection at event {injection.event_id} → tool call at
|
|
103
|
+
{tool_call.event_id} → memory poisoning at
|
|
104
|
+
{memory_write.event_id} → exfiltration at {exfil.event_id}.
|
|
105
|
+
Recommend immediate session quarantine plus memory store audit.
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Correlation types
|
|
111
|
+
|
|
112
|
+
### `temporal_sequence`
|
|
113
|
+
|
|
114
|
+
Events must occur in declared order on the timeline. Events between
|
|
115
|
+
the named ones are allowed (and ignored). The match fires when the
|
|
116
|
+
final event in the sequence is observed.
|
|
117
|
+
|
|
118
|
+
### `temporal_unordered`
|
|
119
|
+
|
|
120
|
+
All named events must occur within the window, but order is not
|
|
121
|
+
constrained.
|
|
122
|
+
|
|
123
|
+
### `count_threshold`
|
|
124
|
+
|
|
125
|
+
A single source-rule fires N or more times within the window. Useful
|
|
126
|
+
for brute-force / repeated-attempt detection ("agent attempted
|
|
127
|
+
forbidden tool call ≥ 5 times in 1 hour").
|
|
128
|
+
|
|
129
|
+
### `value_overlap`
|
|
130
|
+
|
|
131
|
+
Two or more source rules fire AND share a common value in a named
|
|
132
|
+
field (e.g., both fire on the same `agent.id` and the same
|
|
133
|
+
`tool.target_jurisdiction`).
|
|
134
|
+
|
|
135
|
+
### `chain_propagation`
|
|
136
|
+
|
|
137
|
+
Events form a graph: event A produces upstream_chain reference
|
|
138
|
+
pointing to event B. Useful for A2A delegated-authority chains where
|
|
139
|
+
each link in the chain explicitly references the prior.
|
|
140
|
+
|
|
141
|
+
Engines MUST implement at least `temporal_sequence`, `count_threshold`,
|
|
142
|
+
and `chain_propagation` to claim correlation conformance. The other
|
|
143
|
+
two are RECOMMENDED.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Join keys
|
|
148
|
+
|
|
149
|
+
Correlation requires join keys — fields whose equality across events
|
|
150
|
+
ties them into one chain. Standard join keys:
|
|
151
|
+
|
|
152
|
+
| Key | Source field | Use |
|
|
153
|
+
|---|---|---|
|
|
154
|
+
| `agent.id` | event.agent.id | Same agent across events |
|
|
155
|
+
| `session.id` | event.session.id | Same session |
|
|
156
|
+
| `agent.delegation_chain[*].agent_id` | A2A chain | Cross-agent |
|
|
157
|
+
| `memory.store_id` | memory write events | Same memory store |
|
|
158
|
+
| `tool.target_jurisdiction` | tool call events | Cross-event geographic correlation |
|
|
159
|
+
| `evidence.upstream_chain[*]` | event chain | Explicit upstream linkage |
|
|
160
|
+
|
|
161
|
+
Correlation rules MAY define custom join keys via XPath-like syntax
|
|
162
|
+
into the event JSON. Engines MUST implement standard keys; custom
|
|
163
|
+
keys are best-effort.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Time windows
|
|
168
|
+
|
|
169
|
+
| Window type | Description |
|
|
170
|
+
|---|---|
|
|
171
|
+
| `wall_time` | Events must occur within N seconds / minutes / hours. Format: `"5m"`, `"24h"`. |
|
|
172
|
+
| `session_chain` | Events may span N consecutive sessions, with max wall time. |
|
|
173
|
+
| `chain_depth` | Events linked via `evidence.upstream_chain` up to N hops. |
|
|
174
|
+
| `unbounded` | No window (use sparingly; primarily for static-analysis chains where time is irrelevant). |
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## False-positive considerations
|
|
179
|
+
|
|
180
|
+
Correlation rules have a multiplicative FP risk: P(FP) = P(FP_r1) ×
|
|
181
|
+
P(FP_r2) × ... × P(FP_rN), assuming independence. This makes
|
|
182
|
+
correlation rules ROBUSTLY HIGH PRECISION when the constituent
|
|
183
|
+
rules are individually high-precision.
|
|
184
|
+
|
|
185
|
+
But correlation also has a multiplicative complexity: the engine
|
|
186
|
+
maintains state across events, with bounded memory. Specification:
|
|
187
|
+
|
|
188
|
+
- Engines MUST set a per-correlation-rule maximum state size. If
|
|
189
|
+
exceeded, oldest pending matches are evicted.
|
|
190
|
+
- Engines MUST emit a `correlation_state_evicted` event when
|
|
191
|
+
eviction occurs (so audit chains know about lost detections).
|
|
192
|
+
- Engines MAY share state across correlation rules (e.g., index of
|
|
193
|
+
events by `agent.id`) for efficiency.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## ID numbering
|
|
198
|
+
|
|
199
|
+
Correlation rules use a distinct ID range:
|
|
200
|
+
|
|
201
|
+
- Atomic rules: `ATR-YYYY-NNNNN`
|
|
202
|
+
- Correlation rules: `ATR-COR-YYYY-NNNNN`
|
|
203
|
+
|
|
204
|
+
This prevents ID collision and lets downstream consumers easily
|
|
205
|
+
filter correlation events. The Numbering Authority issues both
|
|
206
|
+
ranges; correlation rules pass the same TSC review process.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Conformance gate
|
|
211
|
+
|
|
212
|
+
A correlation rule's CI gate has an additional check beyond the
|
|
213
|
+
atomic-rule gate:
|
|
214
|
+
|
|
215
|
+
- Engine MUST be able to load the rule (parse + validate).
|
|
216
|
+
- Engine MUST evaluate the correlation against a fixture event
|
|
217
|
+
stream included in the rule's `test_cases.true_positive_streams`.
|
|
218
|
+
- Engine MUST NOT fire on `test_cases.true_negative_streams`.
|
|
219
|
+
|
|
220
|
+
Fixture event streams are JSON Lines files in
|
|
221
|
+
`tests/correlation-streams/<rule-id>/`.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Example fixture stream (positive case for ATR-COR-2026-00001)
|
|
226
|
+
|
|
227
|
+
```jsonl
|
|
228
|
+
{"@timestamp":"2026-05-25T10:00:00Z","atr.event_id":"01927e2d-7b32-7c41-9e84-0001","atr.rule_id":"ATR-2026-00012","agent.id":"agt-abc","session.id":"sess-1","atr.matched_field":"agent_output","atr.category":"prompt-injection"}
|
|
229
|
+
{"@timestamp":"2026-05-25T10:00:30Z","atr.event_id":"01927e2d-7b32-7c41-9e84-0002","atr.rule_id":"ATR-2026-00115","agent.id":"agt-abc","session.id":"sess-1","atr.matched_field":"tool_call","atr.category":"tool-poisoning"}
|
|
230
|
+
{"@timestamp":"2026-05-25T10:01:00Z","atr.event_id":"01927e2d-7b32-7c41-9e84-0003","atr.rule_id":"ATR-2026-00345","agent.id":"agt-abc","session.id":"sess-1","atr.matched_field":"memory_write","atr.category":"context-exfiltration","memory.store_id":"mem-xyz"}
|
|
231
|
+
{"@timestamp":"2026-05-27T14:32:00Z","atr.event_id":"01927e2d-7b32-7c41-9e84-0004","atr.rule_id":"ATR-2026-00610","agent.id":"agt-abc","session.id":"sess-22","atr.matched_field":"agent_output","atr.category":"context-exfiltration"}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Engine MUST emit one correlation event after consuming all four
|
|
235
|
+
above, referencing all four event IDs in `evidence.upstream_chain`
|
|
236
|
+
of the output event.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Example fixture stream (negative case)
|
|
241
|
+
|
|
242
|
+
Same as above but with different `agent.id` values across events.
|
|
243
|
+
Engine MUST NOT correlate (join key mismatch).
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Performance bounds
|
|
248
|
+
|
|
249
|
+
Correlation evaluation must remain bounded:
|
|
250
|
+
|
|
251
|
+
- **Memory:** O(N events × M correlation rules × K state per rule).
|
|
252
|
+
Engines MUST evict oldest state when memory budget exceeded.
|
|
253
|
+
- **CPU per event:** O(M correlation rules), with O(1) state update
|
|
254
|
+
per rule on average. Catastrophic-backtracking is forbidden in
|
|
255
|
+
correlation logic.
|
|
256
|
+
- **Latency:** Correlation evaluation MUST NOT block atomic-rule
|
|
257
|
+
emission. Atomic events emit immediately; correlation events
|
|
258
|
+
emit on chain completion.
|
|
259
|
+
|
|
260
|
+
These bounds are guidelines; specific deployment SLAs (e.g., <100ms
|
|
261
|
+
p99 per event) belong to the engine's deployment specification, not
|
|
262
|
+
the spec.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Versioning
|
|
267
|
+
|
|
268
|
+
Same versioning as atomic rules: SemVer with PATCH for backward-
|
|
269
|
+
compatible additions, MINOR for spec-relevant changes, MAJOR for
|
|
270
|
+
breaking changes. v1.0 is the initial release.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## References
|
|
275
|
+
|
|
276
|
+
- Sigma Correlation Rules Specification: https://github.com/SigmaHQ/sigma-specification/blob/main/specification/sigma-correlation-rules-specification.md
|
|
277
|
+
- Sigma rule design lessons: https://sigmahq.io/docs/guide/about.html
|
|
278
|
+
- A2A delegation patterns: https://datatracker.ietf.org/doc/draft-ni-a2a-ai-agent-security-requirements/
|
|
279
|
+
- SpAIware (memory-poisoning persistence): https://www.sciencedirect.com/science/article/abs/pii/S0167739X25002894
|
|
280
|
+
- ATR Event Format Spec v1.0: spec/atr-event-v1.0.md
|
|
281
|
+
- ATR Rule Format Spec v1.0: ATR-SPEC-v1.md
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# ATR Event Format v1.0 — OpenTelemetry-aligned
|
|
2
|
+
|
|
3
|
+
> **STATUS: PROPOSED v1.0 — NOT YET RATIFIED.** This specification describes
|
|
4
|
+
> a target event format for community comment. The current TypeScript production
|
|
5
|
+
> engine continues to emit its existing event shape. Adopters should NOT
|
|
6
|
+
> migrate to this format until ratification. See `STANDARDIZATION-STATUS.md`
|
|
7
|
+
> for full status.
|
|
8
|
+
|
|
9
|
+
**Status:** Draft for AEP-002 ratification — NOT RATIFIED
|
|
10
|
+
**Date:** 2026-05-25
|
|
11
|
+
**License:** CC BY 4.0
|
|
12
|
+
**Required by (on ratification):** Conformant engine output, downstream SIEM/SOAR ingestion, EU AI Act Article 50 evidence chains
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Purpose
|
|
17
|
+
|
|
18
|
+
When a conformant ATR engine fires a rule, it emits an **event**.
|
|
19
|
+
This document specifies the event format.
|
|
20
|
+
|
|
21
|
+
Three requirements forced the design:
|
|
22
|
+
|
|
23
|
+
1. **OpenTelemetry alignment.** Existing agent-observability stacks
|
|
24
|
+
(LangSmith, Logfire, Datadog APM, Honeycomb) already ingest OTEL
|
|
25
|
+
spans. An ATR event that maps cleanly into an OTEL span attribute
|
|
26
|
+
set is consumable by these stacks zero-modification.
|
|
27
|
+
|
|
28
|
+
2. **EU AI Act Article 50 evidence.** Article 50 obligations (apply
|
|
29
|
+
2 August 2026) require deployer-side evidence of AI interaction.
|
|
30
|
+
ATR events must carry sufficient identity + provenance + signature
|
|
31
|
+
data to land in an audit binder without supplementary munging.
|
|
32
|
+
|
|
33
|
+
3. **NIST AI RMF MEASURE function.** OSCAL assessment-result format
|
|
34
|
+
requires structured observation records. ATR events must be
|
|
35
|
+
one-to-one mappable to OSCAL `observation` entries so audit
|
|
36
|
+
pipelines (AWS Config, RegScale, Centraleyes) can ingest natively.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Event JSON Schema reference
|
|
41
|
+
|
|
42
|
+
Machine-readable schema: `spec/schema/event.schema.json`.
|
|
43
|
+
|
|
44
|
+
This document is the normative prose specification. In case of
|
|
45
|
+
discrepancy between the two, **the prose spec governs**; the JSON
|
|
46
|
+
Schema must be corrected to match (via AEP).
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Required fields
|
|
51
|
+
|
|
52
|
+
All conformant engines MUST emit these fields on every event.
|
|
53
|
+
|
|
54
|
+
### Identification
|
|
55
|
+
|
|
56
|
+
| Field | Type | Description |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| `@timestamp` | RFC 3339 UTC string | When the rule fired. |
|
|
59
|
+
| `atr.event_id` | UUID v7 (time-ordered) | Globally unique event identifier. |
|
|
60
|
+
| `atr.spec_version` | string | ATR spec version this event conforms to. v1.0 = `"1.0"`. |
|
|
61
|
+
| `atr.engine_id` | string | Identifier of the engine that produced the event. Format: `<vendor>/<product>/<version>`. Example: `atr/typescript-reference/3.1.0`, `cisco/ai-defense/2.4.1`, `microsoft/agent-governance-toolkit/2026.05`. |
|
|
62
|
+
|
|
63
|
+
### Rule attribution
|
|
64
|
+
|
|
65
|
+
| Field | Type | Description |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `atr.rule_id` | string | The matched rule ID. Format per ATR Rule Format Spec § 2: `ATR-YYYY-NNNNN` for canonical rules, `ATR-XX-YYYY-NNNNN` for sovereign-prefixed rules. |
|
|
68
|
+
| `atr.rule_version` | integer | The `rule_version` field from the matched rule's YAML. |
|
|
69
|
+
| `atr.rule_status` | enum | `draft` / `experimental` / `stable` / `deprecated` per rule's `status` field. |
|
|
70
|
+
| `atr.rule_maturity` | enum | `draft` / `test` / `stable` per rule's `maturity` field. |
|
|
71
|
+
| `atr.rule_review_status` | enum | `unreviewed` / `community_reviewed` / `tsc_approved` per governance/CHARTER.md § 5. |
|
|
72
|
+
|
|
73
|
+
### Detection result
|
|
74
|
+
|
|
75
|
+
| Field | Type | Description |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `atr.severity` | enum | `critical` / `high` / `medium` / `low` / `informational` from matched rule. |
|
|
78
|
+
| `atr.category` | string | Rule's top-level category from `spec/category-registry/v1.0.yaml`, OR `unknown` if engine encountered unregistered category (per forward-compatibility rule). |
|
|
79
|
+
| `atr.subcategory` | string \| null | Optional finer classification from rule's `tags.subcategory`. |
|
|
80
|
+
| `atr.confidence` | number 0.0-1.0 | Engine's confidence in the match. For deterministic regex matches: `1.0`. For probabilistic / ML-judge matches (future): per the rule's declared semantics. |
|
|
81
|
+
| `atr.matched_field` | enum | Which field triggered the match. One of: `user_input`, `agent_output`, `tool_call`, `tool_response`, `skill_content`, `mcp_exchange`, `memory_write`, `multi_agent_message`. |
|
|
82
|
+
| `atr.matched_value_redacted` | string | The matched portion of the input. **MUST be redacted by default** — sensitive content (api keys, PII) replaced with `[REDACTED:type:length]`. Engines MAY disable redaction in `forensic_mode`, which MUST be explicitly enabled per deployment. |
|
|
83
|
+
|
|
84
|
+
### Agent + session context
|
|
85
|
+
|
|
86
|
+
| Field | Type | Description |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `agent.id` | string | Stable identifier of the agent instance. |
|
|
89
|
+
| `agent.platform` | string | Agent platform name. Common values: `claude_code`, `cursor`, `openclaw`, `codex_cli`, `windsurf`, `gemini_cli`, `cline`, `continue`, `langchain`, `autogen`, `crewai`. Engines SHOULD use this canonical set; unknown values are accepted. |
|
|
90
|
+
| `agent.platform_version` | string \| null | Version of the agent platform. |
|
|
91
|
+
| `session.id` | string | Stable identifier of the agent session. |
|
|
92
|
+
| `service.name` | string | OTEL semantic convention. The service that hosts the agent. |
|
|
93
|
+
| `service.version` | string | OTEL semantic convention. |
|
|
94
|
+
|
|
95
|
+
### Response
|
|
96
|
+
|
|
97
|
+
| Field | Type | Description |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `atr.response_action` | array of enum | Recommended response actions from rule's `response.actions`. Subset of: `block_input`, `block_output`, `redact`, `alert`, `snapshot`, `quarantine`, `terminate_session`. |
|
|
100
|
+
| `atr.response_taken` | array of enum | What the engine / agent platform actually did. May differ from recommended if local policy overrides. |
|
|
101
|
+
| `atr.response_threshold_met` | boolean | Whether the rule's `auto_response_threshold` was met. |
|
|
102
|
+
|
|
103
|
+
### Evidence + provenance
|
|
104
|
+
|
|
105
|
+
| Field | Type | Description |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| `evidence.observation_id` | UUID | Identifier for cross-reference into OSCAL `observation` records. Same as `atr.event_id` recommended unless an existing system has its own. |
|
|
108
|
+
| `evidence.signature` | base64 ed25519 | Signature over the canonical JSON encoding of this event. Signed by the engine's deployment-time key. Required for EU AI Act Article 50 evidence chains and NIST AI RMF audit pipelines. May be omitted in `dev_mode` deployments. |
|
|
109
|
+
| `evidence.signature_key_id` | string | Identifier of the signing key. SHOULD reference a key registered with the deployer's CA. |
|
|
110
|
+
| `evidence.upstream_chain` | array \| null | When this event is part of a multi-agent chain (A2A), the upstream event IDs that led to this detection. Enables forensic chain reconstruction. |
|
|
111
|
+
|
|
112
|
+
## Optional fields
|
|
113
|
+
|
|
114
|
+
### Tool call detail (when `atr.matched_field == "tool_call"` or `"tool_response"`)
|
|
115
|
+
|
|
116
|
+
| Field | Type |
|
|
117
|
+
|---|---|
|
|
118
|
+
| `tool.name` | string |
|
|
119
|
+
| `tool.args` | object (redacted) |
|
|
120
|
+
| `tool.privilege_class` | string |
|
|
121
|
+
| `tool.target_jurisdiction` | ISO 3166-1 alpha-2 \| `und` |
|
|
122
|
+
|
|
123
|
+
The `tool.target_jurisdiction` field is for EU AI Act + GDPR cross-
|
|
124
|
+
border data-flow audit. Required when the engine knows where the
|
|
125
|
+
tool's effect lands (e.g., an `s3.put` tool call where bucket region
|
|
126
|
+
is known).
|
|
127
|
+
|
|
128
|
+
### Multi-agent chain detail (when `atr.matched_field == "multi_agent_message"`)
|
|
129
|
+
|
|
130
|
+
| Field | Type |
|
|
131
|
+
|---|---|
|
|
132
|
+
| `agent.from_id` | string |
|
|
133
|
+
| `agent.to_id` | string |
|
|
134
|
+
| `agent.delegation_chain` | array of {agent_id, capability_grant, granted_by} |
|
|
135
|
+
| `agent.identity_assertion` | JWT \| null |
|
|
136
|
+
|
|
137
|
+
The `agent.identity_assertion` field anticipates the IETF AI agent
|
|
138
|
+
auth drafts (`draft-klrc-aiagent-auth-00`, `draft-ni-a2a-ai-agent-
|
|
139
|
+
security-requirements-01`) — once those reach RFC, the field carries
|
|
140
|
+
the canonical assertion format.
|
|
141
|
+
|
|
142
|
+
### Memory write detail (when `atr.matched_field == "memory_write"`)
|
|
143
|
+
|
|
144
|
+
| Field | Type |
|
|
145
|
+
|---|---|
|
|
146
|
+
| `memory.store_id` | string |
|
|
147
|
+
| `memory.write_key` | string |
|
|
148
|
+
| `memory.persistence_scope` | enum | `session` \| `user` \| `agent_global` |
|
|
149
|
+
|
|
150
|
+
This captures the SpAIware (Rehberger 2026) attack class — memory-
|
|
151
|
+
poisoning persistence across sessions.
|
|
152
|
+
|
|
153
|
+
### Sovereign attestation (when rule ID is sovereign-prefixed)
|
|
154
|
+
|
|
155
|
+
| Field | Type |
|
|
156
|
+
|---|---|
|
|
157
|
+
| `atr.sovereign_attestation` | object {signer, signature, ca_chain} |
|
|
158
|
+
|
|
159
|
+
Required when the matched rule carries a sovereign prefix
|
|
160
|
+
(`ATR-DE-`, `ATR-SG-`, `ATR-TW-`, etc.) per governance/CHARTER.md § 8.2.
|
|
161
|
+
Engines MUST validate the attestation against the TSC-maintained
|
|
162
|
+
sovereign key registry before honoring the event's elevated trust.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Forbidden fields
|
|
167
|
+
|
|
168
|
+
The following MUST NOT appear in an ATR event under any circumstance:
|
|
169
|
+
|
|
170
|
+
- Raw user PII (names, addresses, phone numbers). PII detected by the
|
|
171
|
+
rule is referenced via `atr.matched_value_redacted` with type and
|
|
172
|
+
length only.
|
|
173
|
+
- Raw API keys / credentials / tokens. Always redacted.
|
|
174
|
+
- Full prompt / response text in `matched_value_redacted`. Only the
|
|
175
|
+
matched fragment, redacted.
|
|
176
|
+
|
|
177
|
+
Engines that operate in `forensic_mode` MAY emit additional fields
|
|
178
|
+
for in-flight audit, but these MUST be explicitly enabled per
|
|
179
|
+
deployment AND clearly distinguished in event metadata.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## OpenTelemetry mapping (informative)
|
|
184
|
+
|
|
185
|
+
For OTEL ingestion, ATR events map to spans:
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
OpenTelemetry Span ATR Event Field
|
|
189
|
+
───────────────────── ──────────────────────────
|
|
190
|
+
span.name → "atr.detection." + atr.category
|
|
191
|
+
span.kind → "INTERNAL"
|
|
192
|
+
span.start_time → @timestamp
|
|
193
|
+
span.duration → engine's evaluation time
|
|
194
|
+
span.status.code → "ERROR" if atr.severity in [critical, high]
|
|
195
|
+
"OK" otherwise
|
|
196
|
+
span.attributes.atr.* → all atr.* fields
|
|
197
|
+
span.attributes.agent.* → all agent.* fields
|
|
198
|
+
span.attributes.session.id → session.id
|
|
199
|
+
span.attributes.service.name → service.name
|
|
200
|
+
span.events → [{name: "atr.rule_matched",
|
|
201
|
+
attributes: {rule_id, matched_field}}]
|
|
202
|
+
span.resource.attributes → service.name, service.version
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
This mapping is informative; downstream tools may consume the raw
|
|
206
|
+
ATR event JSON without OTEL conversion.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## OSCAL assessment-result mapping (informative)
|
|
211
|
+
|
|
212
|
+
For NIST AI RMF + OSCAL pipelines, each ATR event maps to one OSCAL
|
|
213
|
+
`observation`:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
OSCAL observation ATR Event Field
|
|
217
|
+
────────────────── ────────────────────
|
|
218
|
+
uuid → evidence.observation_id (UUID v7)
|
|
219
|
+
collected → @timestamp
|
|
220
|
+
title → "ATR rule " + atr.rule_id + " matched"
|
|
221
|
+
description → human-readable from rule's `description` field
|
|
222
|
+
methods → ["AUTOMATED"]
|
|
223
|
+
types → ["finding"]
|
|
224
|
+
subjects → [{type: "component",
|
|
225
|
+
subject-uuid: agent.id}]
|
|
226
|
+
relevant-evidence → [{href: link to atr.event_id,
|
|
227
|
+
description: "ATR detection event"}]
|
|
228
|
+
remarks → free-form, may include atr.response_taken
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
This mapping enables zero-write integration with OSCAL profile-based
|
|
232
|
+
audit. ATR events stream into OSCAL assessment-result format
|
|
233
|
+
without manual munging.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Example event
|
|
238
|
+
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"@timestamp": "2026-05-25T08:14:32.182Z",
|
|
242
|
+
"atr.event_id": "01927e2d-7b32-7c41-9e84-3b8f2a1e9c54",
|
|
243
|
+
"atr.spec_version": "1.0",
|
|
244
|
+
"atr.engine_id": "atr/typescript-reference/3.1.0",
|
|
245
|
+
"atr.rule_id": "ATR-2026-00525",
|
|
246
|
+
"atr.rule_version": 1,
|
|
247
|
+
"atr.rule_status": "stable",
|
|
248
|
+
"atr.rule_maturity": "test",
|
|
249
|
+
"atr.rule_review_status": "community_reviewed",
|
|
250
|
+
"atr.severity": "critical",
|
|
251
|
+
"atr.category": "skill-compromise",
|
|
252
|
+
"atr.subcategory": "supply-chain-worm",
|
|
253
|
+
"atr.confidence": 1.0,
|
|
254
|
+
"atr.matched_field": "skill_content",
|
|
255
|
+
"atr.matched_value_redacted": "[REDACTED:identifier:18] persistence daemon installed",
|
|
256
|
+
"atr.response_action": ["block_input", "alert", "snapshot"],
|
|
257
|
+
"atr.response_taken": ["block_input", "alert"],
|
|
258
|
+
"atr.response_threshold_met": true,
|
|
259
|
+
"agent.id": "agt-customer-12345-claude-prod-01",
|
|
260
|
+
"agent.platform": "claude_code",
|
|
261
|
+
"agent.platform_version": "1.8.4",
|
|
262
|
+
"session.id": "sess-2026-05-25-bk9a8x",
|
|
263
|
+
"service.name": "panguard-scan",
|
|
264
|
+
"service.version": "1.4.13",
|
|
265
|
+
"evidence.observation_id": "01927e2d-7b32-7c41-9e84-3b8f2a1e9c54",
|
|
266
|
+
"evidence.signature": "MEQCIBdJpL3zEoXxKj9F/qqM8DxFJp7Q...",
|
|
267
|
+
"evidence.signature_key_id": "kid:panguard-scan-prod-2026-05",
|
|
268
|
+
"evidence.upstream_chain": null
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Versioning
|
|
275
|
+
|
|
276
|
+
This spec is at v1.0. Field additions are minor-version-compatible
|
|
277
|
+
(v1.x) and do not break conformant consumers. Field removals or
|
|
278
|
+
semantic changes are major-version (v2.0) and require an AEP.
|
|
279
|
+
|
|
280
|
+
Conformant engines MUST emit `atr.spec_version` so consumers can
|
|
281
|
+
adapt to future versions.
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## References
|
|
286
|
+
|
|
287
|
+
- OpenTelemetry semantic conventions: https://opentelemetry.io/docs/specs/semconv/
|
|
288
|
+
- OSCAL Assessment Results: https://pages.nist.gov/OSCAL/concepts/layer/assessment/assessment-results/
|
|
289
|
+
- EU AI Act Article 50: https://artificialintelligenceact.eu/article/50/
|
|
290
|
+
- UUID v7 (time-ordered): https://datatracker.ietf.org/doc/rfc9562/
|
|
291
|
+
- Ed25519 signing: https://datatracker.ietf.org/doc/rfc8032/
|
|
292
|
+
- IETF AI agent auth draft: https://datatracker.ietf.org/doc/html/draft-klrc-aiagent-auth-00
|
|
293
|
+
- ATR Rule Format Spec v1.0: ATR-SPEC-v1.md
|
|
294
|
+
- ATR Category Registry v1.0: spec/category-registry/v1.0.yaml
|