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