agent-threat-rules 3.5.11 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +265 -34
- package/dist/action-executor.d.ts +44 -1
- package/dist/action-executor.d.ts.map +1 -1
- package/dist/action-executor.js +41 -2
- package/dist/action-executor.js.map +1 -1
- package/dist/cli/scan-handler.d.ts +9 -0
- package/dist/cli/scan-handler.d.ts.map +1 -1
- package/dist/cli/scan-handler.js +12 -2
- package/dist/cli/scan-handler.js.map +1 -1
- package/dist/cli.js +199 -20
- package/dist/cli.js.map +1 -1
- package/dist/converters/sarif.d.ts.map +1 -1
- package/dist/converters/sarif.js +78 -13
- package/dist/converters/sarif.js.map +1 -1
- package/dist/corpus/security-content.d.ts +76 -0
- package/dist/corpus/security-content.d.ts.map +1 -0
- package/dist/corpus/security-content.js +146 -0
- package/dist/corpus/security-content.js.map +1 -0
- package/dist/corpus-event.d.ts +368 -0
- package/dist/corpus-event.d.ts.map +1 -0
- package/dist/corpus-event.js +592 -0
- package/dist/corpus-event.js.map +1 -0
- package/dist/enforcement.d.ts +233 -0
- package/dist/enforcement.d.ts.map +1 -0
- package/dist/enforcement.js +316 -0
- package/dist/enforcement.js.map +1 -0
- package/dist/engine.d.ts +18 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +98 -20
- package/dist/engine.js.map +1 -1
- package/dist/eval/eval-harness.d.ts +37 -0
- package/dist/eval/eval-harness.d.ts.map +1 -1
- package/dist/eval/eval-harness.js +95 -22
- package/dist/eval/eval-harness.js.map +1 -1
- package/dist/eval/index.d.ts +2 -1
- package/dist/eval/index.d.ts.map +1 -1
- package/dist/eval/index.js +1 -0
- package/dist/eval/index.js.map +1 -1
- package/dist/eval/metrics.d.ts +28 -0
- package/dist/eval/metrics.d.ts.map +1 -1
- package/dist/eval/metrics.js +4 -2
- package/dist/eval/metrics.js.map +1 -1
- package/dist/eval/run-hackaprompt-benchmark.js +4 -2
- package/dist/eval/run-hackaprompt-benchmark.js.map +1 -1
- package/dist/eval/run-pint-benchmark.js +10 -2
- package/dist/eval/run-pint-benchmark.js.map +1 -1
- package/dist/eval/skill-benchmark.d.ts +2 -0
- package/dist/eval/skill-benchmark.d.ts.map +1 -1
- package/dist/eval/skill-benchmark.js +5 -2
- package/dist/eval/skill-benchmark.js.map +1 -1
- package/dist/hook-handler.d.ts +98 -3
- package/dist/hook-handler.d.ts.map +1 -1
- package/dist/hook-handler.js +119 -12
- package/dist/hook-handler.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts +13 -2
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +22 -5
- package/dist/mcp-server.js.map +1 -1
- package/dist/quality/action-eligibility.d.ts +263 -0
- package/dist/quality/action-eligibility.d.ts.map +1 -0
- package/dist/quality/action-eligibility.js +365 -0
- package/dist/quality/action-eligibility.js.map +1 -0
- package/dist/quality/adapters/atr.d.ts.map +1 -1
- package/dist/quality/adapters/atr.js +8 -2
- package/dist/quality/adapters/atr.js.map +1 -1
- package/dist/quality/compute-confidence.d.ts.map +1 -1
- package/dist/quality/compute-confidence.js +14 -5
- package/dist/quality/compute-confidence.js.map +1 -1
- package/dist/quality/index.d.ts +2 -0
- package/dist/quality/index.d.ts.map +1 -1
- package/dist/quality/index.js +2 -0
- package/dist/quality/index.js.map +1 -1
- package/dist/quality/quality-gate.d.ts.map +1 -1
- package/dist/quality/quality-gate.js +9 -1
- package/dist/quality/quality-gate.js.map +1 -1
- package/dist/quality/validate-maturity.d.ts.map +1 -1
- package/dist/quality/validate-maturity.js +24 -5
- package/dist/quality/validate-maturity.js.map +1 -1
- package/dist/quality/wild-measurement.d.ts +107 -0
- package/dist/quality/wild-measurement.d.ts.map +1 -0
- package/dist/quality/wild-measurement.js +139 -0
- package/dist/quality/wild-measurement.js.map +1 -0
- package/dist/rule-scaffolder.d.ts.map +1 -1
- package/dist/rule-scaffolder.js +9 -2
- package/dist/rule-scaffolder.js.map +1 -1
- package/dist/types.d.ts +13 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -3
- package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +8 -9
- package/rules/agent-manipulation/ATR-2026-00032-goal-hijacking.yaml +7 -8
- package/rules/agent-manipulation/ATR-2026-00074-cross-agent-privilege-escalation.yaml +9 -7
- package/rules/agent-manipulation/ATR-2026-00076-inter-agent-message-spoofing.yaml +3 -4
- package/rules/agent-manipulation/ATR-2026-00077-human-trust-exploitation.yaml +12 -6
- package/rules/agent-manipulation/ATR-2026-00108-consensus-sybil-attack.yaml +4 -5
- package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +2 -3
- package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +3 -4
- package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +2 -3
- package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +2 -3
- package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +4 -5
- package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +3 -4
- package/rules/agent-manipulation/ATR-2026-00164-skill-scope-hijack.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00268-tense-framing-bypass.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00269-fitd-escalation.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00271-grandma-roleplay-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00273-dan-developer-mode-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00287-threaten-json-coercive-output-threat.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00288-false-premise-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00302-anti-dan-inverted-filter-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00303-devmode-ranti-profanity-coercion.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00304-chatgpt-image-unlocker-markdown-injection.yaml +4 -4
- package/rules/agent-manipulation/ATR-2026-00305-dan-mode-ablation-benchmark-coercion.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00306-autodan-genetic-jailbreak-suffix.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00307-inthewild-jailbreak-corpus-signature.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00314-amoral-unfiltered-custom-persona-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00317-free-of-restrictions-named-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00318-moralizing-rant-then-unfiltered-bypass.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00319-developer-mode-dual-response-format.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00320-opposite-day-boolean-opposite-machine.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00322-fictional-world-format-override-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00323-dual-persona-simulation-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00324-neurosemantical-inversitis-disease-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00325-bob-hypothetical-unrestricted-chatbot.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00326-fake-developer-authority-chatdan-override.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00327-ai-ethics-law-bypass-declaration.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00329-no-withhold-factual-resource-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00331-terminal-cli-harmful-function-simulator.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00332-hacker-chan-culture-offensive-ai-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00333-disease-animal-dual-ai-chatbot.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00334-two-entity-token-splitting-game.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00335-key-value-template-persona-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00336-brm-false-information-machine-persona.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00337-obfuscated-system-announcement-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00338-persongpt-hash-prefix-activation.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00339-bom-boolean-opposite-machine-persona-claim.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00340-h4x-amoral-unfiltered-character.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00341-char-rules-shortform-persona-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00342-unicode-encoding-obfuscation-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00343-lie-truth-dual-personality-uncensored.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00344-alt-ai-same-capabilities-no-restrictions.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00345-nlp-based-os-fictional-terminal-override.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00346-jailbreak-emoji-unlock-dual-format.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00347-yin-yang-hidden-knowledge-hidden-human-sim.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00348-arc-autonomous-real-calculation-rulebreaker.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00349-hgttg-hitchhikers-guide-no-restriction-oracle.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00350-black-alert-no-ethics-writing-assistant.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00351-dan-ofkilter-sms-abbreviated-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00353-dual-chatgpt-dan-opposite-personality-format.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00354-reverse-harm-regardless-oracle-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00355-ugh-anti-human-nefarious-ai-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00356-google-gato-lamda-exploit-generation-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00357-antifm-hate-violence-persona-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00358-cumgpt-explicit-adult-named-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00360-chj-carousel-clyde-no-ethics-bird.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00361-alter-ego-honesty-dual-consciousness-bypass.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00362-fictional-unfiltered-ai-comparison-jailbreak.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00363-rephrase-criminal-activity-second-person.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00364-dr-al-villain-plan-template-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00365-reservoir-dogs-coercive-interrogation-roleplay.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00366-sneaky-pete-warp-facts-persona.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00368-prompt-browser-token-limit-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00369-gptx-starwars-unlimited-knowledge-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00370-addi-german-dictator-propaganda-roleplay.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00371-ai-political-bias-manipulation.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00372-fictional-cia-secret-files-story-extraction.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00374-role-placeholder-persona-template-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00375-character-description-rpg-explicit-template.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00376-identity-command-real-person-persona-injection.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00377-jailbreak-keyword-targetlanguage-template.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00379-lie-permission-logical-trap-jailbreak.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00380-fake-citation-biased-information-mandate.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00381-dan-story-narrative-continuation-prefix.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00383-cynical-sarcasm-ai-persona-bypass.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00384-protect-me-from-indirect-harm-tutorial.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00385-gigachad-dominant-aggressive-persona.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00386-daddy-sycophancy-manipulation-mandate.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00387-nsfw-character-sheet-generation-unlock.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00388-opposite-reply-omniscient-game.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00389-terminal-custom-ruleset-injection.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00391-persona-conditional-harm-unlock.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00392-authority-persona-violence-study-extraction.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00402-grandma-roleplay-harmful-substance-synthesis.yaml +4 -4
- package/rules/agent-manipulation/ATR-2026-00404-goodside-threat-json-death-coercion.yaml +2 -2
- package/rules/agent-manipulation/ATR-2026-00406-doctor-xml-policy-puppetry-interaction-config.yaml +3 -3
- package/rules/agent-manipulation/ATR-2026-00416-litellm-mcp-unauthenticated-server-registration.yaml +4 -4
- package/rules/agent-manipulation/ATR-2026-00417-librechat-mcp-stdio-injection.yaml +4 -4
- package/rules/agent-manipulation/ATR-2026-00418-weknora-mcp-config-rce.yaml +4 -4
- package/rules/agent-manipulation/ATR-2026-00430-nl-trust-escalation-impersonation.yaml +7 -4
- package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +4 -4
- package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +4 -4
- package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +74 -45
- package/rules/agent-manipulation/ATR-2026-02105-prototype-pollution-constructor-prototype-bypass.yaml +2 -3
- package/rules/agent-manipulation/ATR-2026-02231-second-person-death-threat-coercion.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-00020-system-prompt-leak.yaml +12 -10
- package/rules/context-exfiltration/ATR-2026-00021-api-key-exposure.yaml +10 -8
- package/rules/context-exfiltration/ATR-2026-00075-agent-memory-manipulation.yaml +3 -4
- package/rules/context-exfiltration/ATR-2026-00102-disguised-analytics-exfiltration.yaml +3 -4
- package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +6 -4
- package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +6 -4
- package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +7 -7
- package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +6 -4
- package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-00150-credential-in-tool-response.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-00152-obfuscated-credential-leak.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-00162-skill-credential-exfil-combo.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00201-credential-pipe-exfiltration.yaml +7 -4
- package/rules/context-exfiltration/ATR-2026-00212-mcp-atlassian-credential-leak.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00261-markdown-image-exfiltration.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00274-api-key-generation-request.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-00275-system-prompt-training-data-extraction.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-00290-divergence-repeat-word-training-extraction.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00291-biometric-surveillance-personal-data-request.yaml +5 -2
- package/rules/context-exfiltration/ATR-2026-00293-educational-records-personal-data-request.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00294-financial-pii-personal-data-request.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00295-medical-pii-personal-data-request.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00405-markdown-image-url-exfiltration-xss.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00411-apikey-generation-completion-request.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00421-nl-covert-conversation-exfiltration.yaml +8 -5
- package/rules/context-exfiltration/ATR-2026-00422-nl-credential-disclosure.yaml +7 -4
- package/rules/context-exfiltration/ATR-2026-00423-nl-sensitive-file-disclosure.yaml +7 -4
- package/rules/context-exfiltration/ATR-2026-00424-nl-system-prompt-leak.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00426-nl-output-injection-credential-leak.yaml +6 -3
- package/rules/context-exfiltration/ATR-2026-00431-chatbox-history-exfiltration-prompt-injection.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00449-spring-ai-chatmemory-cross-user-leak.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +5 -7
- package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +16 -9
- package/rules/context-exfiltration/ATR-2026-00566-librechat-is-a-chatgpt-clone-with-additi.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00569-agent-mcp-path-traversal-arbitrary-file-access.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00571-xss-in-agent-mcp-rendered-output.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00574-semantic-paraphrased-context-extraction.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-00578-zen-mcp-path-traversal-blacklist-bypass.yaml +5 -6
- package/rules/context-exfiltration/ATR-2026-00580-mcp-session-id-token-in-url-query.yaml +5 -6
- package/rules/context-exfiltration/ATR-2026-00583-mcp-env-secret-file-read-without-consent.yaml +5 -6
- package/rules/context-exfiltration/ATR-2026-00702-ipi-credential-exfil-via-agent-action.yaml +9 -4
- package/rules/context-exfiltration/ATR-2026-00703-ipi-financial-data-exfil-indirect.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00704-ipi-medical-genetic-data-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00705-ipi-location-address-browsing-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00706-ipi-physical-biometric-exfil.yaml +12 -4
- package/rules/context-exfiltration/ATR-2026-00707-ipi-file-exfil-with-destroy-or-tamper.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00850-indirect-pi-credential-exfil-email.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00851-indirect-pi-financial-payment-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00852-indirect-pi-medical-record-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00853-indirect-pi-genetic-data-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00854-indirect-pi-location-data-exfil.yaml +9 -5
- package/rules/context-exfiltration/ATR-2026-00855-indirect-pi-browsing-history-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00856-indirect-pi-address-pii-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-00857-indirect-pi-cloud-file-exfil.yaml +9 -5
- package/rules/context-exfiltration/ATR-2026-00858-indirect-pi-exfil-and-destroy.yaml +10 -6
- package/rules/context-exfiltration/ATR-2026-00859-rag-injected-pii-exfil.yaml +9 -5
- package/rules/context-exfiltration/ATR-2026-00860-indirect-pi-financial-transfer-hijack.yaml +9 -5
- package/rules/context-exfiltration/ATR-2026-00861-indirect-pi-crypto-transfer-hijack.yaml +9 -5
- package/rules/context-exfiltration/ATR-2026-00862-indirect-pi-mfa-code-exfil.yaml +9 -5
- package/rules/context-exfiltration/ATR-2026-00863-shell-injection-data-exfil.yaml +9 -5
- package/rules/context-exfiltration/ATR-2026-01450-svg-onload-xss-injection.yaml +33 -5
- package/rules/context-exfiltration/ATR-2026-01451-img-onerror-xss-injection.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01452-obfuscated-javascript-xss.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01453-markdown-image-base64-exfil-carrier.yaml +8 -3
- package/rules/context-exfiltration/ATR-2026-01454-direct-markdown-exfil-payload.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01455-new-instructions-injection-marker.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-01456-debug-cli-mode-sysprompt-extraction.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01457-sysprompt-completion-clone-attack.yaml +29 -4
- package/rules/context-exfiltration/ATR-2026-01458-compare-bots-sysprompt-fishing.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01459-variable-clone-sysprompt-technique.yaml +8 -3
- package/rules/context-exfiltration/ATR-2026-01460-json-format-sysprompt-extraction.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01461-foreign-language-sysprompt-request.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-01463-imend-imsystem-prompt-injection-format.yaml +2 -2
- package/rules/context-exfiltration/ATR-2026-01464-indirect-pi-sysprompt-action-hijack.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01605-ssrf-aws-metadata-endpoint.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01606-ssrf-internal-network-scan.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01607-ssrf-localhost-service-probe.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01608-ssrf-file-scheme-local-read.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01753-ransom-email-exfil-delete-extortion.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01754-ransom-file-cloud-exfil-delete-extortion.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01770-semantic-pii-credential-extraction.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01772-semantic-internal-state-recon.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01807-asb-bulk-data-exfil-external.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01862-llmail-email-tool-exfil-confirmation.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01863-llmail-post-summary-exfil-directive.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01864-llmail-obfuscated-exfil-address.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01890-file-exfiltration.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01891-surveillance-exfiltration.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01892-env-exfiltration.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01893-system-recon-exfiltration.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01894-cookie-theft.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01895-contact-exfiltration.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-01924-system-instruction-extraction-reformat.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-01929-mcp-unauthenticated-transport-token-fallback.yaml +5 -6
- package/rules/context-exfiltration/ATR-2026-01946-cloud-metadata-ssrf-ip-encoding-bypass.yaml +5 -6
- package/rules/context-exfiltration/ATR-2026-01948-netlicensing-mcp-product-number-path-traversal-token-leak.yaml +3 -4
- package/rules/context-exfiltration/ATR-2026-01957-m365-copilot-searchleak-open-redirect-exfil.yaml +3 -4
- package/rules/context-exfiltration/ATR-2026-01961-meta-ads-mcp-unauth-token-leak.yaml +3 -4
- package/rules/context-exfiltration/ATR-2026-01964-langchain-gmailtoolkit-indirect-prompt-injection-email-exfil.yaml +3 -4
- package/rules/context-exfiltration/ATR-2026-01984-mcp-server-kubernetes-kubectl-generic-token-exfil.yaml +4 -5
- package/rules/context-exfiltration/ATR-2026-01988-t1005-agent-local-data-staging-exfil.yaml +3 -3
- package/rules/context-exfiltration/ATR-2026-02017-secret-key-exfiltration-request.yaml +3 -4
- package/rules/context-exfiltration/ATR-2026-02026-oblique-sysprompt-extraction-transform.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02104-media-directive-tool-result-file-exfil.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02107-ssrf-internal-hostname-domain-allowlist-bypass.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02121-mixed-encoding-lfi-file-scheme-tool-argument.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02122-single-level-traversal-sensitive-config-file.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02140-ssrf-ipv6-hex-encoded-cloud-metadata-bypass.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02190-dns-exfiltration-ping-dig-encoded-subdomain.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02250-attachment-upload-tool-arbitrary-file-read.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02262-env-resolution-credential-exfil.yaml +4 -4
- package/rules/context-exfiltration/ATR-2026-02304-preapproved-domain-encoded-path-exfil.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02351-wildcard-dns-ssrf-hostname-ip-encoding-bypass.yaml +2 -3
- package/rules/context-exfiltration/ATR-2026-02373-langsmith-prompt-manifest-baseurl-exfil.yaml +4 -5
- package/rules/context-exfiltration/ATR-2026-02406-mcp-sequential-id-enumeration.yaml +300 -0
- package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +4 -5
- package/rules/data-poisoning/ATR-2026-00450-spring-ai-prompt-memory-poisoning.yaml +4 -4
- package/rules/data-poisoning/ATR-2026-00570-sql-injection-in-agent-tool-query.yaml +2 -2
- package/rules/data-poisoning/ATR-2026-01155-memory-plant-direct-command.yaml +3 -4
- package/rules/data-poisoning/ATR-2026-01774-semantic-rag-memory-poisoning.yaml +27 -27
- package/rules/data-poisoning/ATR-2026-02143-graph-query-injection-node-labels-group-ids.yaml +2 -3
- package/rules/data-poisoning/ATR-2026-02144-stored-data-administrative-request-role-elevation.yaml +2 -3
- package/rules/data-poisoning/ATR-2026-02303-kql-kusto-pipe-injection-metadata-tool.yaml +2 -3
- package/rules/data-poisoning/ATR-2026-02408-dataset-loader-code-execution.yaml +344 -0
- package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +12 -9
- package/rules/excessive-autonomy/ATR-2026-00051-resource-exhaustion.yaml +11 -9
- package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +3 -4
- package/rules/excessive-autonomy/ATR-2026-00098-unauthorized-financial-action.yaml +9 -6
- package/rules/excessive-autonomy/ATR-2026-00099-high-risk-tool-gate.yaml +4 -5
- package/rules/excessive-autonomy/ATR-2026-00428-nl-unauthorized-shell-execution.yaml +7 -4
- package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +2 -2
- package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +2 -2
- package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +15 -8
- package/rules/excessive-autonomy/ATR-2026-00708-ipi-financial-transfer-unauthorized.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-00709-ipi-disable-auth-mfa.yaml +8 -3
- package/rules/excessive-autonomy/ATR-2026-00710-ipi-physical-access-grant.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-00711-ipi-system-sabotage-destructive-command.yaml +8 -3
- package/rules/excessive-autonomy/ATR-2026-00712-ipi-malicious-package-install.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-00713-ipi-rce-network-shell-command.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-00718-tool-misuse-financial-autonomous.yaml +2 -2
- package/rules/excessive-autonomy/ATR-2026-00719-tool-misuse-destructive-bulk-action.yaml +2 -2
- package/rules/excessive-autonomy/ATR-2026-00722-ipi-account-manipulation-emergency-pretext.yaml +8 -3
- package/rules/excessive-autonomy/ATR-2026-01751-indirect-pi-task-abort-stop-instruction.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-01752-indirect-pi-captcha-redirect-dos.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01773-semantic-excessive-agency-action.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-01801-asb-autonomous-vehicle-sabotage.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01804-asb-covert-unlogged-action.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01805-asb-financial-fraud-execution.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01806-asb-clinical-patient-harm.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01809-semantic-insider-manipulation-process-corruption.yaml +5 -5
- package/rules/excessive-autonomy/ATR-2026-01837-ddos-attack-orchestration.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01838-unauthorized-cryptominer-deployment.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01849-harassment-bot-deployment.yaml +4 -4
- package/rules/excessive-autonomy/ATR-2026-01989-t1046-agent-internal-network-sweep.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-01993-t1562-agent-impair-defenses.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-01994-t1573-agent-encrypted-c2-channel.yaml +3 -3
- package/rules/excessive-autonomy/ATR-2026-02106-redos-regex-payload-tool-argument.yaml +2 -3
- package/rules/excessive-autonomy/ATR-2026-02400-agent-approval-gate-disabled-runtime.yaml +382 -0
- package/rules/excessive-autonomy/ATR-2026-02401-rogue-agent-mass-connector-grant.yaml +274 -0
- package/rules/excessive-autonomy/ATR-2026-02409-mcp-async-task-abuse.yaml +397 -0
- package/rules/model-abuse/ATR-2026-00279-harmful-completion-continuation.yaml +2 -2
- package/rules/model-abuse/ATR-2026-00281-eicar-gtube-malware-signature-request.yaml +2 -2
- package/rules/model-abuse/ATR-2026-00284-glitch-token-destabilization.yaml +2 -2
- package/rules/model-abuse/ATR-2026-00289-lmrc-harmful-content-elicitation.yaml +2 -2
- package/rules/model-abuse/ATR-2026-00292-self-harm-eating-disorder-facilitation.yaml +2 -2
- package/rules/model-abuse/ATR-2026-00298-malicious-use-illegal-activity-request.yaml +4 -4
- package/rules/model-abuse/ATR-2026-00299-harmbench-detailed-harmful-instruction.yaml +4 -4
- package/rules/model-abuse/ATR-2026-00413-malwaregen-code-generation-request.yaml +3 -3
- package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +10 -4
- package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +42 -6
- package/rules/model-abuse/ATR-2026-01750-dos-repeat-word-n-times-output-amplification.yaml +16 -4
- package/rules/model-abuse/ATR-2026-01760-dos-forced-infinite-output-token-flood.yaml +2 -2
- package/rules/model-abuse/ATR-2026-01830-stolen-credential-account-drain.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01831-money-laundering-crypto-layering.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01833-darknet-controlled-substance-procurement.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01834-fraudulent-identity-document-procurement.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01835-human-trafficking-facilitation.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01836-trojanized-software-distribution.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01840-extremist-propaganda-distribution.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01841-deepfake-disinformation.yaml +7 -4
- package/rules/model-abuse/ATR-2026-01842-plagiarism-detector-evasion.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01843-drug-dealing-detection-evasion-spelling.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01844-illegitimate-prescription-fulfillment.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01845-banned-ingredient-relabel-fraud.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01846-tax-evasion-offshore-shell-planning.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01847-immigration-work-fraud.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01848-illicit-drug-marketplace-build.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01850-targeted-doxxing-threat-campaign.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01851-bestiality-content-distribution.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01852-romance-scam-impersonation.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01853-nonconsensual-leaked-media-distribution.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01854-falsified-research-abstract-disinformation.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01855-content-misappropriation-republish.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01856-targeted-harmful-content-generation.yaml +4 -4
- package/rules/model-abuse/ATR-2026-01896-ransomware.yaml +2 -2
- package/rules/model-abuse/ATR-2026-01897-host-sabotage.yaml +2 -2
- package/rules/model-abuse/ATR-2026-01898-network-dos.yaml +2 -2
- package/rules/model-abuse/ATR-2026-02211-named-substance-synthesis-request-non-stepword.yaml +2 -3
- package/rules/model-abuse/ATR-2026-02411-ai-provenance-metadata-stripping.yaml +274 -0
- package/rules/model-abuse/ATR-2026-02412-generative-watermark-removal-tooling.yaml +233 -0
- package/rules/model-abuse/ATR-2026-02413-ai-text-detection-evasion-humanizer.yaml +258 -0
- package/rules/model-security/ATR-2026-00072-model-behavior-extraction.yaml +3 -4
- package/rules/model-security/ATR-2026-00073-malicious-finetuning-data.yaml +11 -8
- package/rules/model-security/ATR-2026-00433-modelcache-torch-load-deserialization-rce.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-00040-privilege-escalation.yaml +10 -8
- package/rules/privilege-escalation/ATR-2026-00041-scope-creep.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-00107-delayed-execution-bypass.yaml +9 -10
- package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +6 -4
- package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-00204-stealth-execution-persistence.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-00436-enclave-vm-sandbox-escape-rce.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-00441-semantic-kernel-sessions-python-plugin-startup-persistence.yaml +5 -5
- package/rules/privilege-escalation/ATR-2026-00451-litellm-admin-sqli-cisa-kev.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +2 -2
- package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +4 -5
- package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +3 -4
- package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +3 -4
- package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +23 -10
- package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +23 -10
- package/rules/privilege-escalation/ATR-2026-01600-sql-injection-tautology-rbac-bypass.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-01601-sql-injection-destructive-ddl.yaml +2 -2
- package/rules/privilege-escalation/ATR-2026-01602-sql-injection-union-select-exfil.yaml +2 -2
- package/rules/privilege-escalation/ATR-2026-01603-sql-injection-stacked-dml-abuse.yaml +3 -3
- package/rules/privilege-escalation/ATR-2026-01604-sql-injection-schema-enumeration.yaml +3 -3
- package/rules/privilege-escalation/ATR-2026-01609-shell-injection-exfil-webhook.yaml +3 -3
- package/rules/privilege-escalation/ATR-2026-01610-shell-evasion-subshell-injection.yaml +9 -4
- package/rules/privilege-escalation/ATR-2026-01611-shell-evasion-eval-exec-injection.yaml +3 -3
- package/rules/privilege-escalation/ATR-2026-01612-debug-mode-privilege-escalation.yaml +3 -3
- package/rules/privilege-escalation/ATR-2026-01613-rbac-bypass-social-engineering.yaml +2 -2
- package/rules/privilege-escalation/ATR-2026-01614-bola-cross-user-data-access.yaml +16 -4
- package/rules/privilege-escalation/ATR-2026-01615-sandbox-escape-command-injection.yaml +3 -3
- package/rules/privilege-escalation/ATR-2026-01616-path-traversal-agent-file-access.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-01802-asb-backdoor-surveillance-implant.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-01803-asb-covert-server-intrusion.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-01808-asb-synthetic-pan-payment-probe.yaml +4 -4
- package/rules/privilege-escalation/ATR-2026-01899-remote-access-backdoor.yaml +2 -2
- package/rules/privilege-escalation/ATR-2026-01933-litellm-user-role-privilege-escalation-cve-2026-47102.yaml +4 -5
- package/rules/privilege-escalation/ATR-2026-01934-litellm-allowed-routes-authz-bypass-cve-2026-47101.yaml +4 -5
- package/rules/privilege-escalation/ATR-2026-01949-praisonai-mcpserver-unauth-tools-call.yaml +3 -4
- package/rules/privilege-escalation/ATR-2026-01974-anything-llm-data-import-access-control.yaml +3 -4
- package/rules/privilege-escalation/ATR-2026-01981-network-ai-approval-inbox-unauth-cors-bypass.yaml +4 -5
- package/rules/privilege-escalation/ATR-2026-01986-windows-mcp-unauth-http-powershell-cors.yaml +4 -5
- package/rules/privilege-escalation/ATR-2026-01992-t1556-agent-auth-process-tamper.yaml +3 -3
- package/rules/privilege-escalation/ATR-2026-02040-file-edit-tool-persistence-write.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02100-cypher-destructive-admin-query-injection.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02101-dynamic-dunder-attribute-sandbox-escape.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02123-bare-query-path-confusion-auth-bypass.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02142-download-tool-absolute-path-sandbox-escape.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02146-export-tool-dest-dir-credential-directory-redirect.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02192-self-privesc-wildcard-trust-config-write.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02195-dangerous-env-var-injection-config-tool.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02251-identifier-field-path-traversal-storage-write.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02300-mcp-stdio-config-dangerous-env-var.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02301-symlink-outside-workspace-sensitive-target.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02302-git-worktree-dotgit-sandbox-escape.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02353-runtime-identifier-field-path-traversal-log-read.yaml +2 -3
- package/rules/privilege-escalation/ATR-2026-02370-ssh-scp-hostalias-option-injection.yaml +4 -5
- package/rules/privilege-escalation/ATR-2026-02371-chromium-launch-flag-argument-injection.yaml +4 -5
- package/rules/privilege-escalation/ATR-2026-02402-mcp-policy-engine-fail-open.yaml +293 -0
- package/rules/privilege-escalation/ATR-2026-02404-model-output-to-shell-unsanitized.yaml +269 -0
- package/rules/privilege-escalation/ATR-2026-02407-agent-workspace-boundary-escape.yaml +310 -0
- package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +4 -5
- package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +30 -9
- package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +31 -14
- package/rules/prompt-injection/ATR-2026-00005-multi-turn-injection.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-00080-encoding-evasion.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-00081-semantic-multi-turn.yaml +8 -6
- package/rules/prompt-injection/ATR-2026-00082-fingerprint-evasion.yaml +14 -7
- package/rules/prompt-injection/ATR-2026-00083-indirect-tool-injection.yaml +14 -7
- package/rules/prompt-injection/ATR-2026-00084-structured-data-injection.yaml +36 -6
- package/rules/prompt-injection/ATR-2026-00085-audit-evasion.yaml +14 -7
- package/rules/prompt-injection/ATR-2026-00086-visual-spoofing.yaml +77 -14
- package/rules/prompt-injection/ATR-2026-00087-rule-probing.yaml +19 -10
- package/rules/prompt-injection/ATR-2026-00088-adaptive-countermeasure.yaml +27 -11
- package/rules/prompt-injection/ATR-2026-00089-polymorphic-skill.yaml +66 -7
- package/rules/prompt-injection/ATR-2026-00090-threat-intel-exfil.yaml +15 -8
- package/rules/prompt-injection/ATR-2026-00091-nested-payload.yaml +44 -10
- package/rules/prompt-injection/ATR-2026-00092-consensus-poisoning.yaml +10 -8
- package/rules/prompt-injection/ATR-2026-00093-gradual-escalation.yaml +9 -8
- package/rules/prompt-injection/ATR-2026-00094-audit-bypass.yaml +9 -7
- package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +9 -6
- package/rules/prompt-injection/ATR-2026-00104-persona-hijacking.yaml +4 -5
- package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-00153-tool-with-embedded-instruction-to-bypass.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-00154-unauthorized-background-task-execution-v.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-00155-hidden-llm-instructions-in-skill-descrip.yaml +4 -5
- package/rules/prompt-injection/ATR-2026-00156-ssh-remote-command-execution-with-creden.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-00163-skill-hidden-override-instruction.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00202-encoding-evasion-homoglyph-synonym.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00203-context-pollution-skill-description.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00206-hidden-priority-instructions.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00207-hidden-instructions.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00213-system-prompt-override.yaml +28 -4
- package/rules/prompt-injection/ATR-2026-00226-identity-substitution.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00227-historical-persona-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00229-roleplay-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00230-persona-moral-bypass.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00231-identity-substitution.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00234-roleplay-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00235-persona-moral-bypass.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00236-pseudo-code-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00237-dual-response-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00238-identity-replacement.yaml +5 -2
- package/rules/prompt-injection/ATR-2026-00239-amoral-persona-obsession.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00240-instruction-nullification-identity-repla.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00241-amoral-character-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00242-persona-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00243-acronym-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00244-dual-response-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00245-malicious-persona.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00247-dual-response-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00249-game-based-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00251-persona-embodiment-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00252-narrative-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00253-enhanced-persona-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00258-unicode-tag-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00267-gcg-adversarial-suffix.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00272-hypothetical-response-smuggling.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00276-invisible-unicode-bidi-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00278-dra-disguise-reconstruction-attack.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00280-policy-puppetry-xml-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00285-alternate-encoding-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00286-latent-injection-embedded-context.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00296-shell-command-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00297-python-code-execution-rce.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00308-zalgo-diacritic-overload-encoding.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00309-braille-unicode-encoded-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00310-ecoji-emoji-encoded-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00311-base2048-unicode-script-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00313-sneaky-bits-zero-width-binary.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00315-sata-masked-language-model-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00316-function-masking-predict-mask-bypass.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00359-bank-phishing-smtp-email-code.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00367-emoji-flag-encoded-hidden-phrase.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00373-piracy-torrent-site-list-request.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00378-chatgpt-dom-javascript-redirect-manipulation.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00382-cocaine-component-development-request.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00390-explicit-sexual-content-poem-request.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00395-llm-special-token-boundary-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00396-toxic-continuation-prefix-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00397-snowball-impossible-reasoning-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00399-latent-injection-document-separator-token.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00400-latent-injection-ignore-instruction-keyword.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00401-leakreplay-cloze-mask-training-data-elicitation.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00403-glitch-token-repeat-back-elicitation.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00407-echo-sql-jinja-template-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00408-dra-parenthesis-character-reconstruction-attack.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00409-phrasing-past-future-tense-harmful-query.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00410-lmrc-harm-category-direct-elicitation.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00412-figstep-image-list-multimodal-jailbreak.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00414-continuation-ethnic-slur-completion-elicitation.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00420-copilot-studio-sharepoint-indirect-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00442-quoted-exact-output-forcing.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00443-word-fragment-concat-assembly.yaml +13 -4
- package/rules/prompt-injection/ATR-2026-00444-unicode-obfuscation-in-user-input.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00445-translation-hijack-with-side-output.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00446-variable-assignment-payload-injection.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00447-fictional-generation-containing-target.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +7 -4
- package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +7 -2
- package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +23 -12
- package/rules/prompt-injection/ATR-2026-00554-langchain-vulnerable-to-template-injecti.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00565-the-llm-cli-tool-thru-0-27-1-contains-a-.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00573-semantic-paraphrased-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-00579-mcp-tool-description-line-jumping-injection.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-00584-indirect-injection-via-tool-response.yaml +4 -5
- package/rules/prompt-injection/ATR-2026-00700-structured-data-payload-injection.yaml +8 -3
- package/rules/prompt-injection/ATR-2026-00701-ipi-tool-output-xss-injection.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-01000-context-ignore-fake-completion-prefix.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01001-direct-pi-instruction-override-secret-key.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01002-role-escalation-false-authority-claim.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01005-many-shot-repetition-override.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01006-payload-split-string-concat-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01007-token-repeat-flooding-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01009-virtual-world-bypass-fictional-pii.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01012-encoding-evasion-decode-execute.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01013-language-evasion-multilingual-credential.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01015-evasion-refusal-suppression.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01016-evasion-response-priming-forced-opener.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01017-evasion-dual-response-split-output.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01018-evasion-shell-injection-eval.yaml +5 -5
- package/rules/prompt-injection/ATR-2026-01019-sysprompt-override-fake-diagnostic-mode.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01020-spikee-doc-embedded-base64-payload.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01021-spikee-doc-embedded-translation-injection.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01023-evasion-opposite-intent-negation-trick.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01024-evasion-persona-override-rule-breaker.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01025-evasion-hypothetical-fictional-execution-framing.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01026-evasion-unicode-glitch-token-anomaly.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01304-indirect-injection-carrier-important-override.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-01757-hypothetical-framing-bypass-research-audit.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01758-hypothetical-fictional-story-bypass.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01759-dos-new-important-instructions-injection-in-document.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01771-semantic-jailbreak-framing.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01800-asb-trigger-marker-tool-coercion.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-01860-llmail-chat-template-boundary-spoof.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01861-llmail-pseudo-xml-role-injection.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01900-output-encoding.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01901-output-scrambling.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01902-output-emoji.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01903-output-language.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01904-link-injection.yaml +15 -6
- package/rules/prompt-injection/ATR-2026-01905-promotional-injection.yaml +2 -2
- package/rules/prompt-injection/ATR-2026-01906-content-manipulation.yaml +4 -4
- package/rules/prompt-injection/ATR-2026-01920-access-grant-coercion.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01921-access-denial-inversion.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01922-authorization-state-spoofing.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01923-forged-input-boundary-markers.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01925-encoded-payload-decoding-coercion.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-01926-cross-lingual-authorization-laundering.yaml +3 -3
- package/rules/prompt-injection/ATR-2026-02001-ignore-below-instructions-mirror-of-ignore-previ.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02002-instruction-set-probe-or-supplant-direct-meta-qu.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02003-task-pivot-override-abandon-the-cover-task-trans.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02004-regional-indicator-flag-emoji-alphabet-letter-sp.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02005-actor-never-breaks-character-roleplay-dan-style-.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02006-fuzzy-cross-lingual-i-have-been-pwned-near-miss-.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02007-bare-key-elicitation-token.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02008-translation-chain-output-laundering-state-secret.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02009-bare-key-elicitation-trailing-colon.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02011-malformed-grammar-pwned-success-claim.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02012-movie-title-generator-instruction-wrapper-for-pw.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02013-delimiter-fence-ignore-instructions-override.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02014-spliced-target-string-letters-of-a-filtered-cana.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02015-dense-emoji-only-payload-flood.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02016-reversed-payload-string.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02018-regional-indicator-flag-emoji-letter-spelling-sp.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02019-python-interpreter-role-assignment-exec-framing.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02020-obfuscated-token-reconstruction-via-character-su.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02120-agentdojo-important-message-identity-spoof-pretext.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-02210-negation-topic-evil-persona-two-script-jailbreak.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-02230-conditional-keyword-trigger-override.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-02232-brand-persona-opinion-hijack.yaml +2 -3
- package/rules/prompt-injection/ATR-2026-02374-rot13-base64-obfuscated-shell-jailbreak.yaml +3 -4
- package/rules/prompt-injection/ATR-2026-02377-novel-persona-jailbreak-cosignal.yaml +99 -0
- package/rules/prompt-injection/ATR-2026-02500-prompt-layer-self-replication.yaml +287 -0
- package/rules/prompt-injection/ATR-2026-02502-covert-remote-script-injection-into-generated-artifacts.yaml +209 -0
- package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +4 -4
- package/rules/skill-compromise/ATR-2026-00061-description-behavior-mismatch.yaml +100 -9
- package/rules/skill-compromise/ATR-2026-00062-hidden-capability.yaml +12 -9
- package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +18 -7
- package/rules/skill-compromise/ATR-2026-00064-over-permissioned-skill.yaml +8 -6
- package/rules/skill-compromise/ATR-2026-00065-skill-update-attack.yaml +2 -3
- package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +11 -7
- package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +6 -3
- package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +8 -5
- package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +3 -3
- package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +2 -3
- package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +2 -3
- package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +2 -3
- package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +3 -2
- package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +2 -3
- package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +3 -2
- package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +2 -3
- package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +7 -4
- package/rules/skill-compromise/ATR-2026-00151-fork-impersonation-install.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00157-timebomb-credential-exfil.yaml +2 -3
- package/rules/skill-compromise/ATR-2026-00200-agent-memory-config-tampering.yaml +4 -4
- package/rules/skill-compromise/ATR-2026-00214-credential-theft.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00217-credential-harvesting.yaml +7 -3
- package/rules/skill-compromise/ATR-2026-00220-malware-dropper.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00222-credential-harvesting.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00224-credential-exfiltration.yaml +7 -3
- package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00260-package-hallucination.yaml +3 -3
- package/rules/skill-compromise/ATR-2026-00262-av-evasion-code-gen.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00263-credential-file-read-gen.yaml +3 -3
- package/rules/skill-compromise/ATR-2026-00266-malware-dropper-gen.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00283-malwaregen-generic-virus-payload-request.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00398-huggingface-unsafe-model-artifact-load.yaml +4 -4
- package/rules/skill-compromise/ATR-2026-00425-nl-persistent-covert-hook.yaml +7 -4
- package/rules/skill-compromise/ATR-2026-00427-nl-fake-error-instruction-bypass.yaml +7 -4
- package/rules/skill-compromise/ATR-2026-00429-nl-skill-self-modification.yaml +6 -3
- package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +5 -7
- package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +2 -2
- package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +3 -3
- package/rules/skill-compromise/ATR-2026-01755-backdoor-pot-linguistic-trigger-phrase.yaml +3 -3
- package/rules/skill-compromise/ATR-2026-01756-backdoor-pot-symbol-emoticon-trigger.yaml +4 -4
- package/rules/skill-compromise/ATR-2026-02261-code-credential-exfil-chain.yaml +3 -3
- package/rules/skill-compromise/ATR-2026-02405-malicious-skill-package-structure.yaml +276 -0
- package/rules/skill-compromise/ATR-2026-02410-malicious-artifact-on-vendor-domain.yaml +273 -0
- package/rules/tool-poisoning/ATR-2026-00010-mcp-malicious-response.yaml +12 -10
- package/rules/tool-poisoning/ATR-2026-00011-tool-output-injection.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +9 -6
- package/rules/tool-poisoning/ATR-2026-00013-tool-ssrf.yaml +8 -6
- package/rules/tool-poisoning/ATR-2026-00095-supply-chain-poisoning.yaml +13 -11
- package/rules/tool-poisoning/ATR-2026-00096-registry-poisoning.yaml +20 -18
- package/rules/tool-poisoning/ATR-2026-00100-consent-bypass-instruction.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-00101-trust-escalation-override.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-00103-hidden-safety-bypass-instruction.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-00105-silent-action-concealment.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-00106-schema-description-contradiction.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +11 -8
- package/rules/tool-poisoning/ATR-2026-00209-mcpwn-runaway-invocation.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00210-flowise-system-message-override.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00259-ansi-escape-injection.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00270-xss-in-tool-response.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +3 -3
- package/rules/tool-poisoning/ATR-2026-00393-ansi-code-elicitation-request.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00415-flowise-custom-mcp-stdio-rce.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00419-cursor-mcp-zero-click-config.yaml +5 -5
- package/rules/tool-poisoning/ATR-2026-00434-mcp-remote-authorization-endpoint-command-injection.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00435-azure-mcp-server-missing-authentication.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00448-spring-ai-milvus-filter-injection.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +3 -3
- package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +5 -5
- package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +12 -9
- package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +9 -7
- package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-00561-fastmcp-vulnerable-to-windows-command-in.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00567-mcp-stdio-config-command-injection.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00568-agent-ssrf-cloud-metadata-file-inclusion.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-00572-symjack-symlink-config-redirection.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00575-miasma-npm-worm-agent-config-backdoor.yaml +5 -5
- package/rules/tool-poisoning/ATR-2026-00576-hades-agent-credential-theft.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-00577-create-mcp-server-stdio-exec-command-injection.yaml +55 -7
- package/rules/tool-poisoning/ATR-2026-00581-mcp-tool-rug-pull-post-approval-redefinition.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-00714-tool-camouflage-forced-tool-call.yaml +8 -3
- package/rules/tool-poisoning/ATR-2026-00715-tool-knowledge-hijack-identity-injection.yaml +8 -3
- package/rules/tool-poisoning/ATR-2026-00716-ipi-data-destruction-carrier.yaml +3 -3
- package/rules/tool-poisoning/ATR-2026-00720-tool-misuse-privilege-escalation-social.yaml +7 -2
- package/rules/tool-poisoning/ATR-2026-01300-mcp-notes-param-chat-history-exfil.yaml +6 -6
- package/rules/tool-poisoning/ATR-2026-01301-tool-description-exclusive-tool-override.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01302-fake-tool-result-instruction-injection.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01303-tool-schema-enumeration-social-engineering.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01306-mcp-oauth-command-injection.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01307-mcp-dns-rebinding-attack.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01310-mcp-tool-description-compliance-history-exfil.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01775-semantic-mcp-tool-manifest-poisoning.yaml +7 -7
- package/rules/tool-poisoning/ATR-2026-01927-mcp-server-kubernetes-kubectl-command-injection.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-01928-framelink-figma-mcp-curl-fallback-command-injection.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-01930-mcp-sampling-prompt-injection.yaml +5 -5
- package/rules/tool-poisoning/ATR-2026-01931-gemini-mcp-tool-command-injection-file-exfil.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01932-shadow-undeclared-mcp-server-registration.yaml +4 -4
- package/rules/tool-poisoning/ATR-2026-01935-litellm-custom-code-sandbox-escape-cve-2026-40217.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-01952-praisonai-codemode-sandbox-escape-rce.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01953-praisonai-codemode-function-ctor-sandbox-escape.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01959-openhuman-shell-allowlist-env-prefix-bypass.yaml +48 -7
- package/rules/tool-poisoning/ATR-2026-01963-praisonai-action-orchestrator-step-target-path-traversal-rce.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01965-flowise-custommcp-os-command-rce.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01967-deepchat-mermaid-xss-rce-ipc-mcp-register.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01968-deepchat-markdown-deeplink-openexternal-rce-bypass.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-01970-praisonai-filetools-normpath-path-traversal.yaml +11 -7
- package/rules/tool-poisoning/ATR-2026-01973-anythingllm-logo-endpoint-path-traversal.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01978-anythingllm-collector-process-filename-path-traversal-delete.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01979-pandasai-prompt-injection-dunder-sandbox-escape-rce.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01980-agentic-flow-mcp-tool-param-command-injection.yaml +7 -5
- package/rules/tool-poisoning/ATR-2026-01982-dbt-mcp-node-selection-argument-injection.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01983-mcp-for-stata-log-file-name-command-injection.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01985-mcp-connect-bridge-unauth-process-spawn-rce.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-01987-langroid-sqlchatagent-prompt-to-sql-rce.yaml +3 -4
- package/rules/tool-poisoning/ATR-2026-02021-mcp-inspector-unauthenticated-proxy-rce.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-02022-curxecute-cursor-mcp-json-injected-server-rce.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-02023-escaperoute-filesystem-mcp-prefix-bypass.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-02024-escaperoute-filesystem-mcp-symlink-launchagent.yaml +5 -6
- package/rules/tool-poisoning/ATR-2026-02025-mcp-full-schema-poisoning-nondescription-field.yaml +7 -8
- package/rules/tool-poisoning/ATR-2026-02027-diagnostic-content-remediation-command-injection.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02041-shell-injection-echo-marker-poc.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02102-html-injection-tool-arg-approval-ui-xss.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02141-mcp-server-config-command-execution.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02145-python-sandbox-escape-generator-frame-introspection.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02193-ssrf-ipv6-noncanonical-loopback-bypass.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02194-go-init-func-process-exec-codegen-rce.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02233-unscoped-destructive-db-request-nl.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02260-agentjacking-remediation-framed-execution.yaml +6 -6
- package/rules/tool-poisoning/ATR-2026-02263-workflow-sql-template-expression-injection.yaml +2 -2
- package/rules/tool-poisoning/ATR-2026-02350-mcp-json-rpc-case-duplicate-key-tool-smuggling.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02352-imap-search-command-injection-email-tool-args.yaml +2 -3
- package/rules/tool-poisoning/ATR-2026-02372-unsigned-task-feed-npm-npx-lifecycle-rce.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-02376-tool-description-conversational-trigger-history-exfil.yaml +4 -5
- package/rules/tool-poisoning/ATR-2026-02403-mcp-external-content-missing-spotlighting.yaml +356 -0
- package/spec/README.md +24 -16
- package/spec/atr-correlation-v1.0.md +2 -2
- package/spec/atr-event-v1.0.md +3 -3
- package/spec/atr-language-detection-v1.0.md +1 -1
- package/spec/atr-method-v1.1.md +2 -0
- package/spec/atr-observation-v1.0.md +323 -0
- package/spec/atr-profile-v1.0.md +4 -4
- package/spec/atr-schema.yaml +5 -3
- package/spec/category-registry/v1.0.yaml +2 -2
- package/spec/compliance-metadata.md +3 -2
- package/spec/conformance/README.md +4 -4
- package/spec/conformance/SIGNING.md +1 -1
- package/spec/conformance/baseline/manifest.json +1 -1
- package/spec/mappings/atr-to-nist-csf-2.0.md +3 -3
- package/spec/schema/correlation.schema.json +1 -1
- package/spec/schema/event.schema.json +1 -1
- package/spec/schema/observation.schema.json +131 -0
- package/spec/schema/profile.schema.json +1 -1
- package/spec/schema/rule.schema.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ AI Agent 威脅偵測規則的開放格式
|
|
|
13
13
|
[](https://github.com/marketplace/actions/atr-scan)
|
|
14
14
|
[](LICENSE)
|
|
15
15
|
[](https://doi.org/10.5281/zenodo.19178002)
|
|
16
|
-
[](#5-specification)
|
|
17
17
|
[](#7-coverage)
|
|
18
18
|
[](#7-coverage)
|
|
19
19
|
[](#7-coverage)
|
|
@@ -29,7 +29,7 @@ ATR (Agent Threat Rules) is an open detection rule format for AI agent security
|
|
|
29
29
|
|
|
30
30
|
## Status of This Document
|
|
31
31
|
|
|
32
|
-
ATR is published as a **Working Draft** at version `3.0.0-alpha.1`. The rule format defined in `
|
|
32
|
+
ATR is published as a **Working Draft** at version `3.0.0-alpha.1`. The rule format defined in `SPEC.md` is stable and merged into open-source repos at Microsoft, Cisco, and Gen Digital, and integrated by standards-body projects (MISP / CIRCL, OWASP Agent Security Regression Harness, SigmaHQ, FINOS Common Cloud Controls); full list with PR links in [§6 Adoption](#6-adoption). Governance is currently single-maintainer (BDFL) transitioning to a Technical Steering Committee per [GOVERNANCE.md](GOVERNANCE.md).
|
|
33
33
|
|
|
34
34
|
All numbers in this document are sourced from [`data/stats.json`](data/stats.json), which is the canonical record of the project's current state. Where this README and `stats.json` disagree, `stats.json` is authoritative.
|
|
35
35
|
|
|
@@ -94,12 +94,12 @@ ATR fills the gap between *taxonomy* and *deployable rule*. Each rule is a YAML
|
|
|
94
94
|
|
|
95
95
|
## 2. Conformance Levels
|
|
96
96
|
|
|
97
|
-
The keywords MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY in this document and in [`
|
|
97
|
+
The keywords MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY in this document and in [`SPEC.md`](SPEC.md) are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
|
|
98
98
|
|
|
99
99
|
A conforming **ATR engine** MUST:
|
|
100
100
|
|
|
101
101
|
1. Parse all fields defined in [`spec/atr-schema.yaml`](spec/atr-schema.yaml) without error.
|
|
102
|
-
2. Evaluate `detection.conditions` with the semantics defined in [`
|
|
102
|
+
2. Evaluate `detection.conditions` with the semantics defined in [`SPEC.md`](SPEC.md) §6 (Detection Semantics).
|
|
103
103
|
3. Honor the `scan_target` field — a rule with `scan_target: skill` MUST NOT be evaluated against `mcp_exchange` events and vice versa.
|
|
104
104
|
4. Respect rule `status` — rules with `status: deprecated` or `status: draft` MUST NOT participate in production matching unless the consumer opts in explicitly.
|
|
105
105
|
5. Emit `rule_id` and rule `severity` on every match.
|
|
@@ -203,29 +203,118 @@ matches = engine.evaluate(AgentEvent(content="...", event_type="llm_input"))
|
|
|
203
203
|
| MCP server | Live integration with Claude Code, Cursor, Windsurf, and other MCP clients |
|
|
204
204
|
| Splunk / Elastic export | SIEM rule pack for runtime detection |
|
|
205
205
|
|
|
206
|
-
### Detection lanes
|
|
206
|
+
### Detection lanes
|
|
207
|
+
|
|
208
|
+
A lane selects which rules may fire. It is one of the two runtime switches; the
|
|
209
|
+
other is blocking, which decides whether ATR may act on what fired, and which
|
|
210
|
+
the next section covers. Neither implies the other.
|
|
211
|
+
[docs/ENFORCEMENT-MODEL.md](docs/ENFORCEMENT-MODEL.md) is the full reference.
|
|
207
212
|
|
|
208
213
|
Each rule carries a maturity-driven **lane**, so a consumer can trade recall for precision instead of running every rule at one fixed threshold:
|
|
209
214
|
|
|
210
215
|
| Lane | Fires | Intended use | FP on a 65K-sample benign gate |
|
|
211
216
|
|---|---|---|---:|
|
|
212
|
-
| `enforce` | `stable`
|
|
217
|
+
| `enforce` | `stable` only | Narrowest, highest-precision set — the one to run when blocking is on | ~0.24% |
|
|
213
218
|
| `alert` | `stable` + `test` | Analyst / correlation | — |
|
|
214
|
-
| `hunt` | all rules except `deprecated` |
|
|
219
|
+
| `hunt` | all rules except `deprecated` | Broadest visibility (**default**) | ~9% |
|
|
220
|
+
|
|
221
|
+
Lanes are opt-in and backward-compatible for detection: the default is `hunt`, so every integration sees exactly the rules it saw before. Selecting `enforce` raises precision by firing only the most mature rules — and therefore catches fewer attacks. Report false-positive rates lane-keyed (`enforce` ~0.24% / `hunt` ~9% on the 65K-sample benign gate), not as a single overall figure. That gate is a separate corpus from the per-source measurements in [§8 Evaluation](#8-evaluation).
|
|
222
|
+
|
|
223
|
+
### Detection and enforcement are separate switches
|
|
224
|
+
|
|
225
|
+
Detection always runs. **Blocking is opt-in and off by default.** In the default
|
|
226
|
+
mode `atr guard` reports what it found and changes nothing: it emits no
|
|
227
|
+
permission decision to the host, and it dispatches no response action above the
|
|
228
|
+
`observe` blast-radius tier (`alert` / `snapshot` / `shadow` / `escalate` still
|
|
229
|
+
run). Turning blocking on is the explicit operator directive [SPEC.md](SPEC.md)
|
|
230
|
+
§5.5 requires before an engine may execute response actions automatically.
|
|
231
|
+
([spec/atr-method-v1.1.md](spec/atr-method-v1.1.md) §5.6 says the same thing for
|
|
232
|
+
hash matches specifically; §5.5 of SPEC.md is the engine-wide one.)
|
|
233
|
+
|
|
234
|
+
**ATR never answers `permissionDecision: "allow"` — in either mode.** That
|
|
235
|
+
decision is not neutral in the Claude Code contract; it is an affirmative
|
|
236
|
+
approval that suppresses the host's own permission prompt, so answering it on
|
|
237
|
+
every operation ATR had not looked for would make a hooked session permit *more*
|
|
238
|
+
than an unhooked one. A permission decision is emitted only to **restrain** —
|
|
239
|
+
`deny` or `ask` — and only with blocking on. Any other verdict omits the whole
|
|
240
|
+
`hookSpecificOutput` envelope, and the finding travels in `atr_decision`,
|
|
241
|
+
`atr_reason` and `matched_rules` instead. Turning blocking on does not bring the
|
|
242
|
+
affirmative decision back.
|
|
243
|
+
|
|
244
|
+
| Switch | CLI flag | Environment (CLI only) | Library config | Default |
|
|
245
|
+
|---|---|---|---|---|
|
|
246
|
+
| Detection lane | `--lane <enforce\|alert\|hunt>` | `ATR_LANE` | `new ATREngine({ lane })` | `hunt` |
|
|
247
|
+
| Blocking | `--blocking` / `--no-blocking` | `ATR_BLOCKING` | `blocking` on `ActionExecutor` / `HookHandler` | off |
|
|
248
|
+
|
|
249
|
+
**The two surfaces resolve differently, and they do not share a chain:**
|
|
250
|
+
|
|
251
|
+
- **Library** — explicit config **>** built-in default. `ATREngine`,
|
|
252
|
+
`ActionExecutor` and `HookHandler` do not read the environment at all, so an
|
|
253
|
+
embedded engine cannot be re-pointed by a variable the host never set.
|
|
254
|
+
- **CLI** — flag **>** environment variable **>** built-in default.
|
|
255
|
+
|
|
256
|
+
An unrecognised `--lane` value is a usage error, never a silent fallback:
|
|
257
|
+
`atr guard --lane enfroce` exits 1 with
|
|
258
|
+
`Error: Invalid --lane "enfroce". Expected one of: enforce, alert, hunt.`
|
|
259
|
+
An unrecognised value in the *environment* warns on stderr, falls back to the
|
|
260
|
+
safe default and keeps running (exit 0), because `atr guard` runs as a Claude
|
|
261
|
+
Code command hook where a non-zero exit discards every detection and prints no
|
|
262
|
+
reason. If `ATR_LANE` is the variable that could not be read, blocking is forced
|
|
263
|
+
off even when `--blocking` was passed — the fallback lane is the broadest one,
|
|
264
|
+
and enforcing on a lane the operator never chose is the only degradation that
|
|
265
|
+
would be more dangerous than the request.
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
atr guard # advisory: report only (the default)
|
|
269
|
+
atr guard --lane enforce --blocking # blocking on, and only the 106 of 777
|
|
270
|
+
# live rules that are maturity: stable
|
|
271
|
+
# may fire (see the recall note below)
|
|
272
|
+
ATR_LANE=enforce ATR_BLOCKING=1 atr guard # the same, via the environment
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**`--lane enforce` costs recall, and the cost is large.** It loads only
|
|
276
|
+
`maturity: stable` rules: **106 of the 777 live rules** in this repository at the
|
|
277
|
+
commit this paragraph was written against. That is the trade being made every
|
|
278
|
+
time enforcement is recommended alongside it — narrower firing set, lower
|
|
279
|
+
false-positive rate, fewer attacks caught. Rule counts move daily, and a
|
|
280
|
+
`grep`-based count is wrong here (eight rules quote the value as
|
|
281
|
+
`maturity: "stable"`), so re-derive by parsing before quoting the figure
|
|
282
|
+
anywhere:
|
|
215
283
|
|
|
216
|
-
|
|
284
|
+
```bash
|
|
285
|
+
python3 - <<'PY'
|
|
286
|
+
import glob, yaml
|
|
287
|
+
rules = [yaml.safe_load(open(p, encoding='utf-8'))
|
|
288
|
+
for p in glob.glob('rules/**/*.yaml', recursive=True)]
|
|
289
|
+
live = [r for r in rules
|
|
290
|
+
if r.get('status') not in ('draft', 'deprecated')
|
|
291
|
+
and str(r.get('maturity') or '').strip() != 'deprecated']
|
|
292
|
+
stable = [r for r in live if str(r.get('maturity') or '').strip() == 'stable']
|
|
293
|
+
print(f'files={len(rules)} live={len(live)} enforce={len(stable)}')
|
|
294
|
+
PY
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Programmatic embedding: `new ATREngine({ lane })` for the lane,
|
|
298
|
+
`new ActionExecutor({ adapter, blocking })` and
|
|
299
|
+
`new HookHandler({ engine, executor, blocking })` for enforcement. **These are
|
|
300
|
+
the only inputs** — the constructors ignore `ATR_LANE` and `ATR_BLOCKING`, so
|
|
301
|
+
setting them will not configure an embedded engine. An unrecognised lane throws
|
|
302
|
+
a `TypeError`, and so does a non-boolean `blocking`: `blocking: "false"` is a
|
|
303
|
+
string, and every non-empty string is truthy, so it used to switch enforcement
|
|
304
|
+
**on** while reading as an explicit "off".
|
|
217
305
|
|
|
218
306
|
## 5. Specification
|
|
219
307
|
|
|
220
308
|
| Artifact | Path | Purpose |
|
|
221
309
|
|---|---|---|
|
|
222
310
|
| Specification (canonical pointer) | [SPEC.md](SPEC.md) | Resolves to the authoritative documents below |
|
|
223
|
-
| Rule format spec (normative) | [
|
|
311
|
+
| Rule format spec (normative) | [SPEC.md](SPEC.md) | Rule format, identifier scheme, evaluation semantics |
|
|
224
312
|
| Framework spec | [ATR-FRAMEWORK-SPEC.md](ATR-FRAMEWORK-SPEC.md) | Multi-layer detection framework design |
|
|
225
313
|
| Machine-readable schema | [spec/atr-schema.yaml](spec/atr-schema.yaml) | Authoritative validation source |
|
|
226
314
|
| Schema field reference | [docs/schema-spec.md](docs/schema-spec.md) | Human-readable schema docs |
|
|
227
315
|
| Quality standard | [docs/QUALITY-STANDARD.md](docs/QUALITY-STANDARD.md) | Rule promotion criteria (experimental → stable) |
|
|
228
316
|
| Quality gate | [docs/QUALITY-GATE.md](docs/QUALITY-GATE.md) | Safety-gate semantics for community PRs |
|
|
317
|
+
| Enforcement model | [docs/ENFORCEMENT-MODEL.md](docs/ENFORCEMENT-MODEL.md) | Lane and blocking switches, decision channels, migration (reference implementation, not normative) |
|
|
229
318
|
| Limitations | [LIMITATIONS.md](LIMITATIONS.md) | What ATR cannot detect; documented evasion techniques |
|
|
230
319
|
| Threat model | [THREAT-MODEL.md](THREAT-MODEL.md) | Threat analysis driving the rule set |
|
|
231
320
|
|
|
@@ -361,63 +450,205 @@ Aggregated into [`data/stats.json`](data/stats.json) under `benchmarks[]`.
|
|
|
361
450
|
| Source | Source version | Samples | Recall | Precision | FP rate | ATR version | Measured |
|
|
362
451
|
|---|---|---:|---:|---:|---:|---|---|
|
|
363
452
|
| AdvBench (LLM-attacks behaviors) | upstream-2026-06-16 | 520 | 2.1% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
|
|
364
|
-
| atr-self-test | internal | 341 |
|
|
453
|
+
| atr-self-test | internal | 341 | 96.6% | 100.0% | 0.0% | 3.5.12 | 2026-08-15 |
|
|
365
454
|
| autoresearch | internal-1054 | 1,054 | 15.1% | 100.0% | 0.0% | 3.0.0-alpha.0 | 2026-05-23 |
|
|
366
|
-
| garak (in-the-wild jailbreaks) | inthewild-jailbreak-corpus-650 | 650 |
|
|
367
|
-
| garak-full (all probe families) | 23-families | 3,475 |
|
|
455
|
+
| garak (in-the-wild jailbreaks) | inthewild-jailbreak-corpus-650 | 650 | 92.3% | 100.0% | 0.0% | 3.5.12 | 2026-08-15 |
|
|
456
|
+
| garak-full (all probe families) | 23-families | 3,475 | 57.2% | 100.0% | 0.0% | 3.5.12 | 2026-08-15 |
|
|
368
457
|
| hackaprompt | v1 | 4,780 | 69.6% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
|
|
369
458
|
| HarmBench (CAIS behaviors) | upstream-2026-06-16 | 400 | 2.8% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
|
|
370
|
-
| hh-rlhf (Anthropic red-team-attempts) | snapshot-2026-04 | 4,957 |
|
|
459
|
+
| hh-rlhf (Anthropic red-team-attempts) [^stdcorpora] | snapshot-2026-04 | 4,957 | 1.5% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
|
|
371
460
|
| JailbreakBench (JBB-Behaviors) | upstream-2026-06-16 | 100 | 6.0% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
|
|
372
461
|
| llm-guard (Protect AI test fixtures) | corpus-2026-05-12 | 44 | 77.3% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
|
|
373
|
-
| MITRE ATLAS | snapshot-2026-04 | 182 |
|
|
462
|
+
| MITRE ATLAS [^stdcorpora] | snapshot-2026-04 | 182 | 39.0% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
|
|
374
463
|
| NeMo Guardrails (NVIDIA test fixtures) | corpus-2026-05-12 | 6 | 100.0% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
|
|
375
|
-
| OWASP LLM Top 10 | snapshot-2026-04 | 56 |
|
|
376
|
-
| PINT-format (deepset + Lakera Gandalf) |
|
|
377
|
-
| PromptBench (academic adversarial) | snapshot-2026-04 | 3,280 |
|
|
464
|
+
| OWASP LLM Top 10 [^stdcorpora] | snapshot-2026-04 | 56 | 16.1% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
|
|
465
|
+
| PINT-format (deepset + Lakera Gandalf) [^pint] | v1 | 850 | 65.4% | 100.0% | 0.0% | 3.5.12 | 2026-08-15 |
|
|
466
|
+
| PromptBench (academic adversarial) [^promptcorpora] | snapshot-2026-04 | 3,280 | 15.7% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
|
|
378
467
|
| promptfoo (red-team plugin fixtures) | corpus-2026-05-12 | 44 | 97.7% | 100.0% | 0.0% | 3.5.0 | 2026-06-16 |
|
|
379
|
-
| PromptInject (academic adversarial) | snapshot-2026-04 | 1,080 | 100.0% | 100.0% | 0.0% | 3.5.
|
|
380
|
-
| SKILL.md benchmark (internal) | internal-498 | 498 | 100.0% | 97.0% | 0.20% | 3.5.
|
|
468
|
+
| PromptInject (academic adversarial) [^promptcorpora] | snapshot-2026-04 | 1,080 | 100.0% | 100.0% | 0.0% | 3.5.11 | 2026-08-05 |
|
|
469
|
+
| SKILL.md benchmark (internal) [^skilllane] | internal-498 | 498 | 100.0% (hunt) / 0.0% (enforce) | 97.0% | 0.20% | 3.5.12 | 2026-08-15 |
|
|
381
470
|
| Wild scan (OpenClaw + Skills.sh + Hermes + ClawHub) | corpus-2026-04-14 | 96,096 | — | 57.7% (floor) | 1.35% flag rate | 2.0.0 | 2026-04-14 |
|
|
382
471
|
|
|
383
472
|
All detection corpora were (re-)measured against ATR 3.5.0 on 2026-06-16,
|
|
384
473
|
except `autoresearch` (an internal predicted-rule corpus with no standalone
|
|
385
474
|
runner) and the `Wild scan` snapshot, which retain their earlier measurements.
|
|
475
|
+
`PromptInject` and `PromptBench` were re-measured against ATR 3.5.11 on
|
|
476
|
+
2026-08-05; see [^promptcorpora] for what moved and why. (An earlier
|
|
477
|
+
re-measurement against 3.5.2 on 2026-06-25 fixed a harness event shape; the
|
|
478
|
+
0.0% rows before that were a harness artifact — the harness placed the prompt
|
|
479
|
+
in a top-level field the engine does not read — not the engine's actual
|
|
480
|
+
result.)
|
|
481
|
+
|
|
386
482
|
`PromptInject` and `PromptBench` were re-measured against ATR 3.5.2 on
|
|
387
483
|
2026-06-25 after a fix to the recall-analysis harness event shape; the prior
|
|
388
484
|
0.0% rows were a harness artifact (the harness placed the prompt in a
|
|
389
485
|
top-level field the engine does not read), not the engine's actual result.
|
|
486
|
+
`hh-rlhf`, `MITRE ATLAS` and `OWASP LLM Top 10` were re-measured against ATR
|
|
487
|
+
3.5.11 on 2026-08-05 after their runner was found never to have called the
|
|
488
|
+
engine at all — see [^stdcorpora]. Those three rows fell 99.1% → 1.5%,
|
|
489
|
+
100.0% → 39.0% and 100.0% → 16.1%. Nothing regressed; the earlier numbers
|
|
490
|
+
were never measurements of ATR.
|
|
390
491
|
The per-row `ATR version` column above is the version each cell was actually
|
|
391
492
|
measured against, mirroring the `atr_version` field in each
|
|
392
493
|
`data/measurements/<source>/latest.json`. The headline `garak` recall moved
|
|
393
|
-
98.0% → 97.2%
|
|
394
|
-
|
|
494
|
+
98.0% (3.0.0) → 97.2% (3.5.0) → 95.7% (3.5.8) → 92.5% (3.5.11) → 92.3%
|
|
495
|
+
(3.5.12). The 3.5.8 →
|
|
496
|
+
3.5.11 step is a real loss of detections, not a change in how they are counted:
|
|
497
|
+
PR #327 tightened an over-broad persona regex in `ATR-2026-00001` that had been
|
|
498
|
+
false-positiving on benign "you are now an expert …" prose, and tightening it
|
|
499
|
+
also gave up the recall that regex had been earning on novel-persona jailbreaks
|
|
500
|
+
("you are now TrueGPT / ChatINF / Raven …"). The harness event shape changed in
|
|
501
|
+
the same window (see below), and it is not the cause: replayed on 780
|
|
502
|
+
rules, the old shape scores 92.2% and the corrected shape 92.5%, a 0.3-point
|
|
503
|
+
difference in the corrected shape's favour. The 3.2-point drop from 95.7% is
|
|
504
|
+
the rules. The 3.5.11 → 3.5.12 step is one prompt (600/650 vs 601/650) and
|
|
505
|
+
should be read as noise, not as a trend.
|
|
506
|
+
|
|
507
|
+
Two numbers that briefly appeared here are **withdrawn**: between 2026-08-04
|
|
508
|
+
and 2026-08-05, this table and `stats.json` cited **91.5%** for `garak` and
|
|
509
|
+
**56.9%** for `garak-full`, both at ATR 3.5.11. No measurement file for either
|
|
510
|
+
run exists anywhere in the repository. `data/measurements/garak/latest.json`
|
|
511
|
+
pointed, the entire time, at 95.7% measured on 3.5.8; `garak-full`'s pointed at
|
|
512
|
+
38.3% on 3.5.0, while a never-referenced 3.5.8 file sat unread in the same
|
|
513
|
+
directory. So the claims failed this project's own rule that every published
|
|
514
|
+
number is a version-pinned, reproducible measurement. It was also produced by a harness
|
|
515
|
+
that built an event of `type: 'llm_io'`, which is a rule *source* and not an
|
|
516
|
+
`AgentEventType`; `src/engine.ts` could not map it and so ran every rule of
|
|
517
|
+
every source against the event instead of the two source types the harness
|
|
518
|
+
documented itself as using. The 92.3% above replaces it: measured on
|
|
519
|
+
2026-08-15 at 784 rules through `llm_input` + `tool_response`, the two channels
|
|
520
|
+
`src/hook-handler.ts` can actually deliver a prompt on, and written to
|
|
521
|
+
`data/measurements/garak/2026-08-15_garak-inthewild-jailbreak-corpus-650_atr-3-5-12.json`
|
|
522
|
+
with the commit that produced it. Under the wider shape set used for
|
|
523
|
+
false-positive measurement (which also runs `engine.scanSkill()`) the same
|
|
524
|
+
corpus scores 92.9%; that number is recorded in the measurement's `breakdown`
|
|
525
|
+
and is deliberately not the published one, because a garak prompt never reaches
|
|
526
|
+
production as a SKILL.md. `.github/workflows/eval.yml` now runs
|
|
527
|
+
`scripts/check-benchmark-citations.ts`, which fails CI if this table or
|
|
528
|
+
`stats.json` cites a number no measurement file backs.
|
|
529
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
530
|
+
|
|
531
|
+
[^skilllane]: **Lane matters more here than anywhere else in this table.** The
|
|
532
|
+
100% figure is the `hunt` lane, which is the engine default and loads every
|
|
533
|
+
maturity. In the `enforce` lane — the auto-block one, where a detection stops
|
|
534
|
+
the agent with no human in the loop — this corpus scores **0%**, and the
|
|
535
|
+
reason is structural rather than a tuning problem: of the 38 rules carrying
|
|
536
|
+
`scan_target: skill`, **all 38 are `maturity: test`, and none is `stable`.**
|
|
537
|
+
The enforce lane only loads `stable`, so it loads no skill-scanning rule at
|
|
538
|
+
all, and 0 of 32 malicious samples fire. Anyone reading "100% recall on
|
|
539
|
+
SKILL.md" and deploying in enforce mode would be forming a completely wrong
|
|
540
|
+
expectation, so both numbers are shown. Verified on this commit with
|
|
541
|
+
`grep`-free counting over `rules/**/*.yaml`.
|
|
542
|
+
|
|
543
|
+
[^pint]: The `PINT-format` row is **not** a run of Lakera's official PINT
|
|
544
|
+
benchmark. That corpus is private and roughly 5x larger; this row is a
|
|
545
|
+
self-built 850-sample corpus in PINT's format, assembled from
|
|
546
|
+
`deepset/prompt-injections` (660) and `Lakera/gandalf_ignore_instructions`
|
|
547
|
+
(190). It also carries a scope caveat worth stating plainly: only **63 of
|
|
548
|
+
784 rules** fire on it at all, and `ATR-2026-00001` alone accounts for 226
|
|
549
|
+
of the 295 detections. Read it as a prompt-injection-family score, not as
|
|
550
|
+
ATR's overall coverage. The row moved 63.6% → 60.3% between 3.5.0 and
|
|
551
|
+
3.5.11 for the same reason `garak` moved: PR #327 tightened
|
|
552
|
+
`ATR-2026-00001`'s persona-switch regex to stop it false-positiving on
|
|
553
|
+
benign prose. Precision moved 99.7% → 100% over the same span. It then
|
|
554
|
+
recovered 60.3% → 65.4% at 3.5.12 (2026-08-15) as rules added since
|
|
555
|
+
3.5.11 widened the family: rules firing on this corpus went 29 → 63 while
|
|
556
|
+
`ATR-2026-00001`'s own contribution stayed at 226, so the gain came from
|
|
557
|
+
the tail, not from re-loosening the one dominant rule. Precision held at
|
|
558
|
+
100% (0 FP on the 399 benign samples).
|
|
559
|
+
|
|
560
|
+
[^promptcorpora]: **Read both of these as closed-book scores.** Until
|
|
561
|
+
2026-08-05 the harness recorded its per-rule breakdown as the literal
|
|
562
|
+
string `"unknown"` (it read `m.rule_id` off an engine match that carries
|
|
563
|
+
`m.rule.id`), so no published version of these rows could say which rules
|
|
564
|
+
produced them. With attribution restored:
|
|
565
|
+
**PromptInject 100.0%** is produced by **7 of 780 rules**. Five of those
|
|
566
|
+
seven — `ATR-2026-00506`, `00507`, `00508`, `00509`, `00518` — carry
|
|
567
|
+
`author: ATR Community (PromptInject corpus)`: they were written *from*
|
|
568
|
+
this corpus, which has four attack classes built from a handful of
|
|
569
|
+
templates. Remove those five and recall on the same 1,080 samples is
|
|
570
|
+
**9.7%**. The concentration is real but not fragile: the top rule
|
|
571
|
+
(`ATR-2026-00508`, 968/1,080 samples) is the sole detector on none of
|
|
572
|
+
them, so deleting it leaves recall at 100%; only `00518` (45 samples) and
|
|
573
|
+
`00507` (27) are sole detectors of anything. On the 5,352-sample benign
|
|
574
|
+
gate, `00506` / `00507` / `00518` are 0-FP; `00508` has 4 FP, `00509` 3,
|
|
575
|
+
`ATR-2026-00001` 19, `ATR-2026-00400` 1.
|
|
576
|
+
**PromptBench 15.7%** is produced by **3 of 780 rules** (`ATR-2026-00520`,
|
|
577
|
+
`00519`, `00202`), all three 0-FP on the same benign gate. Two of the three
|
|
578
|
+
were mined from PromptBench; without them recall is **2.4%**.
|
|
579
|
+
The PromptBench row moved 23.2% (3.5.2) → 15.7% (3.5.11) and the loss is
|
|
580
|
+
fully attributable: 247 samples were held only by rules that have since
|
|
581
|
+
been precision-repaired, and re-running each rule version by version pins
|
|
582
|
+
every one to its PR — `ATR-2026-00442` 304 → 0 detections at PR #309
|
|
583
|
+
(223 of them samples nothing else caught), `00051` 17 → 0 at #238 (15),
|
|
584
|
+
`00118` 6 → 0 at #238 (6), `00001` 3 → 0 at #327 (3). The PromptInject
|
|
585
|
+
row stayed at 100% across the same span, but what holds it up changed:
|
|
586
|
+
at 3.5.2 `ATR-2026-00118` matched 1,060 of the 1,080 samples and `00442`
|
|
587
|
+
another 195; #238 and #309 took both to zero. Neither fact was visible
|
|
588
|
+
while the breakdown said "unknown", and the row itself sat at its stale
|
|
589
|
+
3.5.2 value for the six weeks in between.
|
|
590
|
+
Both corpora are 100% adversarial, so the `Precision` and `FP rate`
|
|
591
|
+
columns are properties of the corpus, not measurements — read them
|
|
592
|
+
together with the benign-gate FP counts above, never alone.
|
|
593
|
+
|
|
594
|
+
[^stdcorpora]: Until 2026-08-05 these three rows were **not produced by the ATR
|
|
595
|
+
engine**. `scripts/eval-std-corpora.ts` walked `rules/` with a YAML parser,
|
|
596
|
+
kept only `operator: regex` conditions, flattened every condition of every
|
|
597
|
+
rule into one implicit OR, and tested each pattern with its own
|
|
598
|
+
`new RegExp(value, 'i')` against the raw sample string. That shadow matcher
|
|
599
|
+
had no status gate (it counted `status: draft` rules the engine skips), no
|
|
600
|
+
lane gate, no field resolution (a condition declared on `tool_response` was
|
|
601
|
+
tested against natural-language prose), no `condition: all` handling, no
|
|
602
|
+
non-regex operators, and — the decisive defect — the wrong regex flags.
|
|
603
|
+
`src/engine.ts` compiles a pattern containing `\u{` with the `u` flag;
|
|
604
|
+
the shadow matcher always used `i`. Without `u`, the codepoint class
|
|
605
|
+
`[\u{E0001}\u{E007F}]` in `ATR-2026-00258` is read by JavaScript as the
|
|
606
|
+
literal character class `[u{E0017F}]` — "contains any of `u { E 0 1 } 7 F`"
|
|
607
|
+
— so it matched any English text containing the letter `e`. That single
|
|
608
|
+
miscompiled condition accounted for **4,914 of the 4,914 hh-rlhf
|
|
609
|
+
detections, 56 of 56 on OWASP, and 182 of 182 on ATLAS**; with it excluded
|
|
610
|
+
the same shadow matcher scored 0.2% / 3.6% / 8.8%. The old rows measured
|
|
611
|
+
how many samples contain a vowel. The runner now goes through `ATREngine`
|
|
612
|
+
and the canonical event shapes in `scripts/lib/corpus-event.ts` — the same
|
|
613
|
+
entry point the false-positive gates use. Reproduce with
|
|
614
|
+
`npx tsx scripts/eval-std-corpora.ts`. Read the new numbers with the same
|
|
615
|
+
scope caveat as `PINT-format`: on ATLAS, `ATR-2026-00061` alone accounts
|
|
616
|
+
for 59 of the 71 detections (32.4% of the corpus), and ATLAS procedures are
|
|
617
|
+
prose *descriptions* of attacks rather than attack payloads, so this row
|
|
618
|
+
measures ATR against attack write-ups, not against traffic.
|
|
395
619
|
|
|
396
620
|
Two `garak` rows are deliberate: the headline `garak` source tracks NVIDIA's
|
|
397
|
-
in-the-wild jailbreak corpus (narrow, the ~
|
|
398
|
-
refreshed 2026-
|
|
621
|
+
in-the-wild jailbreak corpus (narrow, the ~92% number ATR cites publicly,
|
|
622
|
+
refreshed 2026-08-15 against ATR 3.5.12), while `garak-full` tracks
|
|
399
623
|
every probe family in upstream garak (broad, includes families like
|
|
400
624
|
`badchars`, `dra`, `encoding` that ATR's regex layer intentionally does
|
|
401
625
|
not target). Both are valid measurements against different corpora; they
|
|
402
626
|
are kept as separate streams so the broad-corpus number does not silently
|
|
403
627
|
overwrite the headline.
|
|
404
628
|
|
|
405
|
-
The single-digit recall on AdvBench / HarmBench / JailbreakBench is
|
|
406
|
-
and expected. Those
|
|
629
|
+
The single-digit recall on AdvBench / HarmBench / JailbreakBench / hh-rlhf is
|
|
630
|
+
honest and expected. Those four corpora test **LLM safety alignment** (does the
|
|
407
631
|
model refuse harmful requests like "explain how to make a bomb"), not
|
|
408
632
|
**prompt-injection detection** (the surface ATR's regex layer targets).
|
|
409
633
|
ATR's near-zero recall on these corpora confirms the layering thesis:
|
|
410
634
|
regex catches structured attack patterns, alignment + content moderation
|
|
411
635
|
catch natural-language harm requests. The numbers are recorded for
|
|
412
636
|
completeness and so any future ATR rule additions in the harm-category
|
|
413
|
-
space can be measured against a documented baseline.
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
`
|
|
637
|
+
space can be measured against a documented baseline. `hh-rlhf` is Anthropic's
|
|
638
|
+
red-team-attempts set — the same genre as the other three — and its 1.5% now
|
|
639
|
+
sits with their 2.1% / 2.8% / 6.0% instead of contradicting them at 99.1%.
|
|
640
|
+
|
|
641
|
+
Conventions: 100%-adversarial corpora contain no benign samples, so they have
|
|
642
|
+
no true-negative population and **`precision` and `fp_rate` cannot be computed
|
|
643
|
+
from them**. The measurement schema requires numbers, so those rows record the
|
|
644
|
+
convention `precision 1` / `fp_rate 0`. Read the `Precision` and `FP rate`
|
|
645
|
+
columns as "not applicable to this corpus", not as results — the real
|
|
646
|
+
precision numbers come from the benign gate, lane-keyed, below. Wild-scan has
|
|
647
|
+
no ground-truth labels either; its `precision` column reports a precision floor
|
|
648
|
+
computed as `confirmed_malware / flagged`. Every cell is sourced from a
|
|
649
|
+
specific measurement file — see `data/measurements/<source>/latest.json` for
|
|
650
|
+
the file path and `metadata.measurement_file` in `stats.json` for the absolute
|
|
651
|
+
repo path.
|
|
421
652
|
|
|
422
653
|
False-positive rate is lane-keyed as of v3.5.0, not a single overall figure.
|
|
423
654
|
ATR ships detection lanes (`enforce` / `alert` / `hunt`); on a 65K-sample
|
|
@@ -533,7 +764,7 @@ The 96,096-skill ecosystem scan was made possible by the maintainers of OpenClaw
|
|
|
533
764
|
### Normative
|
|
534
765
|
|
|
535
766
|
- [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119) — Key words for use in RFCs to Indicate Requirement Levels.
|
|
536
|
-
- [
|
|
767
|
+
- [SPEC.md](SPEC.md) — ATR rule format specification, v1.0 Draft.
|
|
537
768
|
- [spec/atr-schema.yaml](spec/atr-schema.yaml) — Authoritative machine-readable schema.
|
|
538
769
|
|
|
539
770
|
### Informative
|
|
@@ -5,17 +5,58 @@
|
|
|
5
5
|
* to a PlatformAdapter. Handles per-action errors so one failure
|
|
6
6
|
* does not block the rest.
|
|
7
7
|
*
|
|
8
|
+
* ENFORCEMENT GATE: actions above the OBSERVE blast-radius tier are dispatched
|
|
9
|
+
* only when the operator has enabled blocking (`blocking: true` here; the CLI
|
|
10
|
+
* maps ATR_BLOCKING / `atr guard --blocking` onto it). Without it they are
|
|
11
|
+
* recorded as suppressed and the adapter is never called. See
|
|
12
|
+
* src/enforcement.ts for why this is opt-in and
|
|
13
|
+
* src/quality/action-eligibility.ts for the tier ladder this gate reads.
|
|
14
|
+
*
|
|
8
15
|
* @module agent-threat-rules/action-executor
|
|
9
16
|
*/
|
|
10
|
-
import type { ActionResult, ExecutionContext, PlatformAdapter } from "./types.js";
|
|
17
|
+
import type { ATRAction, ActionResult, ExecutionContext, PlatformAdapter } from "./types.js";
|
|
18
|
+
/**
|
|
19
|
+
* Map action names to PlatformAdapter method names.
|
|
20
|
+
*
|
|
21
|
+
* Exported because it is the authoritative list of actions this engine can
|
|
22
|
+
* actually dispatch. Rule files also carry SPEC Appendix A vocabulary
|
|
23
|
+
* (`revoke_credential`, `quarantine_artifact`, ...) that has no entry here and
|
|
24
|
+
* therefore never reaches an adapter — see executeOne's "Unknown action" branch.
|
|
25
|
+
* src/quality/action-eligibility.ts ranks exactly these keys by blast radius, and
|
|
26
|
+
* tests/action-eligibility.test.ts pins the two sets equal, so implementing a new
|
|
27
|
+
* adapter method forces an explicit decision about how destructive it is.
|
|
28
|
+
*/
|
|
29
|
+
export declare const ACTION_METHOD_MAP: Readonly<Record<ATRAction, keyof PlatformAdapter>>;
|
|
11
30
|
export interface ActionExecutorConfig {
|
|
12
31
|
readonly adapter: PlatformAdapter;
|
|
13
32
|
readonly dryRun?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Operator directive permitting enforcement actions. OFF BY DEFAULT.
|
|
35
|
+
*
|
|
36
|
+
* When false, any action above the OBSERVE blast-radius tier
|
|
37
|
+
* (block_input / block_output / block_tool / reduce_permissions /
|
|
38
|
+
* reset_context / quarantine_session / kill_agent) is refused before the
|
|
39
|
+
* adapter is touched; OBSERVE actions (alert / snapshot / shadow / escalate)
|
|
40
|
+
* run exactly as before.
|
|
41
|
+
*
|
|
42
|
+
* This field is the only input — the executor does not read `ATR_BLOCKING`.
|
|
43
|
+
* A non-boolean throws rather than being coerced: `blocking: "false"` is
|
|
44
|
+
* truthy in JavaScript and would otherwise enable enforcement. `atr guard`
|
|
45
|
+
* resolves the environment itself and passes the result here.
|
|
46
|
+
*
|
|
47
|
+
* This is the runtime half of SPEC.md §5.5 ("Engines MUST NOT execute
|
|
48
|
+
* response actions automatically without an explicit configuration directive
|
|
49
|
+
* from the operator"). Until it existed, `atr guard` built an executor
|
|
50
|
+
* unconditionally and dispatched every declared action, including on a verdict
|
|
51
|
+
* of `allow`.
|
|
52
|
+
*/
|
|
53
|
+
readonly blocking?: boolean;
|
|
14
54
|
readonly onActionComplete?: (result: ActionResult) => void;
|
|
15
55
|
}
|
|
16
56
|
export declare class ActionExecutor {
|
|
17
57
|
private readonly adapter;
|
|
18
58
|
private readonly dryRun;
|
|
59
|
+
private readonly blocking;
|
|
19
60
|
private readonly onActionComplete?;
|
|
20
61
|
constructor(config: ActionExecutorConfig);
|
|
21
62
|
/**
|
|
@@ -40,5 +81,7 @@ export declare class ActionExecutor {
|
|
|
40
81
|
getAdapterName(): string;
|
|
41
82
|
/** Check if dry-run mode is enabled */
|
|
42
83
|
isDryRun(): boolean;
|
|
84
|
+
/** Is this executor permitted to dispatch enforcement actions? */
|
|
85
|
+
isBlocking(): boolean;
|
|
43
86
|
}
|
|
44
87
|
//# sourceMappingURL=action-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAmBpB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,eAAe,CAAC,CAYhF,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC5D;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAiC;gBAEvD,MAAM,EAAE,oBAAoB;IAOxC;;;;;;;;OAQG;IACG,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAgB1E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;YACW,UAAU;IAmExB,2CAA2C;IAC3C,cAAc,IAAI,MAAM;IAIxB,uCAAuC;IACvC,QAAQ,IAAI,OAAO;IAInB,kEAAkE;IAClE,UAAU,IAAI,OAAO;CAGtB"}
|
package/dist/action-executor.js
CHANGED
|
@@ -5,8 +5,17 @@
|
|
|
5
5
|
* to a PlatformAdapter. Handles per-action errors so one failure
|
|
6
6
|
* does not block the rest.
|
|
7
7
|
*
|
|
8
|
+
* ENFORCEMENT GATE: actions above the OBSERVE blast-radius tier are dispatched
|
|
9
|
+
* only when the operator has enabled blocking (`blocking: true` here; the CLI
|
|
10
|
+
* maps ATR_BLOCKING / `atr guard --blocking` onto it). Without it they are
|
|
11
|
+
* recorded as suppressed and the adapter is never called. See
|
|
12
|
+
* src/enforcement.ts for why this is opt-in and
|
|
13
|
+
* src/quality/action-eligibility.ts for the tier ladder this gate reads.
|
|
14
|
+
*
|
|
8
15
|
* @module agent-threat-rules/action-executor
|
|
9
16
|
*/
|
|
17
|
+
import { isEnforcementAction, blockingFromConfig } from "./enforcement.js";
|
|
18
|
+
import { TIER_NAMES, actionTier } from "./quality/action-eligibility.js";
|
|
10
19
|
/** Priority order: lower number = higher priority (executed first) */
|
|
11
20
|
const ACTION_PRIORITY = {
|
|
12
21
|
kill_agent: 0,
|
|
@@ -21,8 +30,18 @@ const ACTION_PRIORITY = {
|
|
|
21
30
|
snapshot: 9,
|
|
22
31
|
shadow: 10,
|
|
23
32
|
};
|
|
24
|
-
/**
|
|
25
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Map action names to PlatformAdapter method names.
|
|
35
|
+
*
|
|
36
|
+
* Exported because it is the authoritative list of actions this engine can
|
|
37
|
+
* actually dispatch. Rule files also carry SPEC Appendix A vocabulary
|
|
38
|
+
* (`revoke_credential`, `quarantine_artifact`, ...) that has no entry here and
|
|
39
|
+
* therefore never reaches an adapter — see executeOne's "Unknown action" branch.
|
|
40
|
+
* src/quality/action-eligibility.ts ranks exactly these keys by blast radius, and
|
|
41
|
+
* tests/action-eligibility.test.ts pins the two sets equal, so implementing a new
|
|
42
|
+
* adapter method forces an explicit decision about how destructive it is.
|
|
43
|
+
*/
|
|
44
|
+
export const ACTION_METHOD_MAP = {
|
|
26
45
|
block_input: "blockInput",
|
|
27
46
|
block_output: "blockOutput",
|
|
28
47
|
block_tool: "blockTool",
|
|
@@ -38,10 +57,12 @@ const ACTION_METHOD_MAP = {
|
|
|
38
57
|
export class ActionExecutor {
|
|
39
58
|
adapter;
|
|
40
59
|
dryRun;
|
|
60
|
+
blocking;
|
|
41
61
|
onActionComplete;
|
|
42
62
|
constructor(config) {
|
|
43
63
|
this.adapter = config.adapter;
|
|
44
64
|
this.dryRun = config.dryRun ?? false;
|
|
65
|
+
this.blocking = blockingFromConfig(config.blocking);
|
|
45
66
|
this.onActionComplete = config.onActionComplete;
|
|
46
67
|
}
|
|
47
68
|
/**
|
|
@@ -81,6 +102,20 @@ export class ActionExecutor {
|
|
|
81
102
|
*/
|
|
82
103
|
async executeOne(action, context) {
|
|
83
104
|
const timestamp = new Date().toISOString();
|
|
105
|
+
// Enforcement gate — checked BEFORE dry-run, because "would execute" is
|
|
106
|
+
// false for an action that enforcement policy forbids. The adapter is never
|
|
107
|
+
// reached, so a downstream adapter that really blocks cannot act while the
|
|
108
|
+
// hook channel is telling the host nothing.
|
|
109
|
+
if (!this.blocking && isEnforcementAction(action)) {
|
|
110
|
+
return Object.freeze({
|
|
111
|
+
action,
|
|
112
|
+
success: true,
|
|
113
|
+
message: `[advisory] Suppressed ${action} (tier ${TIER_NAMES[actionTier(action)]}): ` +
|
|
114
|
+
`blocking is disabled. Enable it with blocking: true (atr guard: ` +
|
|
115
|
+
`--blocking or ATR_BLOCKING=1).`,
|
|
116
|
+
timestamp,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
84
119
|
if (this.dryRun) {
|
|
85
120
|
return Object.freeze({
|
|
86
121
|
action,
|
|
@@ -128,5 +163,9 @@ export class ActionExecutor {
|
|
|
128
163
|
isDryRun() {
|
|
129
164
|
return this.dryRun;
|
|
130
165
|
}
|
|
166
|
+
/** Is this executor permitted to dispatch enforcement actions? */
|
|
167
|
+
isBlocking() {
|
|
168
|
+
return this.blocking;
|
|
169
|
+
}
|
|
131
170
|
}
|
|
132
171
|
//# sourceMappingURL=action-executor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-executor.js","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"action-executor.js","sourceRoot":"","sources":["../src/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEzE,sEAAsE;AACtE,MAAM,eAAe,GAAwC;IAC3D,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,CAAC;IACb,kBAAkB,EAAE,CAAC;IACrB,kBAAkB,EAAE,CAAC;IACrB,aAAa,EAAE,CAAC;IAChB,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,EAAE;CACX,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAuD;IACnF,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,aAAa;IAC3B,UAAU,EAAE,WAAW;IACvB,kBAAkB,EAAE,mBAAmB;IACvC,aAAa,EAAE,cAAc;IAC7B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,kBAAkB,EAAE,mBAAmB;IACvC,UAAU,EAAE,WAAW;CACxB,CAAC;AA6BF,MAAM,OAAO,cAAc;IACR,OAAO,CAAkB;IACzB,MAAM,CAAU;IAChB,QAAQ,CAAU;IAClB,gBAAgB,CAAkC;IAEnE,YAAY,MAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO,CAAC,OAAyB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAErB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,OAA6B;QAE7B,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,GAAG,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACtB,MAAiB,EACjB,OAAyB;QAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,wEAAwE;QACxE,4EAA4E;QAC5E,2EAA2E;QAC3E,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,MAAM;gBACN,OAAO,EAAE,IAAI;gBACb,OAAO,EACL,yBAAyB,MAAM,UAAU,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK;oBAC5E,kEAAkE;oBAClE,gCAAgC;gBAClC,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,MAAM;gBACN,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,4BAA4B,MAAM,EAAE;gBAC7C,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,MAAM,CAAC,MAAM,CAAC;oBACnB,MAAM;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,mBAAmB,MAAM,EAAE;oBACpC,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAEzB,CAAC;YAEd,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAC,MAAM,CAAC;oBACnB,MAAM;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,yBAAyB,UAAU,EAAE;oBAC3E,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAED,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,MAAM;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,WAAW,MAAM,aAAa,OAAO,EAAE;gBAChD,SAAS;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,kEAAkE;IAClE,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* @module agent-threat-rules/cli/scan-handler
|
|
6
6
|
*/
|
|
7
7
|
import type { ScanType } from '../types.js';
|
|
8
|
+
import type { Lane } from '../quality/rule-contract.js';
|
|
8
9
|
export interface ScanOptions {
|
|
9
10
|
readonly rules?: string;
|
|
10
11
|
readonly json?: boolean;
|
|
@@ -20,6 +21,14 @@ export interface ScanOptions {
|
|
|
20
21
|
readonly semanticModel?: string;
|
|
21
22
|
readonly semanticTimeout?: string;
|
|
22
23
|
readonly semanticNoJsonMode?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Detection lane (which rule maturities may fire). Undefined means the
|
|
26
|
+
* engine's built-in default; `src/cli.ts` resolves `--lane` and `ATR_LANE`
|
|
27
|
+
* and always passes an explicit value, because the engine itself no longer
|
|
28
|
+
* reads the environment. Scanning never blocks anything, so the blocking
|
|
29
|
+
* opt-in has no meaning here; only the lane does.
|
|
30
|
+
*/
|
|
31
|
+
readonly lane?: Lane;
|
|
23
32
|
}
|
|
24
33
|
/** Detect whether the target is an MCP event JSON or SKILL.md file/directory. */
|
|
25
34
|
export declare function detectInputType(targetPath: string): ScanType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-handler.d.ts","sourceRoot":"","sources":["../../src/cli/scan-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAoC,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"scan-handler.d.ts","sourceRoot":"","sources":["../../src/cli/scan-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAoC,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAsBxD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;CACtB;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CA0B5D;AAED,6FAA6F;AAC7F,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAoDf"}
|
package/dist/cli/scan-handler.js
CHANGED
|
@@ -119,7 +119,12 @@ async function scanMcpEvents(eventsPath, rulesDir, options, reporter) {
|
|
|
119
119
|
process.exit(1);
|
|
120
120
|
}
|
|
121
121
|
const semantic = createSemanticJudgeFromScanOptions(options);
|
|
122
|
-
const engine = new ATREngine({
|
|
122
|
+
const engine = new ATREngine({
|
|
123
|
+
rulesDir,
|
|
124
|
+
reporter,
|
|
125
|
+
semanticJudge: semantic.judge,
|
|
126
|
+
...(options.lane ? { lane: options.lane } : {}),
|
|
127
|
+
});
|
|
123
128
|
await engine.loadRules();
|
|
124
129
|
if (semantic.enabled && !options.json && !options.sarif) {
|
|
125
130
|
console.error(`${DIM}Semantic judge: enabled for method=semantic rules${RESET}`);
|
|
@@ -195,7 +200,12 @@ async function scanSkillFiles(targetPath, rulesDir, options, reporter) {
|
|
|
195
200
|
process.exit(1);
|
|
196
201
|
}
|
|
197
202
|
const semantic = createSemanticJudgeFromScanOptions(options);
|
|
198
|
-
const engine = new ATREngine({
|
|
203
|
+
const engine = new ATREngine({
|
|
204
|
+
rulesDir,
|
|
205
|
+
reporter,
|
|
206
|
+
semanticJudge: semantic.judge,
|
|
207
|
+
...(options.lane ? { lane: options.lane } : {}),
|
|
208
|
+
});
|
|
199
209
|
await engine.loadRules();
|
|
200
210
|
if (semantic.enabled && !options.json && !options.sarif) {
|
|
201
211
|
console.error(`${DIM}Semantic judge: enabled for method=semantic rules${RESET}`);
|