agent-threat-rules 3.5.10 → 3.5.12
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 +164 -29
- package/dist/action-executor.d.ts +13 -1
- package/dist/action-executor.d.ts.map +1 -1
- package/dist/action-executor.js +12 -2
- package/dist/action-executor.js.map +1 -1
- package/dist/cli.js +68 -12
- 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/engine.d.ts.map +1 -1
- package/dist/engine.js +81 -17
- 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/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/package.json +7 -3
- package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +16 -17
- 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 +2 -2
- 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 +25 -26
- package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +22 -9
- 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 +22 -9
- 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 +2 -2
- 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 +3 -3
- 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/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 +28 -26
- 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 +3 -4
- 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 +10 -7
- 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 +6 -6
- 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 +6 -7
- 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-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
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ATR Quality Standard — Response-action eligibility
|
|
3
|
+
*
|
|
4
|
+
* The fifth axis of "clean must never mean never looked at it". The four before
|
|
5
|
+
* it (fieldCoverage, statusCoverage, skillPathCoverage, wild-measurement) all
|
|
6
|
+
* ask whether a rule's precision was ever measured. This one asks what a rule is
|
|
7
|
+
* allowed to DO with the precision it actually demonstrated.
|
|
8
|
+
*
|
|
9
|
+
* THE DEFECT THIS MODULE EXISTS TO PREVENT
|
|
10
|
+
*
|
|
11
|
+
* `src/action-executor.ts` contains no maturity filter and no lane filter. Grep
|
|
12
|
+
* it: the words `lane` and `maturity` do not appear. The lane gate in
|
|
13
|
+
* `src/engine.ts` decides whether a rule may FIRE; once it has fired,
|
|
14
|
+
* `computeVerdict()` unions `response.actions` across every match and the
|
|
15
|
+
* executor runs all of them in priority order. So the lane named "alert" —
|
|
16
|
+
* documented as the analyst/correlation lane — executes `kill_agent` exactly as
|
|
17
|
+
* readily as the enforce lane does.
|
|
18
|
+
*
|
|
19
|
+
* Measured, not reasoned (see docs/RESPONSE-ACTION-ELIGIBILITY.md for the run):
|
|
20
|
+
* ATR-2026-00062 is `maturity: test`, false-positives on 209 of 5,352 benign
|
|
21
|
+
* samples (3.91%), and declares `kill_agent`. Driven through
|
|
22
|
+
* `engine.evaluateWithVerdict()` at `lane: 'alert'` with a recording adapter and
|
|
23
|
+
* a real benign corpus document, all five of its actions executed —
|
|
24
|
+
* `kill_agent` first, because it has the highest executor priority.
|
|
25
|
+
*
|
|
26
|
+
* WHY THIS IS THE ONE ZERO-COST INTERVENTION
|
|
27
|
+
*
|
|
28
|
+
* Every other way to reduce false-positive damage costs recall. Tightening a
|
|
29
|
+
* regex on this same rule set traded a 64-95% FP reduction for a 64-67% recall
|
|
30
|
+
* loss. Removing an action a rule never earned costs exactly zero recall: the
|
|
31
|
+
* rule still fires, still matches, still reports, still alerts. It just stops
|
|
32
|
+
* destroying a session it was never shown to be right about.
|
|
33
|
+
*
|
|
34
|
+
* WHAT IT DOES NOT BUY (measured, so it cannot be overclaimed)
|
|
35
|
+
*
|
|
36
|
+
* `response.actions` feeds the ActionExecutor. It does NOT feed the hook
|
|
37
|
+
* verdict: `src/verdict.ts` computeVerdict derives allow/ask/deny from severity
|
|
38
|
+
* and confidence alone, and `toClaudeCodePreToolUse` maps that verdict to
|
|
39
|
+
* `permissionDecision`. Stripping every action off a `severity: critical` rule
|
|
40
|
+
* leaves `permissionDecision: deny` unchanged. This module governs executed
|
|
41
|
+
* response actions, not the hook's block decision.
|
|
42
|
+
*
|
|
43
|
+
* THE LADDER
|
|
44
|
+
*
|
|
45
|
+
* Actions are ranked by blast radius — what survives the action, not how loud it
|
|
46
|
+
* is. The ranking is deliberately NOT the executor's priority order, which
|
|
47
|
+
* encodes urgency (kill_agent runs first so it cannot be pre-empted), not harm.
|
|
48
|
+
*
|
|
49
|
+
* @module agent-threat-rules/quality/action-eligibility
|
|
50
|
+
*/
|
|
51
|
+
/** Blast-radius tiers, ascending. A rule may declare actions at or below its earned tier. */
|
|
52
|
+
export declare const ACTION_TIERS: Readonly<{
|
|
53
|
+
/** Nothing about the agent's execution changes. Pure observation and routing. */
|
|
54
|
+
readonly OBSERVE: 0;
|
|
55
|
+
/** One operation is denied. The agent survives, retains state, and can retry. */
|
|
56
|
+
readonly INTERRUPT: 1;
|
|
57
|
+
/** Session-wide state is altered for the remainder of the run. The agent survives, degraded. */
|
|
58
|
+
readonly DEGRADE: 2;
|
|
59
|
+
/** The session or the agent is destroyed. Unrecoverable; in-flight work is lost. */
|
|
60
|
+
readonly TERMINATE: 3;
|
|
61
|
+
}>;
|
|
62
|
+
export type ActionTier = (typeof ACTION_TIERS)[keyof typeof ACTION_TIERS];
|
|
63
|
+
/** Human-readable tier names, indexed by tier. */
|
|
64
|
+
export declare const TIER_NAMES: readonly string[];
|
|
65
|
+
/** Every action name this module assigns a tier to — the dispatchable set. */
|
|
66
|
+
export declare const TIERED_ACTIONS: readonly string[];
|
|
67
|
+
/**
|
|
68
|
+
* Blast-radius tier of an action name.
|
|
69
|
+
*
|
|
70
|
+
* An unrecognised action is OBSERVE, and that is safe rather than lenient:
|
|
71
|
+
* `ACTION_METHOD_MAP` in src/action-executor.ts has no entry for it, so the
|
|
72
|
+
* executor returns `Unknown action` without dispatching. Four such names are on
|
|
73
|
+
* disk today (`require_human_review`, `quarantine_artifact`, `rate_limit_source`,
|
|
74
|
+
* `log_alert`); they are inert, not destructive.
|
|
75
|
+
*/
|
|
76
|
+
export declare function actionTier(action: string): ActionTier;
|
|
77
|
+
/** Highest blast-radius tier present in a list of actions. */
|
|
78
|
+
export declare function highestTier(actions: readonly string[]): ActionTier;
|
|
79
|
+
/**
|
|
80
|
+
* Percentage false-positive rate at or below which the published standard says a
|
|
81
|
+
* rule is production-grade. docs/QUALITY-STANDARD.md, STABLE promotion criteria:
|
|
82
|
+
* "Wild FP rate <= 0.5%". docs/proposals/001-atr-quality-standard-rfc.md §3
|
|
83
|
+
* repeats it as a hard requirement for `stable`.
|
|
84
|
+
*/
|
|
85
|
+
export declare const STABLE_FP_CEILING_PCT = 0.5;
|
|
86
|
+
/**
|
|
87
|
+
* Percentage false-positive rate at which the published standard withdraws
|
|
88
|
+
* production status. docs/QUALITY-STANDARD.md, STABLE demotion criteria:
|
|
89
|
+
* "Wild FP rate > 2% -> Automatic demotion". A rule the standard would demote
|
|
90
|
+
* out of the blocking tier must not keep blocking actions while it sits there.
|
|
91
|
+
*/
|
|
92
|
+
export declare const DEMOTION_FP_PCT = 2;
|
|
93
|
+
/**
|
|
94
|
+
* Stable fingerprint of everything that decides whether a rule fires.
|
|
95
|
+
*
|
|
96
|
+
* A false-positive count is a measurement OF a detection, not of a rule id. Edit
|
|
97
|
+
* the conditions and the number on file describes a rule that no longer exists —
|
|
98
|
+
* the same way a green CI run expires when the corpus or the measuring tool moves
|
|
99
|
+
* underneath it. Consumers store this alongside the count and treat a mismatch as
|
|
100
|
+
* "unmeasured", which by the policy below caps the rule at OBSERVE until someone
|
|
101
|
+
* re-measures it.
|
|
102
|
+
*
|
|
103
|
+
* Keys are sorted recursively so that YAML reordering, which changes nothing the
|
|
104
|
+
* engine sees, does not invalidate a measurement. `scan_target` is folded in
|
|
105
|
+
* because it selects the skill-path compound gate and therefore changes which
|
|
106
|
+
* inputs can reach the rule at all.
|
|
107
|
+
*/
|
|
108
|
+
export declare function detectionFingerprint(rule: {
|
|
109
|
+
detection?: unknown;
|
|
110
|
+
tags?: {
|
|
111
|
+
scan_target?: unknown;
|
|
112
|
+
};
|
|
113
|
+
agent_source?: {
|
|
114
|
+
type?: unknown;
|
|
115
|
+
};
|
|
116
|
+
}): string;
|
|
117
|
+
/** A false-positive measurement, or the explicit absence of one. */
|
|
118
|
+
export interface FpEvidence {
|
|
119
|
+
/**
|
|
120
|
+
* False positives observed. `undefined` means no measurement exists — which is
|
|
121
|
+
* NOT the same as zero and must never be coerced to it (see wild-measurement.ts
|
|
122
|
+
* for the `?? 0` collapse that put `wild_fp_rate: 0` on 230 never-measured rules).
|
|
123
|
+
*/
|
|
124
|
+
readonly fpCount?: number;
|
|
125
|
+
/** Benign samples the count was observed over. Required to interpret fpCount. */
|
|
126
|
+
readonly sampleCount?: number;
|
|
127
|
+
/**
|
|
128
|
+
* True when the harness reported that some of the rule's declared conditions
|
|
129
|
+
* could not be exercised at all (fieldCoverage / trace / behavioral). A partial
|
|
130
|
+
* measurement bounds nothing, so it is treated as no measurement.
|
|
131
|
+
*/
|
|
132
|
+
readonly partial?: boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Maturity as recorded at measurement time. `stable` is the only maturity the
|
|
135
|
+
* published ladder calls "safe for blocking actions in enterprise deployments"
|
|
136
|
+
* (docs/QUALITY-STANDARD.md) and the only one the enforce lane admits.
|
|
137
|
+
*/
|
|
138
|
+
readonly maturity?: string;
|
|
139
|
+
}
|
|
140
|
+
/** Why a given tier ceiling was assigned. Carried into rule YAML and gate output. */
|
|
141
|
+
export interface EligibilityDecision {
|
|
142
|
+
readonly maxTier: ActionTier;
|
|
143
|
+
readonly fpRatePct: number | null;
|
|
144
|
+
readonly reason: string;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* True when a count and its denominator are both present and usable.
|
|
148
|
+
*
|
|
149
|
+
* Says nothing about completeness — `partial` is handled separately, because a
|
|
150
|
+
* partial measurement that already found false positives is real evidence of
|
|
151
|
+
* imprecision (the true rate can only be higher), while a partial measurement
|
|
152
|
+
* that found none is evidence of nothing.
|
|
153
|
+
*/
|
|
154
|
+
export declare function hasCount(ev: FpEvidence): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* True when the evidence can support raising a rule above the observe tier.
|
|
157
|
+
*
|
|
158
|
+
* A partial run with zero hits cannot: the harness said out loud that it never
|
|
159
|
+
* exercised some of the rule's conditions, so its silence is an unasked question,
|
|
160
|
+
* not an answer. A partial run WITH hits can, and does — the hits happened.
|
|
161
|
+
*/
|
|
162
|
+
export declare function isMeasured(ev: FpEvidence): boolean;
|
|
163
|
+
/**
|
|
164
|
+
* The policy: measured false-positive evidence -> highest action tier a rule may
|
|
165
|
+
* declare.
|
|
166
|
+
*
|
|
167
|
+
* The two numeric lines are NOT chosen here. They are the two the project already
|
|
168
|
+
* published, lifted unchanged:
|
|
169
|
+
*
|
|
170
|
+
* <= 0.5% the STABLE promotion ceiling (QUALITY-STANDARD.md, RFC-001 §3)
|
|
171
|
+
* > 2.0% the STABLE automatic-demotion trigger (QUALITY-STANDARD.md)
|
|
172
|
+
*
|
|
173
|
+
* Mapping them onto blast radius:
|
|
174
|
+
*
|
|
175
|
+
* no measurement -> OBSERVE absence of evidence is not evidence; a
|
|
176
|
+
* gate that cannot read a measurement must
|
|
177
|
+
* refuse, not pass. A PARTIAL run that found
|
|
178
|
+
* nothing lands here too — the harness said
|
|
179
|
+
* it never exercised some conditions, so its
|
|
180
|
+
* silence is an unasked question. A partial
|
|
181
|
+
* run that DID find hits is graded on them:
|
|
182
|
+
* the hits happened, and the true rate can
|
|
183
|
+
* only be higher
|
|
184
|
+
* > 2% -> OBSERVE the standard's own demotion line: at this
|
|
185
|
+
* rate it would be pulled out of the
|
|
186
|
+
* blocking tier, so it does not keep
|
|
187
|
+
* blocking actions while it sits there
|
|
188
|
+
* 0.5% - 2% -> INTERRUPT below the demotion line but above the
|
|
189
|
+
* production ceiling: a recoverable,
|
|
190
|
+
* per-operation denial is proportionate;
|
|
191
|
+
* session-wide state changes are not
|
|
192
|
+
* > 0 and <= 0.5% -> DEGRADE meets the production FP ceiling, yet
|
|
193
|
+
* demonstrably still wrong sometimes — a
|
|
194
|
+
* recoverable degradation is earned, an
|
|
195
|
+
* unrecoverable termination is not
|
|
196
|
+
* 0 FP and maturity -> TERMINATE the only evidence level that earns an
|
|
197
|
+
* stable irreversible action; see below
|
|
198
|
+
*
|
|
199
|
+
* WHY TERMINATE NEEDS MORE THAN 0 FP ON THIS CORPUS
|
|
200
|
+
*
|
|
201
|
+
* Zero observed events in n trials does not mean zero rate. The rule of three
|
|
202
|
+
* puts the 95% upper bound at 3/n: on 5,352 benign samples, a clean sweep only
|
|
203
|
+
* certifies a true FP rate below roughly 0.056%. At an agent fleet's event
|
|
204
|
+
* volume that is still a real number of destroyed sessions. The published ladder
|
|
205
|
+
* already names the extra evidence needed to close that gap — `stable` requires
|
|
206
|
+
* `wild_samples >= 1000`, `wild_fp_rate <= 0.5%`, `confidence >= 80` and two
|
|
207
|
+
* maintainer approvals — and it is the same ladder that says STABLE is the tier
|
|
208
|
+
* "safe for blocking actions in enterprise deployments" while EXPERIMENTAL is
|
|
209
|
+
* "safe for evaluation and non-blocking alerting". So TERMINATE requires both: a
|
|
210
|
+
* clean sweep of this corpus AND the maturity the standard reserves for
|
|
211
|
+
* production blocking.
|
|
212
|
+
*/
|
|
213
|
+
export declare function maxTierFor(ev: FpEvidence): EligibilityDecision;
|
|
214
|
+
/** Actions in `actions` whose tier exceeds `maxTier`, in declaration order. */
|
|
215
|
+
export declare function ineligibleActions(actions: readonly string[], maxTier: ActionTier): readonly string[];
|
|
216
|
+
/**
|
|
217
|
+
* The eligible subset, order preserved.
|
|
218
|
+
*
|
|
219
|
+
* `alert` is appended when the filter would otherwise leave a rule with nothing
|
|
220
|
+
* to do: a detection that reports nothing is worse than one that over-reports,
|
|
221
|
+
* and OBSERVE-tier reporting is available at every evidence level by definition.
|
|
222
|
+
*/
|
|
223
|
+
export declare function eligibleActions(actions: readonly string[], maxTier: ActionTier): readonly string[];
|
|
224
|
+
/**
|
|
225
|
+
* Content digest of the benign corpora a measurement was taken on.
|
|
226
|
+
*
|
|
227
|
+
* `detectionFingerprint` stops a rule drifting out from under its number. It
|
|
228
|
+
* says nothing about the number, and the measurement file is committed — so in
|
|
229
|
+
* review, editing `fp_count` from 2814 to 0 plus one `maturity` line handed a
|
|
230
|
+
* rule that false-positives on 52.58% of the corpus a `kill_agent`, with the
|
|
231
|
+
* whole suite still green. "Do not hand-edit" is a convention, not a control.
|
|
232
|
+
*
|
|
233
|
+
* This lives here, exported, so the producer and the gate cannot drift apart:
|
|
234
|
+
* two copies of a hashing routine is exactly the shape of defect this policy
|
|
235
|
+
* exists to close.
|
|
236
|
+
*
|
|
237
|
+
* WHAT THIS DOES NOT CLOSE, stated plainly because the gap is easy to miss:
|
|
238
|
+
* editing `fp_count` does not touch the corpus, so the digest still matches and
|
|
239
|
+
* the gate still passes. Verified by attack — 2814 -> 0 sails through. The
|
|
240
|
+
* digest closes corpus drift (the measurement describing a corpus that has
|
|
241
|
+
* since moved); it does nothing about number drift. Only regeneration closes
|
|
242
|
+
* that, which is why .github/workflows/action-eligibility.yml re-measures on a
|
|
243
|
+
* schedule and diffs the per-rule counts. Per-PR regeneration was considered
|
|
244
|
+
* and rejected: 429 of 776 rules carry load-bearing numbers, so verifying them
|
|
245
|
+
* is a full ~45-minute gate run, and a contributor cannot forge the file
|
|
246
|
+
* without the scheduled diff surfacing it.
|
|
247
|
+
*/
|
|
248
|
+
export declare function corpusDigest(repoRoot: string, corpora: readonly string[], fs: {
|
|
249
|
+
readonly existsSync: (p: string) => boolean;
|
|
250
|
+
readonly readdirSync: (p: string) => string[];
|
|
251
|
+
readonly statSync: (p: string) => {
|
|
252
|
+
isDirectory(): boolean;
|
|
253
|
+
};
|
|
254
|
+
readonly readFileSync: (p: string) => Buffer;
|
|
255
|
+
}, path: {
|
|
256
|
+
readonly join: (...p: string[]) => string;
|
|
257
|
+
readonly relative: (a: string, b: string) => string;
|
|
258
|
+
}, createHash: (alg: string) => {
|
|
259
|
+
update(d: string | Buffer): unknown;
|
|
260
|
+
digest(enc: string): string;
|
|
261
|
+
}): string;
|
|
262
|
+
export declare const MEASUREMENT_CORPORA: readonly string[];
|
|
263
|
+
//# sourceMappingURL=action-eligibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-eligibility.d.ts","sourceRoot":"","sources":["../../src/quality/action-eligibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAIH,6FAA6F;AAC7F,eAAO,MAAM,YAAY;IACvB,iFAAiF;;IAEjF,iFAAiF;;IAEjF,gGAAgG;;IAEhG,oFAAoF;;EAE3E,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE1E,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAKtC,CAAC;AA2BH,8EAA8E;AAC9E,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAE1C,CAAC;AAEH;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAErD;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAKlE;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,IAAM,CAAC;AAEnC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjC,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACnC,GAAG,MAAM,CAoBT;AAED,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAShD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAGlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,mBAAmB,CAqD9D;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,UAAU,GAClB,SAAS,MAAM,EAAE,CAEnB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,UAAU,GAClB,SAAS,MAAM,EAAE,CAGnB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,EAAE,EAAE;IACF,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK;QAAE,WAAW,IAAI,OAAO,CAAA;KAAE,CAAC;IAC7D,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C,EACD,IAAI,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,EACxG,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;IAC3B,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B,GACA,MAAM,CA0BR;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAI/C,CAAC"}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ATR Quality Standard — Response-action eligibility
|
|
3
|
+
*
|
|
4
|
+
* The fifth axis of "clean must never mean never looked at it". The four before
|
|
5
|
+
* it (fieldCoverage, statusCoverage, skillPathCoverage, wild-measurement) all
|
|
6
|
+
* ask whether a rule's precision was ever measured. This one asks what a rule is
|
|
7
|
+
* allowed to DO with the precision it actually demonstrated.
|
|
8
|
+
*
|
|
9
|
+
* THE DEFECT THIS MODULE EXISTS TO PREVENT
|
|
10
|
+
*
|
|
11
|
+
* `src/action-executor.ts` contains no maturity filter and no lane filter. Grep
|
|
12
|
+
* it: the words `lane` and `maturity` do not appear. The lane gate in
|
|
13
|
+
* `src/engine.ts` decides whether a rule may FIRE; once it has fired,
|
|
14
|
+
* `computeVerdict()` unions `response.actions` across every match and the
|
|
15
|
+
* executor runs all of them in priority order. So the lane named "alert" —
|
|
16
|
+
* documented as the analyst/correlation lane — executes `kill_agent` exactly as
|
|
17
|
+
* readily as the enforce lane does.
|
|
18
|
+
*
|
|
19
|
+
* Measured, not reasoned (see docs/RESPONSE-ACTION-ELIGIBILITY.md for the run):
|
|
20
|
+
* ATR-2026-00062 is `maturity: test`, false-positives on 209 of 5,352 benign
|
|
21
|
+
* samples (3.91%), and declares `kill_agent`. Driven through
|
|
22
|
+
* `engine.evaluateWithVerdict()` at `lane: 'alert'` with a recording adapter and
|
|
23
|
+
* a real benign corpus document, all five of its actions executed —
|
|
24
|
+
* `kill_agent` first, because it has the highest executor priority.
|
|
25
|
+
*
|
|
26
|
+
* WHY THIS IS THE ONE ZERO-COST INTERVENTION
|
|
27
|
+
*
|
|
28
|
+
* Every other way to reduce false-positive damage costs recall. Tightening a
|
|
29
|
+
* regex on this same rule set traded a 64-95% FP reduction for a 64-67% recall
|
|
30
|
+
* loss. Removing an action a rule never earned costs exactly zero recall: the
|
|
31
|
+
* rule still fires, still matches, still reports, still alerts. It just stops
|
|
32
|
+
* destroying a session it was never shown to be right about.
|
|
33
|
+
*
|
|
34
|
+
* WHAT IT DOES NOT BUY (measured, so it cannot be overclaimed)
|
|
35
|
+
*
|
|
36
|
+
* `response.actions` feeds the ActionExecutor. It does NOT feed the hook
|
|
37
|
+
* verdict: `src/verdict.ts` computeVerdict derives allow/ask/deny from severity
|
|
38
|
+
* and confidence alone, and `toClaudeCodePreToolUse` maps that verdict to
|
|
39
|
+
* `permissionDecision`. Stripping every action off a `severity: critical` rule
|
|
40
|
+
* leaves `permissionDecision: deny` unchanged. This module governs executed
|
|
41
|
+
* response actions, not the hook's block decision.
|
|
42
|
+
*
|
|
43
|
+
* THE LADDER
|
|
44
|
+
*
|
|
45
|
+
* Actions are ranked by blast radius — what survives the action, not how loud it
|
|
46
|
+
* is. The ranking is deliberately NOT the executor's priority order, which
|
|
47
|
+
* encodes urgency (kill_agent runs first so it cannot be pre-empted), not harm.
|
|
48
|
+
*
|
|
49
|
+
* @module agent-threat-rules/quality/action-eligibility
|
|
50
|
+
*/
|
|
51
|
+
import { createHash } from "node:crypto";
|
|
52
|
+
/** Blast-radius tiers, ascending. A rule may declare actions at or below its earned tier. */
|
|
53
|
+
export const ACTION_TIERS = Object.freeze({
|
|
54
|
+
/** Nothing about the agent's execution changes. Pure observation and routing. */
|
|
55
|
+
OBSERVE: 0,
|
|
56
|
+
/** One operation is denied. The agent survives, retains state, and can retry. */
|
|
57
|
+
INTERRUPT: 1,
|
|
58
|
+
/** Session-wide state is altered for the remainder of the run. The agent survives, degraded. */
|
|
59
|
+
DEGRADE: 2,
|
|
60
|
+
/** The session or the agent is destroyed. Unrecoverable; in-flight work is lost. */
|
|
61
|
+
TERMINATE: 3,
|
|
62
|
+
});
|
|
63
|
+
/** Human-readable tier names, indexed by tier. */
|
|
64
|
+
export const TIER_NAMES = Object.freeze([
|
|
65
|
+
"observe",
|
|
66
|
+
"interrupt",
|
|
67
|
+
"degrade",
|
|
68
|
+
"terminate",
|
|
69
|
+
]);
|
|
70
|
+
/**
|
|
71
|
+
* Blast radius of every action the executor can dispatch.
|
|
72
|
+
*
|
|
73
|
+
* `escalate` sits at OBSERVE because `PlatformAdapter.escalate` routes to a
|
|
74
|
+
* human; it changes who is watching, not what the agent may do. `reset_context`
|
|
75
|
+
* sits at DEGRADE rather than TERMINATE because the agent process survives —
|
|
76
|
+
* but it has lost its working memory for the rest of the session, which is not
|
|
77
|
+
* a per-operation denial, so it does not belong at INTERRUPT either.
|
|
78
|
+
*/
|
|
79
|
+
const TIER_BY_ACTION = Object.freeze(new Map([
|
|
80
|
+
["alert", ACTION_TIERS.OBSERVE],
|
|
81
|
+
["snapshot", ACTION_TIERS.OBSERVE],
|
|
82
|
+
["shadow", ACTION_TIERS.OBSERVE],
|
|
83
|
+
["escalate", ACTION_TIERS.OBSERVE],
|
|
84
|
+
["block_input", ACTION_TIERS.INTERRUPT],
|
|
85
|
+
["block_output", ACTION_TIERS.INTERRUPT],
|
|
86
|
+
["block_tool", ACTION_TIERS.INTERRUPT],
|
|
87
|
+
["reduce_permissions", ACTION_TIERS.DEGRADE],
|
|
88
|
+
["reset_context", ACTION_TIERS.DEGRADE],
|
|
89
|
+
["quarantine_session", ACTION_TIERS.TERMINATE],
|
|
90
|
+
["kill_agent", ACTION_TIERS.TERMINATE],
|
|
91
|
+
]));
|
|
92
|
+
/** Every action name this module assigns a tier to — the dispatchable set. */
|
|
93
|
+
export const TIERED_ACTIONS = Object.freeze([
|
|
94
|
+
...TIER_BY_ACTION.keys(),
|
|
95
|
+
]);
|
|
96
|
+
/**
|
|
97
|
+
* Blast-radius tier of an action name.
|
|
98
|
+
*
|
|
99
|
+
* An unrecognised action is OBSERVE, and that is safe rather than lenient:
|
|
100
|
+
* `ACTION_METHOD_MAP` in src/action-executor.ts has no entry for it, so the
|
|
101
|
+
* executor returns `Unknown action` without dispatching. Four such names are on
|
|
102
|
+
* disk today (`require_human_review`, `quarantine_artifact`, `rate_limit_source`,
|
|
103
|
+
* `log_alert`); they are inert, not destructive.
|
|
104
|
+
*/
|
|
105
|
+
export function actionTier(action) {
|
|
106
|
+
return TIER_BY_ACTION.get(action) ?? ACTION_TIERS.OBSERVE;
|
|
107
|
+
}
|
|
108
|
+
/** Highest blast-radius tier present in a list of actions. */
|
|
109
|
+
export function highestTier(actions) {
|
|
110
|
+
return actions.reduce((max, a) => (actionTier(a) > max ? actionTier(a) : max), ACTION_TIERS.OBSERVE);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Percentage false-positive rate at or below which the published standard says a
|
|
114
|
+
* rule is production-grade. docs/QUALITY-STANDARD.md, STABLE promotion criteria:
|
|
115
|
+
* "Wild FP rate <= 0.5%". docs/proposals/001-atr-quality-standard-rfc.md §3
|
|
116
|
+
* repeats it as a hard requirement for `stable`.
|
|
117
|
+
*/
|
|
118
|
+
export const STABLE_FP_CEILING_PCT = 0.5;
|
|
119
|
+
/**
|
|
120
|
+
* Percentage false-positive rate at which the published standard withdraws
|
|
121
|
+
* production status. docs/QUALITY-STANDARD.md, STABLE demotion criteria:
|
|
122
|
+
* "Wild FP rate > 2% -> Automatic demotion". A rule the standard would demote
|
|
123
|
+
* out of the blocking tier must not keep blocking actions while it sits there.
|
|
124
|
+
*/
|
|
125
|
+
export const DEMOTION_FP_PCT = 2.0;
|
|
126
|
+
/**
|
|
127
|
+
* Stable fingerprint of everything that decides whether a rule fires.
|
|
128
|
+
*
|
|
129
|
+
* A false-positive count is a measurement OF a detection, not of a rule id. Edit
|
|
130
|
+
* the conditions and the number on file describes a rule that no longer exists —
|
|
131
|
+
* the same way a green CI run expires when the corpus or the measuring tool moves
|
|
132
|
+
* underneath it. Consumers store this alongside the count and treat a mismatch as
|
|
133
|
+
* "unmeasured", which by the policy below caps the rule at OBSERVE until someone
|
|
134
|
+
* re-measures it.
|
|
135
|
+
*
|
|
136
|
+
* Keys are sorted recursively so that YAML reordering, which changes nothing the
|
|
137
|
+
* engine sees, does not invalidate a measurement. `scan_target` is folded in
|
|
138
|
+
* because it selects the skill-path compound gate and therefore changes which
|
|
139
|
+
* inputs can reach the rule at all.
|
|
140
|
+
*/
|
|
141
|
+
export function detectionFingerprint(rule) {
|
|
142
|
+
const canonical = (v) => {
|
|
143
|
+
if (Array.isArray(v))
|
|
144
|
+
return v.map(canonical);
|
|
145
|
+
if (v !== null && typeof v === "object") {
|
|
146
|
+
const src = v;
|
|
147
|
+
const out = {};
|
|
148
|
+
for (const k of Object.keys(src).sort())
|
|
149
|
+
out[k] = canonical(src[k]);
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
return v;
|
|
153
|
+
};
|
|
154
|
+
const payload = canonical({
|
|
155
|
+
detection: rule.detection ?? null,
|
|
156
|
+
scan_target: rule.tags?.scan_target ?? null,
|
|
157
|
+
source_type: rule.agent_source?.type ?? null,
|
|
158
|
+
});
|
|
159
|
+
return createHash("sha256")
|
|
160
|
+
.update(JSON.stringify(payload))
|
|
161
|
+
.digest("hex")
|
|
162
|
+
.slice(0, 16);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* True when a count and its denominator are both present and usable.
|
|
166
|
+
*
|
|
167
|
+
* Says nothing about completeness — `partial` is handled separately, because a
|
|
168
|
+
* partial measurement that already found false positives is real evidence of
|
|
169
|
+
* imprecision (the true rate can only be higher), while a partial measurement
|
|
170
|
+
* that found none is evidence of nothing.
|
|
171
|
+
*/
|
|
172
|
+
export function hasCount(ev) {
|
|
173
|
+
return (typeof ev.fpCount === "number" &&
|
|
174
|
+
Number.isFinite(ev.fpCount) &&
|
|
175
|
+
ev.fpCount >= 0 &&
|
|
176
|
+
typeof ev.sampleCount === "number" &&
|
|
177
|
+
Number.isFinite(ev.sampleCount) &&
|
|
178
|
+
ev.sampleCount > 0);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* True when the evidence can support raising a rule above the observe tier.
|
|
182
|
+
*
|
|
183
|
+
* A partial run with zero hits cannot: the harness said out loud that it never
|
|
184
|
+
* exercised some of the rule's conditions, so its silence is an unasked question,
|
|
185
|
+
* not an answer. A partial run WITH hits can, and does — the hits happened.
|
|
186
|
+
*/
|
|
187
|
+
export function isMeasured(ev) {
|
|
188
|
+
if (!hasCount(ev))
|
|
189
|
+
return false;
|
|
190
|
+
return ev.partial !== true || ev.fpCount > 0;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* The policy: measured false-positive evidence -> highest action tier a rule may
|
|
194
|
+
* declare.
|
|
195
|
+
*
|
|
196
|
+
* The two numeric lines are NOT chosen here. They are the two the project already
|
|
197
|
+
* published, lifted unchanged:
|
|
198
|
+
*
|
|
199
|
+
* <= 0.5% the STABLE promotion ceiling (QUALITY-STANDARD.md, RFC-001 §3)
|
|
200
|
+
* > 2.0% the STABLE automatic-demotion trigger (QUALITY-STANDARD.md)
|
|
201
|
+
*
|
|
202
|
+
* Mapping them onto blast radius:
|
|
203
|
+
*
|
|
204
|
+
* no measurement -> OBSERVE absence of evidence is not evidence; a
|
|
205
|
+
* gate that cannot read a measurement must
|
|
206
|
+
* refuse, not pass. A PARTIAL run that found
|
|
207
|
+
* nothing lands here too — the harness said
|
|
208
|
+
* it never exercised some conditions, so its
|
|
209
|
+
* silence is an unasked question. A partial
|
|
210
|
+
* run that DID find hits is graded on them:
|
|
211
|
+
* the hits happened, and the true rate can
|
|
212
|
+
* only be higher
|
|
213
|
+
* > 2% -> OBSERVE the standard's own demotion line: at this
|
|
214
|
+
* rate it would be pulled out of the
|
|
215
|
+
* blocking tier, so it does not keep
|
|
216
|
+
* blocking actions while it sits there
|
|
217
|
+
* 0.5% - 2% -> INTERRUPT below the demotion line but above the
|
|
218
|
+
* production ceiling: a recoverable,
|
|
219
|
+
* per-operation denial is proportionate;
|
|
220
|
+
* session-wide state changes are not
|
|
221
|
+
* > 0 and <= 0.5% -> DEGRADE meets the production FP ceiling, yet
|
|
222
|
+
* demonstrably still wrong sometimes — a
|
|
223
|
+
* recoverable degradation is earned, an
|
|
224
|
+
* unrecoverable termination is not
|
|
225
|
+
* 0 FP and maturity -> TERMINATE the only evidence level that earns an
|
|
226
|
+
* stable irreversible action; see below
|
|
227
|
+
*
|
|
228
|
+
* WHY TERMINATE NEEDS MORE THAN 0 FP ON THIS CORPUS
|
|
229
|
+
*
|
|
230
|
+
* Zero observed events in n trials does not mean zero rate. The rule of three
|
|
231
|
+
* puts the 95% upper bound at 3/n: on 5,352 benign samples, a clean sweep only
|
|
232
|
+
* certifies a true FP rate below roughly 0.056%. At an agent fleet's event
|
|
233
|
+
* volume that is still a real number of destroyed sessions. The published ladder
|
|
234
|
+
* already names the extra evidence needed to close that gap — `stable` requires
|
|
235
|
+
* `wild_samples >= 1000`, `wild_fp_rate <= 0.5%`, `confidence >= 80` and two
|
|
236
|
+
* maintainer approvals — and it is the same ladder that says STABLE is the tier
|
|
237
|
+
* "safe for blocking actions in enterprise deployments" while EXPERIMENTAL is
|
|
238
|
+
* "safe for evaluation and non-blocking alerting". So TERMINATE requires both: a
|
|
239
|
+
* clean sweep of this corpus AND the maturity the standard reserves for
|
|
240
|
+
* production blocking.
|
|
241
|
+
*/
|
|
242
|
+
export function maxTierFor(ev) {
|
|
243
|
+
if (!isMeasured(ev)) {
|
|
244
|
+
return Object.freeze({
|
|
245
|
+
maxTier: ACTION_TIERS.OBSERVE,
|
|
246
|
+
fpRatePct: null,
|
|
247
|
+
reason: ev.partial === true
|
|
248
|
+
? "0 FP but the measurement is incomplete — the harness reported conditions " +
|
|
249
|
+
"it could not exercise, so the silence is an unasked question"
|
|
250
|
+
: "no FP measurement on the benign corpus",
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
const fp = ev.fpCount;
|
|
254
|
+
const n = ev.sampleCount;
|
|
255
|
+
const pct = (fp / n) * 100;
|
|
256
|
+
const partialNote = ev.partial === true ? " (partial measurement — a lower bound)" : "";
|
|
257
|
+
const shown = `${fp}/${n} = ${pct.toFixed(2)}%${partialNote}`;
|
|
258
|
+
if (pct > DEMOTION_FP_PCT) {
|
|
259
|
+
return Object.freeze({
|
|
260
|
+
maxTier: ACTION_TIERS.OBSERVE,
|
|
261
|
+
fpRatePct: pct,
|
|
262
|
+
reason: `benign FP ${shown} exceeds the ${DEMOTION_FP_PCT}% automatic-demotion line`,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
if (pct > STABLE_FP_CEILING_PCT) {
|
|
266
|
+
return Object.freeze({
|
|
267
|
+
maxTier: ACTION_TIERS.INTERRUPT,
|
|
268
|
+
fpRatePct: pct,
|
|
269
|
+
reason: `benign FP ${shown} exceeds the ${STABLE_FP_CEILING_PCT}% production ceiling`,
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
if (fp > 0) {
|
|
273
|
+
return Object.freeze({
|
|
274
|
+
maxTier: ACTION_TIERS.DEGRADE,
|
|
275
|
+
fpRatePct: pct,
|
|
276
|
+
reason: `benign FP ${shown} meets the ${STABLE_FP_CEILING_PCT}% ceiling but is not zero`,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
if (String(ev.maturity ?? "").trim() !== "stable") {
|
|
280
|
+
return Object.freeze({
|
|
281
|
+
maxTier: ACTION_TIERS.DEGRADE,
|
|
282
|
+
fpRatePct: 0,
|
|
283
|
+
reason: `0/${n} benign FP, but maturity is "${String(ev.maturity ?? "unset")}" — only stable is rated for irreversible actions`,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
return Object.freeze({
|
|
287
|
+
maxTier: ACTION_TIERS.TERMINATE,
|
|
288
|
+
fpRatePct: 0,
|
|
289
|
+
reason: `0/${n} benign FP at maturity stable`,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
/** Actions in `actions` whose tier exceeds `maxTier`, in declaration order. */
|
|
293
|
+
export function ineligibleActions(actions, maxTier) {
|
|
294
|
+
return Object.freeze(actions.filter((a) => actionTier(a) > maxTier));
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* The eligible subset, order preserved.
|
|
298
|
+
*
|
|
299
|
+
* `alert` is appended when the filter would otherwise leave a rule with nothing
|
|
300
|
+
* to do: a detection that reports nothing is worse than one that over-reports,
|
|
301
|
+
* and OBSERVE-tier reporting is available at every evidence level by definition.
|
|
302
|
+
*/
|
|
303
|
+
export function eligibleActions(actions, maxTier) {
|
|
304
|
+
const kept = actions.filter((a) => actionTier(a) <= maxTier);
|
|
305
|
+
return Object.freeze(kept.length > 0 ? kept : ["alert"]);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Content digest of the benign corpora a measurement was taken on.
|
|
309
|
+
*
|
|
310
|
+
* `detectionFingerprint` stops a rule drifting out from under its number. It
|
|
311
|
+
* says nothing about the number, and the measurement file is committed — so in
|
|
312
|
+
* review, editing `fp_count` from 2814 to 0 plus one `maturity` line handed a
|
|
313
|
+
* rule that false-positives on 52.58% of the corpus a `kill_agent`, with the
|
|
314
|
+
* whole suite still green. "Do not hand-edit" is a convention, not a control.
|
|
315
|
+
*
|
|
316
|
+
* This lives here, exported, so the producer and the gate cannot drift apart:
|
|
317
|
+
* two copies of a hashing routine is exactly the shape of defect this policy
|
|
318
|
+
* exists to close.
|
|
319
|
+
*
|
|
320
|
+
* WHAT THIS DOES NOT CLOSE, stated plainly because the gap is easy to miss:
|
|
321
|
+
* editing `fp_count` does not touch the corpus, so the digest still matches and
|
|
322
|
+
* the gate still passes. Verified by attack — 2814 -> 0 sails through. The
|
|
323
|
+
* digest closes corpus drift (the measurement describing a corpus that has
|
|
324
|
+
* since moved); it does nothing about number drift. Only regeneration closes
|
|
325
|
+
* that, which is why .github/workflows/action-eligibility.yml re-measures on a
|
|
326
|
+
* schedule and diffs the per-rule counts. Per-PR regeneration was considered
|
|
327
|
+
* and rejected: 429 of 776 rules carry load-bearing numbers, so verifying them
|
|
328
|
+
* is a full ~45-minute gate run, and a contributor cannot forge the file
|
|
329
|
+
* without the scheduled diff surfacing it.
|
|
330
|
+
*/
|
|
331
|
+
export function corpusDigest(repoRoot, corpora, fs, path, createHash) {
|
|
332
|
+
const SEP = "\u0000";
|
|
333
|
+
const walk = (dir) => {
|
|
334
|
+
const out = [];
|
|
335
|
+
for (const e of [...fs.readdirSync(dir)].sort()) {
|
|
336
|
+
const full = path.join(dir, e);
|
|
337
|
+
if (fs.statSync(full).isDirectory())
|
|
338
|
+
out.push(...walk(full));
|
|
339
|
+
else if (e.endsWith(".jsonl") || e.endsWith(".md"))
|
|
340
|
+
out.push(full);
|
|
341
|
+
}
|
|
342
|
+
return out;
|
|
343
|
+
};
|
|
344
|
+
const h = createHash("sha256");
|
|
345
|
+
for (const rel of [...corpora].sort()) {
|
|
346
|
+
const dir = path.join(repoRoot, rel);
|
|
347
|
+
if (!fs.existsSync(dir)) {
|
|
348
|
+
h.update(rel + SEP + "MISSING" + SEP);
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
for (const f of walk(dir)) {
|
|
352
|
+
h.update(path.relative(repoRoot, f));
|
|
353
|
+
h.update(SEP);
|
|
354
|
+
h.update(fs.readFileSync(f));
|
|
355
|
+
h.update(SEP);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return h.digest("hex").slice(0, 32);
|
|
359
|
+
}
|
|
360
|
+
export const MEASUREMENT_CORPORA = Object.freeze([
|
|
361
|
+
"data/skill-benchmark/benign",
|
|
362
|
+
"data/benign-corpus-extended",
|
|
363
|
+
"data/benign-code",
|
|
364
|
+
]);
|
|
365
|
+
//# sourceMappingURL=action-eligibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-eligibility.js","sourceRoot":"","sources":["../../src/quality/action-eligibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atr.d.ts","sourceRoot":"","sources":["../../../src/quality/adapters/atr.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"atr.d.ts","sourceRoot":"","sources":["../../../src/quality/adapters/atr.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,UAAU,UAAU;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;KAC7B,CAAC;IACF,UAAU,CAAC,EAAE;QACX,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC;QAC3B,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC;KAC5B,CAAC;IACF,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;QACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;QAC1B,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;QACxB,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;KAC1B,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAM9D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAgEhE"}
|