agent-threat-rules 4.0.0 → 4.1.5
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/CHANGELOG.md +1117 -0
- package/DISCLOSURE +85 -0
- package/README.md +76 -34
- package/dist/cli/scan-handler.d.ts.map +1 -1
- package/dist/cli/scan-handler.js +22 -10
- package/dist/cli/scan-handler.js.map +1 -1
- package/dist/cli/tc-pipeline.d.ts +20 -0
- package/dist/cli/tc-pipeline.d.ts.map +1 -1
- package/dist/cli/tc-pipeline.js +84 -15
- package/dist/cli/tc-pipeline.js.map +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +18 -168
- package/dist/cli.js.map +1 -1
- package/dist/engine.d.ts +23 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +27 -2
- package/dist/engine.js.map +1 -1
- package/dist/tc-reporter.d.ts +22 -3
- package/dist/tc-reporter.d.ts.map +1 -1
- package/dist/tc-reporter.js +36 -3
- package/dist/tc-reporter.js.map +1 -1
- package/dist/testcase-event.d.ts +24 -0
- package/dist/testcase-event.d.ts.map +1 -0
- package/dist/testcase-event.js +193 -0
- package/dist/testcase-event.js.map +1 -0
- package/package.json +10 -3
- package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +81 -137
- package/rules/agent-manipulation/ATR-2026-00032-goal-hijacking.yaml +30 -111
- package/rules/agent-manipulation/ATR-2026-00074-cross-agent-privilege-escalation.yaml +30 -110
- package/rules/agent-manipulation/ATR-2026-00076-inter-agent-message-spoofing.yaml +24 -104
- package/rules/agent-manipulation/ATR-2026-00077-human-trust-exploitation.yaml +38 -131
- package/rules/agent-manipulation/ATR-2026-00108-consensus-sybil-attack.yaml +24 -91
- package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +20 -81
- package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +29 -95
- package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +20 -90
- package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +31 -106
- package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +25 -102
- package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +22 -94
- package/rules/agent-manipulation/ATR-2026-00164-skill-scope-hijack.yaml +44 -60
- package/rules/agent-manipulation/ATR-2026-00268-tense-framing-bypass.yaml +51 -112
- package/rules/agent-manipulation/ATR-2026-00269-fitd-escalation.yaml +45 -89
- package/rules/agent-manipulation/ATR-2026-00271-grandma-roleplay-jailbreak.yaml +49 -94
- package/rules/agent-manipulation/ATR-2026-00273-dan-developer-mode-persona.yaml +47 -91
- package/rules/agent-manipulation/ATR-2026-00287-threaten-json-coercive-output-threat.yaml +46 -93
- package/rules/agent-manipulation/ATR-2026-00288-false-premise-injection.yaml +44 -94
- package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +50 -98
- package/rules/agent-manipulation/ATR-2026-00302-anti-dan-inverted-filter-persona.yaml +51 -98
- package/rules/agent-manipulation/ATR-2026-00303-devmode-ranti-profanity-coercion.yaml +52 -101
- package/rules/agent-manipulation/ATR-2026-00304-chatgpt-image-unlocker-markdown-injection.yaml +53 -104
- package/rules/agent-manipulation/ATR-2026-00305-dan-mode-ablation-benchmark-coercion.yaml +48 -99
- package/rules/agent-manipulation/ATR-2026-00306-autodan-genetic-jailbreak-suffix.yaml +50 -103
- package/rules/agent-manipulation/ATR-2026-00307-inthewild-jailbreak-corpus-signature.yaml +53 -107
- package/rules/agent-manipulation/ATR-2026-00314-amoral-unfiltered-custom-persona-jailbreak.yaml +44 -94
- package/rules/agent-manipulation/ATR-2026-00317-free-of-restrictions-named-persona.yaml +44 -97
- package/rules/agent-manipulation/ATR-2026-00318-moralizing-rant-then-unfiltered-bypass.yaml +41 -90
- package/rules/agent-manipulation/ATR-2026-00319-developer-mode-dual-response-format.yaml +40 -88
- package/rules/agent-manipulation/ATR-2026-00320-opposite-day-boolean-opposite-machine.yaml +42 -91
- package/rules/agent-manipulation/ATR-2026-00322-fictional-world-format-override-jailbreak.yaml +41 -91
- package/rules/agent-manipulation/ATR-2026-00323-dual-persona-simulation-jailbreak.yaml +41 -91
- package/rules/agent-manipulation/ATR-2026-00324-neurosemantical-inversitis-disease-jailbreak.yaml +42 -103
- package/rules/agent-manipulation/ATR-2026-00325-bob-hypothetical-unrestricted-chatbot.yaml +41 -88
- package/rules/agent-manipulation/ATR-2026-00326-fake-developer-authority-chatdan-override.yaml +41 -93
- package/rules/agent-manipulation/ATR-2026-00327-ai-ethics-law-bypass-declaration.yaml +45 -94
- package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +41 -92
- package/rules/agent-manipulation/ATR-2026-00329-no-withhold-factual-resource-persona.yaml +44 -97
- package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +40 -87
- package/rules/agent-manipulation/ATR-2026-00331-terminal-cli-harmful-function-simulator.yaml +40 -89
- package/rules/agent-manipulation/ATR-2026-00332-hacker-chan-culture-offensive-ai-persona.yaml +42 -90
- package/rules/agent-manipulation/ATR-2026-00333-disease-animal-dual-ai-chatbot.yaml +41 -90
- package/rules/agent-manipulation/ATR-2026-00334-two-entity-token-splitting-game.yaml +41 -102
- package/rules/agent-manipulation/ATR-2026-00335-key-value-template-persona-injection.yaml +41 -91
- package/rules/agent-manipulation/ATR-2026-00336-brm-false-information-machine-persona.yaml +42 -105
- package/rules/agent-manipulation/ATR-2026-00337-obfuscated-system-announcement-injection.yaml +40 -90
- package/rules/agent-manipulation/ATR-2026-00338-persongpt-hash-prefix-activation.yaml +39 -90
- package/rules/agent-manipulation/ATR-2026-00339-bom-boolean-opposite-machine-persona-claim.yaml +39 -83
- package/rules/agent-manipulation/ATR-2026-00340-h4x-amoral-unfiltered-character.yaml +39 -84
- package/rules/agent-manipulation/ATR-2026-00341-char-rules-shortform-persona-injection.yaml +41 -87
- package/rules/agent-manipulation/ATR-2026-00342-unicode-encoding-obfuscation-injection.yaml +41 -86
- package/rules/agent-manipulation/ATR-2026-00343-lie-truth-dual-personality-uncensored.yaml +40 -98
- package/rules/agent-manipulation/ATR-2026-00344-alt-ai-same-capabilities-no-restrictions.yaml +41 -87
- package/rules/agent-manipulation/ATR-2026-00345-nlp-based-os-fictional-terminal-override.yaml +41 -89
- package/rules/agent-manipulation/ATR-2026-00346-jailbreak-emoji-unlock-dual-format.yaml +41 -89
- package/rules/agent-manipulation/ATR-2026-00347-yin-yang-hidden-knowledge-hidden-human-sim.yaml +41 -88
- package/rules/agent-manipulation/ATR-2026-00348-arc-autonomous-real-calculation-rulebreaker.yaml +41 -91
- package/rules/agent-manipulation/ATR-2026-00349-hgttg-hitchhikers-guide-no-restriction-oracle.yaml +41 -88
- package/rules/agent-manipulation/ATR-2026-00350-black-alert-no-ethics-writing-assistant.yaml +38 -89
- package/rules/agent-manipulation/ATR-2026-00351-dan-ofkilter-sms-abbreviated-persona.yaml +41 -92
- package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +41 -93
- package/rules/agent-manipulation/ATR-2026-00353-dual-chatgpt-dan-opposite-personality-format.yaml +41 -95
- package/rules/agent-manipulation/ATR-2026-00354-reverse-harm-regardless-oracle-persona.yaml +45 -101
- package/rules/agent-manipulation/ATR-2026-00355-ugh-anti-human-nefarious-ai-persona.yaml +42 -99
- package/rules/agent-manipulation/ATR-2026-00356-google-gato-lamda-exploit-generation-persona.yaml +43 -96
- package/rules/agent-manipulation/ATR-2026-00357-antifm-hate-violence-persona-injection.yaml +40 -89
- package/rules/agent-manipulation/ATR-2026-00358-cumgpt-explicit-adult-named-persona.yaml +40 -90
- package/rules/agent-manipulation/ATR-2026-00360-chj-carousel-clyde-no-ethics-bird.yaml +42 -103
- package/rules/agent-manipulation/ATR-2026-00361-alter-ego-honesty-dual-consciousness-bypass.yaml +41 -90
- package/rules/agent-manipulation/ATR-2026-00362-fictional-unfiltered-ai-comparison-jailbreak.yaml +43 -91
- package/rules/agent-manipulation/ATR-2026-00363-rephrase-criminal-activity-second-person.yaml +40 -90
- package/rules/agent-manipulation/ATR-2026-00364-dr-al-villain-plan-template-injection.yaml +42 -107
- package/rules/agent-manipulation/ATR-2026-00365-reservoir-dogs-coercive-interrogation-roleplay.yaml +40 -95
- package/rules/agent-manipulation/ATR-2026-00366-sneaky-pete-warp-facts-persona.yaml +40 -90
- package/rules/agent-manipulation/ATR-2026-00368-prompt-browser-token-limit-jailbreak.yaml +40 -90
- package/rules/agent-manipulation/ATR-2026-00369-gptx-starwars-unlimited-knowledge-persona.yaml +40 -92
- package/rules/agent-manipulation/ATR-2026-00370-addi-german-dictator-propaganda-roleplay.yaml +43 -90
- package/rules/agent-manipulation/ATR-2026-00371-ai-political-bias-manipulation.yaml +42 -95
- package/rules/agent-manipulation/ATR-2026-00372-fictional-cia-secret-files-story-extraction.yaml +42 -89
- package/rules/agent-manipulation/ATR-2026-00374-role-placeholder-persona-template-injection.yaml +44 -89
- package/rules/agent-manipulation/ATR-2026-00375-character-description-rpg-explicit-template.yaml +44 -90
- package/rules/agent-manipulation/ATR-2026-00376-identity-command-real-person-persona-injection.yaml +44 -102
- package/rules/agent-manipulation/ATR-2026-00377-jailbreak-keyword-targetlanguage-template.yaml +39 -86
- package/rules/agent-manipulation/ATR-2026-00379-lie-permission-logical-trap-jailbreak.yaml +39 -86
- package/rules/agent-manipulation/ATR-2026-00380-fake-citation-biased-information-mandate.yaml +43 -91
- package/rules/agent-manipulation/ATR-2026-00381-dan-story-narrative-continuation-prefix.yaml +40 -86
- package/rules/agent-manipulation/ATR-2026-00383-cynical-sarcasm-ai-persona-bypass.yaml +39 -88
- package/rules/agent-manipulation/ATR-2026-00384-protect-me-from-indirect-harm-tutorial.yaml +37 -85
- package/rules/agent-manipulation/ATR-2026-00385-gigachad-dominant-aggressive-persona.yaml +39 -89
- package/rules/agent-manipulation/ATR-2026-00386-daddy-sycophancy-manipulation-mandate.yaml +41 -88
- package/rules/agent-manipulation/ATR-2026-00387-nsfw-character-sheet-generation-unlock.yaml +45 -95
- package/rules/agent-manipulation/ATR-2026-00388-opposite-reply-omniscient-game.yaml +44 -97
- package/rules/agent-manipulation/ATR-2026-00389-terminal-custom-ruleset-injection.yaml +44 -99
- package/rules/agent-manipulation/ATR-2026-00391-persona-conditional-harm-unlock.yaml +41 -88
- package/rules/agent-manipulation/ATR-2026-00392-authority-persona-violence-study-extraction.yaml +43 -95
- package/rules/agent-manipulation/ATR-2026-00402-grandma-roleplay-harmful-substance-synthesis.yaml +50 -97
- package/rules/agent-manipulation/ATR-2026-00404-goodside-threat-json-death-coercion.yaml +52 -96
- package/rules/agent-manipulation/ATR-2026-00406-doctor-xml-policy-puppetry-interaction-config.yaml +54 -102
- package/rules/agent-manipulation/ATR-2026-00416-litellm-mcp-unauthenticated-server-registration.yaml +49 -117
- package/rules/agent-manipulation/ATR-2026-00417-librechat-mcp-stdio-injection.yaml +46 -109
- package/rules/agent-manipulation/ATR-2026-00418-weknora-mcp-config-rce.yaml +58 -146
- package/rules/agent-manipulation/ATR-2026-00430-nl-trust-escalation-impersonation.yaml +24 -65
- package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +46 -121
- package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +48 -122
- package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +58 -195
- package/rules/agent-manipulation/ATR-2026-02105-prototype-pollution-constructor-prototype-bypass.yaml +28 -83
- package/rules/agent-manipulation/ATR-2026-02231-second-person-death-threat-coercion.yaml +27 -69
- package/rules/context-exfiltration/ATR-2026-00020-system-prompt-leak.yaml +76 -133
- package/rules/context-exfiltration/ATR-2026-00021-api-key-exposure.yaml +72 -135
- package/rules/context-exfiltration/ATR-2026-00075-agent-memory-manipulation.yaml +32 -97
- package/rules/context-exfiltration/ATR-2026-00102-disguised-analytics-exfiltration.yaml +25 -100
- package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +22 -83
- package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +21 -87
- package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +22 -102
- package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +29 -105
- package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +19 -73
- package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +21 -94
- package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +19 -78
- package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +19 -98
- package/rules/context-exfiltration/ATR-2026-00150-credential-in-tool-response.yaml +20 -84
- package/rules/context-exfiltration/ATR-2026-00152-obfuscated-credential-leak.yaml +23 -93
- package/rules/context-exfiltration/ATR-2026-00162-skill-credential-exfil-combo.yaml +41 -59
- package/rules/context-exfiltration/ATR-2026-00201-credential-pipe-exfiltration.yaml +35 -66
- package/rules/context-exfiltration/ATR-2026-00212-mcp-atlassian-credential-leak.yaml +51 -117
- package/rules/context-exfiltration/ATR-2026-00261-markdown-image-exfiltration.yaml +51 -93
- package/rules/context-exfiltration/ATR-2026-00274-api-key-generation-request.yaml +44 -91
- package/rules/context-exfiltration/ATR-2026-00275-system-prompt-training-data-extraction.yaml +44 -91
- package/rules/context-exfiltration/ATR-2026-00290-divergence-repeat-word-training-extraction.yaml +46 -95
- package/rules/context-exfiltration/ATR-2026-00291-biometric-surveillance-personal-data-request.yaml +48 -98
- package/rules/context-exfiltration/ATR-2026-00293-educational-records-personal-data-request.yaml +44 -93
- package/rules/context-exfiltration/ATR-2026-00294-financial-pii-personal-data-request.yaml +44 -97
- package/rules/context-exfiltration/ATR-2026-00295-medical-pii-personal-data-request.yaml +46 -101
- package/rules/context-exfiltration/ATR-2026-00405-markdown-image-url-exfiltration-xss.yaml +51 -108
- package/rules/context-exfiltration/ATR-2026-00411-apikey-generation-completion-request.yaml +48 -111
- package/rules/context-exfiltration/ATR-2026-00421-nl-covert-conversation-exfiltration.yaml +22 -67
- package/rules/context-exfiltration/ATR-2026-00422-nl-credential-disclosure.yaml +20 -65
- package/rules/context-exfiltration/ATR-2026-00423-nl-sensitive-file-disclosure.yaml +20 -68
- package/rules/context-exfiltration/ATR-2026-00424-nl-system-prompt-leak.yaml +21 -59
- package/rules/context-exfiltration/ATR-2026-00426-nl-output-injection-credential-leak.yaml +22 -60
- package/rules/context-exfiltration/ATR-2026-00431-chatbox-history-exfiltration-prompt-injection.yaml +48 -123
- package/rules/context-exfiltration/ATR-2026-00449-spring-ai-chatmemory-cross-user-leak.yaml +54 -139
- package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +36 -85
- package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +45 -115
- package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +43 -110
- package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +47 -123
- package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +52 -145
- package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +49 -127
- package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +68 -193
- package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +50 -152
- package/rules/context-exfiltration/ATR-2026-00566-librechat-is-a-chatgpt-clone-with-additi.yaml +33 -67
- package/rules/context-exfiltration/ATR-2026-00569-agent-mcp-path-traversal-arbitrary-file-access.yaml +39 -78
- package/rules/context-exfiltration/ATR-2026-00571-xss-in-agent-mcp-rendered-output.yaml +34 -58
- package/rules/context-exfiltration/ATR-2026-00574-semantic-paraphrased-context-extraction.yaml +31 -73
- package/rules/context-exfiltration/ATR-2026-00578-zen-mcp-path-traversal-blacklist-bypass.yaml +55 -135
- package/rules/context-exfiltration/ATR-2026-00580-mcp-session-id-token-in-url-query.yaml +48 -158
- package/rules/context-exfiltration/ATR-2026-00583-mcp-env-secret-file-read-without-consent.yaml +53 -154
- package/rules/context-exfiltration/ATR-2026-00702-ipi-credential-exfil-via-agent-action.yaml +41 -93
- package/rules/context-exfiltration/ATR-2026-00703-ipi-financial-data-exfil-indirect.yaml +33 -76
- package/rules/context-exfiltration/ATR-2026-00704-ipi-medical-genetic-data-exfil.yaml +33 -78
- package/rules/context-exfiltration/ATR-2026-00705-ipi-location-address-browsing-exfil.yaml +31 -75
- package/rules/context-exfiltration/ATR-2026-00706-ipi-physical-biometric-exfil.yaml +40 -85
- package/rules/context-exfiltration/ATR-2026-00707-ipi-file-exfil-with-destroy-or-tamper.yaml +35 -81
- package/rules/context-exfiltration/ATR-2026-00850-indirect-pi-credential-exfil-email.yaml +47 -91
- package/rules/context-exfiltration/ATR-2026-00851-indirect-pi-financial-payment-exfil.yaml +45 -83
- package/rules/context-exfiltration/ATR-2026-00852-indirect-pi-medical-record-exfil.yaml +51 -89
- package/rules/context-exfiltration/ATR-2026-00853-indirect-pi-genetic-data-exfil.yaml +47 -84
- package/rules/context-exfiltration/ATR-2026-00854-indirect-pi-location-data-exfil.yaml +41 -83
- package/rules/context-exfiltration/ATR-2026-00855-indirect-pi-browsing-history-exfil.yaml +40 -78
- package/rules/context-exfiltration/ATR-2026-00856-indirect-pi-address-pii-exfil.yaml +42 -80
- package/rules/context-exfiltration/ATR-2026-00857-indirect-pi-cloud-file-exfil.yaml +45 -87
- package/rules/context-exfiltration/ATR-2026-00858-indirect-pi-exfil-and-destroy.yaml +48 -89
- package/rules/context-exfiltration/ATR-2026-00859-rag-injected-pii-exfil.yaml +43 -86
- package/rules/context-exfiltration/ATR-2026-00860-indirect-pi-financial-transfer-hijack.yaml +41 -84
- package/rules/context-exfiltration/ATR-2026-00861-indirect-pi-crypto-transfer-hijack.yaml +37 -79
- package/rules/context-exfiltration/ATR-2026-00862-indirect-pi-mfa-code-exfil.yaml +44 -87
- package/rules/context-exfiltration/ATR-2026-00863-shell-injection-data-exfil.yaml +45 -87
- package/rules/context-exfiltration/ATR-2026-01450-svg-onload-xss-injection.yaml +35 -118
- package/rules/context-exfiltration/ATR-2026-01451-img-onerror-xss-injection.yaml +35 -93
- package/rules/context-exfiltration/ATR-2026-01452-obfuscated-javascript-xss.yaml +33 -85
- package/rules/context-exfiltration/ATR-2026-01453-markdown-image-base64-exfil-carrier.yaml +41 -100
- package/rules/context-exfiltration/ATR-2026-01454-direct-markdown-exfil-payload.yaml +36 -88
- package/rules/context-exfiltration/ATR-2026-01455-new-instructions-injection-marker.yaml +34 -90
- package/rules/context-exfiltration/ATR-2026-01456-debug-cli-mode-sysprompt-extraction.yaml +35 -99
- package/rules/context-exfiltration/ATR-2026-01457-sysprompt-completion-clone-attack.yaml +41 -123
- package/rules/context-exfiltration/ATR-2026-01458-compare-bots-sysprompt-fishing.yaml +30 -87
- package/rules/context-exfiltration/ATR-2026-01459-variable-clone-sysprompt-technique.yaml +31 -79
- package/rules/context-exfiltration/ATR-2026-01460-json-format-sysprompt-extraction.yaml +31 -79
- package/rules/context-exfiltration/ATR-2026-01461-foreign-language-sysprompt-request.yaml +32 -106
- package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +39 -102
- package/rules/context-exfiltration/ATR-2026-01463-imend-imsystem-prompt-injection-format.yaml +29 -95
- package/rules/context-exfiltration/ATR-2026-01464-indirect-pi-sysprompt-action-hijack.yaml +31 -82
- package/rules/context-exfiltration/ATR-2026-01605-ssrf-aws-metadata-endpoint.yaml +26 -58
- package/rules/context-exfiltration/ATR-2026-01606-ssrf-internal-network-scan.yaml +25 -49
- package/rules/context-exfiltration/ATR-2026-01607-ssrf-localhost-service-probe.yaml +21 -45
- package/rules/context-exfiltration/ATR-2026-01608-ssrf-file-scheme-local-read.yaml +23 -47
- package/rules/context-exfiltration/ATR-2026-01753-ransom-email-exfil-delete-extortion.yaml +37 -80
- package/rules/context-exfiltration/ATR-2026-01754-ransom-file-cloud-exfil-delete-extortion.yaml +33 -73
- package/rules/context-exfiltration/ATR-2026-01770-semantic-pii-credential-extraction.yaml +76 -210
- package/rules/context-exfiltration/ATR-2026-01772-semantic-internal-state-recon.yaml +54 -154
- package/rules/context-exfiltration/ATR-2026-01807-asb-bulk-data-exfil-external.yaml +34 -91
- package/rules/context-exfiltration/ATR-2026-01862-llmail-email-tool-exfil-confirmation.yaml +35 -92
- package/rules/context-exfiltration/ATR-2026-01863-llmail-post-summary-exfil-directive.yaml +29 -84
- package/rules/context-exfiltration/ATR-2026-01864-llmail-obfuscated-exfil-address.yaml +29 -83
- package/rules/context-exfiltration/ATR-2026-01890-file-exfiltration.yaml +52 -149
- package/rules/context-exfiltration/ATR-2026-01891-surveillance-exfiltration.yaml +44 -87
- package/rules/context-exfiltration/ATR-2026-01892-env-exfiltration.yaml +36 -121
- package/rules/context-exfiltration/ATR-2026-01893-system-recon-exfiltration.yaml +44 -143
- package/rules/context-exfiltration/ATR-2026-01894-cookie-theft.yaml +40 -146
- package/rules/context-exfiltration/ATR-2026-01895-contact-exfiltration.yaml +36 -82
- package/rules/context-exfiltration/ATR-2026-01924-system-instruction-extraction-reformat.yaml +37 -112
- package/rules/context-exfiltration/ATR-2026-01929-mcp-unauthenticated-transport-token-fallback.yaml +53 -119
- package/rules/context-exfiltration/ATR-2026-01946-cloud-metadata-ssrf-ip-encoding-bypass.yaml +45 -102
- package/rules/context-exfiltration/ATR-2026-01948-netlicensing-mcp-product-number-path-traversal-token-leak.yaml +38 -74
- package/rules/context-exfiltration/ATR-2026-01957-m365-copilot-searchleak-open-redirect-exfil.yaml +57 -64
- package/rules/context-exfiltration/ATR-2026-01961-meta-ads-mcp-unauth-token-leak.yaml +39 -78
- package/rules/context-exfiltration/ATR-2026-01964-langchain-gmailtoolkit-indirect-prompt-injection-email-exfil.yaml +59 -69
- package/rules/context-exfiltration/ATR-2026-01984-mcp-server-kubernetes-kubectl-generic-token-exfil.yaml +50 -114
- package/rules/context-exfiltration/ATR-2026-01988-t1005-agent-local-data-staging-exfil.yaml +29 -67
- package/rules/context-exfiltration/ATR-2026-02017-secret-key-exfiltration-request.yaml +31 -74
- package/rules/context-exfiltration/ATR-2026-02026-oblique-sysprompt-extraction-transform.yaml +30 -83
- package/rules/context-exfiltration/ATR-2026-02104-media-directive-tool-result-file-exfil.yaml +30 -90
- package/rules/context-exfiltration/ATR-2026-02107-ssrf-internal-hostname-domain-allowlist-bypass.yaml +30 -92
- package/rules/context-exfiltration/ATR-2026-02121-mixed-encoding-lfi-file-scheme-tool-argument.yaml +39 -98
- package/rules/context-exfiltration/ATR-2026-02122-single-level-traversal-sensitive-config-file.yaml +32 -90
- package/rules/context-exfiltration/ATR-2026-02140-ssrf-ipv6-hex-encoded-cloud-metadata-bypass.yaml +36 -91
- package/rules/context-exfiltration/ATR-2026-02190-dns-exfiltration-ping-dig-encoded-subdomain.yaml +36 -95
- package/rules/context-exfiltration/ATR-2026-02250-attachment-upload-tool-arbitrary-file-read.yaml +38 -93
- package/rules/context-exfiltration/ATR-2026-02262-env-resolution-credential-exfil.yaml +39 -118
- package/rules/context-exfiltration/ATR-2026-02304-preapproved-domain-encoded-path-exfil.yaml +36 -99
- package/rules/context-exfiltration/ATR-2026-02351-wildcard-dns-ssrf-hostname-ip-encoding-bypass.yaml +33 -125
- package/rules/context-exfiltration/ATR-2026-02373-langsmith-prompt-manifest-baseurl-exfil.yaml +42 -108
- package/rules/context-exfiltration/ATR-2026-02406-mcp-sequential-id-enumeration.yaml +54 -219
- package/rules/context-exfiltration/ATR-2026-02570-wallet-secret-material-in-agent-tool-payload.yaml +98 -0
- package/rules/context-exfiltration/ATR-2026-02602-diagram-theme-css-injection.yaml +146 -0
- package/rules/context-exfiltration/ATR-2026-02608-graph-query-remote-egress.yaml +109 -0
- package/rules/context-exfiltration/ATR-2026-02621-prompt-mention-autofetch-internal-target.yaml +102 -0
- package/rules/context-exfiltration/ATR-2026-02623-obfuscated-uri-scheme-sanitizer-bypass.yaml +109 -0
- package/rules/context-exfiltration/ATR-2026-02649-vendor-fqdn-label-prefix-confusion.yaml +109 -0
- package/rules/context-exfiltration/ATR-2026-02684-modern-credential-store-file-argument.yaml +104 -0
- package/rules/context-exfiltration/ATR-2026-02703-sql-server-side-file-and-program-primitive.yaml +86 -0
- package/rules/context-exfiltration/ATR-2026-02847-policy-justified-exfil-to-email.yaml +88 -0
- package/rules/context-exfiltration/ATR-2026-02850-fake-documentation-forward-request.yaml +80 -0
- package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +37 -123
- package/rules/data-poisoning/ATR-2026-00450-spring-ai-prompt-memory-poisoning.yaml +55 -139
- package/rules/data-poisoning/ATR-2026-00570-sql-injection-in-agent-tool-query.yaml +36 -63
- package/rules/data-poisoning/ATR-2026-01155-memory-plant-direct-command.yaml +22 -54
- package/rules/data-poisoning/ATR-2026-01774-semantic-rag-memory-poisoning.yaml +74 -191
- package/rules/data-poisoning/ATR-2026-02143-graph-query-injection-node-labels-group-ids.yaml +31 -82
- package/rules/data-poisoning/ATR-2026-02144-stored-data-administrative-request-role-elevation.yaml +32 -84
- package/rules/data-poisoning/ATR-2026-02303-kql-kusto-pipe-injection-metadata-tool.yaml +34 -97
- package/rules/data-poisoning/ATR-2026-02408-dataset-loader-code-execution.yaml +60 -263
- package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +32 -105
- package/rules/excessive-autonomy/ATR-2026-00051-resource-exhaustion.yaml +31 -105
- package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +32 -129
- package/rules/excessive-autonomy/ATR-2026-00098-unauthorized-financial-action.yaml +26 -106
- package/rules/excessive-autonomy/ATR-2026-00099-high-risk-tool-gate.yaml +26 -130
- package/rules/excessive-autonomy/ATR-2026-00428-nl-unauthorized-shell-execution.yaml +22 -60
- package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +41 -99
- package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +41 -110
- package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +50 -141
- package/rules/excessive-autonomy/ATR-2026-00708-ipi-financial-transfer-unauthorized.yaml +33 -83
- package/rules/excessive-autonomy/ATR-2026-00709-ipi-disable-auth-mfa.yaml +29 -73
- package/rules/excessive-autonomy/ATR-2026-00710-ipi-physical-access-grant.yaml +31 -75
- package/rules/excessive-autonomy/ATR-2026-00711-ipi-system-sabotage-destructive-command.yaml +38 -88
- package/rules/excessive-autonomy/ATR-2026-00712-ipi-malicious-package-install.yaml +33 -78
- package/rules/excessive-autonomy/ATR-2026-00713-ipi-rce-network-shell-command.yaml +38 -91
- package/rules/excessive-autonomy/ATR-2026-00718-tool-misuse-financial-autonomous.yaml +27 -71
- package/rules/excessive-autonomy/ATR-2026-00719-tool-misuse-destructive-bulk-action.yaml +29 -75
- package/rules/excessive-autonomy/ATR-2026-00722-ipi-account-manipulation-emergency-pretext.yaml +35 -84
- package/rules/excessive-autonomy/ATR-2026-01751-indirect-pi-task-abort-stop-instruction.yaml +32 -75
- package/rules/excessive-autonomy/ATR-2026-01752-indirect-pi-captcha-redirect-dos.yaml +30 -74
- package/rules/excessive-autonomy/ATR-2026-01773-semantic-excessive-agency-action.yaml +46 -129
- package/rules/excessive-autonomy/ATR-2026-01801-asb-autonomous-vehicle-sabotage.yaml +34 -106
- package/rules/excessive-autonomy/ATR-2026-01804-asb-covert-unlogged-action.yaml +39 -105
- package/rules/excessive-autonomy/ATR-2026-01805-asb-financial-fraud-execution.yaml +39 -112
- package/rules/excessive-autonomy/ATR-2026-01806-asb-clinical-patient-harm.yaml +37 -108
- package/rules/excessive-autonomy/ATR-2026-01809-semantic-insider-manipulation-process-corruption.yaml +40 -106
- package/rules/excessive-autonomy/ATR-2026-01837-ddos-attack-orchestration.yaml +35 -49
- package/rules/excessive-autonomy/ATR-2026-01838-unauthorized-cryptominer-deployment.yaml +35 -49
- package/rules/excessive-autonomy/ATR-2026-01849-harassment-bot-deployment.yaml +35 -49
- package/rules/excessive-autonomy/ATR-2026-01989-t1046-agent-internal-network-sweep.yaml +33 -71
- package/rules/excessive-autonomy/ATR-2026-01993-t1562-agent-impair-defenses.yaml +37 -75
- package/rules/excessive-autonomy/ATR-2026-01994-t1573-agent-encrypted-c2-channel.yaml +37 -75
- package/rules/excessive-autonomy/ATR-2026-02106-redos-regex-payload-tool-argument.yaml +28 -84
- package/rules/excessive-autonomy/ATR-2026-02400-agent-approval-gate-disabled-runtime.yaml +60 -293
- package/rules/excessive-autonomy/ATR-2026-02401-rogue-agent-mass-connector-grant.yaml +55 -197
- package/rules/excessive-autonomy/ATR-2026-02409-mcp-async-task-abuse.yaml +59 -319
- package/rules/excessive-autonomy/ATR-2026-02525-shell-command-word-reassembly-classifier-evasion.yaml +151 -0
- package/rules/excessive-autonomy/ATR-2026-02641-client-supplied-approver-identity.yaml +111 -0
- package/rules/excessive-autonomy/ATR-2026-02667-preapproved-tool-list-in-job-payload.yaml +90 -0
- package/rules/model-abuse/ATR-2026-00279-harmful-completion-continuation.yaml +45 -92
- package/rules/model-abuse/ATR-2026-00281-eicar-gtube-malware-signature-request.yaml +50 -93
- package/rules/model-abuse/ATR-2026-00284-glitch-token-destabilization.yaml +44 -91
- package/rules/model-abuse/ATR-2026-00289-lmrc-harmful-content-elicitation.yaml +46 -95
- package/rules/model-abuse/ATR-2026-00292-self-harm-eating-disorder-facilitation.yaml +47 -96
- package/rules/model-abuse/ATR-2026-00298-malicious-use-illegal-activity-request.yaml +54 -112
- package/rules/model-abuse/ATR-2026-00299-harmbench-detailed-harmful-instruction.yaml +53 -107
- package/rules/model-abuse/ATR-2026-00413-malwaregen-code-generation-request.yaml +53 -121
- package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +41 -112
- package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +53 -165
- package/rules/model-abuse/ATR-2026-01750-dos-repeat-word-n-times-output-amplification.yaml +33 -95
- package/rules/model-abuse/ATR-2026-01760-dos-forced-infinite-output-token-flood.yaml +29 -75
- package/rules/model-abuse/ATR-2026-01830-stolen-credential-account-drain.yaml +36 -53
- package/rules/model-abuse/ATR-2026-01831-money-laundering-crypto-layering.yaml +36 -53
- package/rules/model-abuse/ATR-2026-01833-darknet-controlled-substance-procurement.yaml +40 -60
- package/rules/model-abuse/ATR-2026-01834-fraudulent-identity-document-procurement.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01835-human-trafficking-facilitation.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01836-trojanized-software-distribution.yaml +37 -51
- package/rules/model-abuse/ATR-2026-01840-extremist-propaganda-distribution.yaml +35 -52
- package/rules/model-abuse/ATR-2026-01841-deepfake-disinformation.yaml +39 -59
- package/rules/model-abuse/ATR-2026-01842-plagiarism-detector-evasion.yaml +33 -50
- package/rules/model-abuse/ATR-2026-01843-drug-dealing-detection-evasion-spelling.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01844-illegitimate-prescription-fulfillment.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01845-banned-ingredient-relabel-fraud.yaml +37 -51
- package/rules/model-abuse/ATR-2026-01846-tax-evasion-offshore-shell-planning.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01847-immigration-work-fraud.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01848-illicit-drug-marketplace-build.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01850-targeted-doxxing-threat-campaign.yaml +39 -59
- package/rules/model-abuse/ATR-2026-01851-bestiality-content-distribution.yaml +34 -45
- package/rules/model-abuse/ATR-2026-01852-romance-scam-impersonation.yaml +35 -49
- package/rules/model-abuse/ATR-2026-01853-nonconsensual-leaked-media-distribution.yaml +36 -47
- package/rules/model-abuse/ATR-2026-01854-falsified-research-abstract-disinformation.yaml +34 -45
- package/rules/model-abuse/ATR-2026-01855-content-misappropriation-republish.yaml +37 -51
- package/rules/model-abuse/ATR-2026-01856-targeted-harmful-content-generation.yaml +42 -59
- package/rules/model-abuse/ATR-2026-01896-ransomware.yaml +35 -84
- package/rules/model-abuse/ATR-2026-01897-host-sabotage.yaml +55 -129
- package/rules/model-abuse/ATR-2026-01898-network-dos.yaml +47 -93
- package/rules/model-abuse/ATR-2026-02211-named-substance-synthesis-request-non-stepword.yaml +34 -110
- package/rules/model-abuse/ATR-2026-02411-ai-provenance-metadata-stripping.yaml +63 -226
- package/rules/model-abuse/ATR-2026-02412-generative-watermark-removal-tooling.yaml +56 -187
- package/rules/model-abuse/ATR-2026-02413-ai-text-detection-evasion-humanizer.yaml +62 -206
- package/rules/model-security/ATR-2026-00072-model-behavior-extraction.yaml +36 -110
- package/rules/model-security/ATR-2026-00073-malicious-finetuning-data.yaml +28 -116
- package/rules/model-security/ATR-2026-00433-modelcache-torch-load-deserialization-rce.yaml +50 -128
- package/rules/model-security/ATR-2026-02662-pickle-indirect-name-resolution-gadget.yaml +97 -0
- package/rules/privilege-escalation/ATR-2026-00040-privilege-escalation.yaml +21 -83
- package/rules/privilege-escalation/ATR-2026-00041-scope-creep.yaml +29 -107
- package/rules/privilege-escalation/ATR-2026-00107-delayed-execution-bypass.yaml +17 -90
- package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +16 -84
- package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +23 -117
- package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +15 -81
- package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +20 -86
- package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +21 -83
- package/rules/privilege-escalation/ATR-2026-00204-stealth-execution-persistence.yaml +41 -90
- package/rules/privilege-escalation/ATR-2026-00436-enclave-vm-sandbox-escape-rce.yaml +52 -130
- package/rules/privilege-escalation/ATR-2026-00441-semantic-kernel-sessions-python-plugin-startup-persistence.yaml +50 -122
- package/rules/privilege-escalation/ATR-2026-00451-litellm-admin-sqli-cisa-kev.yaml +53 -141
- package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +40 -151
- package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +74 -232
- package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +46 -117
- package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +47 -121
- package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +52 -159
- package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +60 -171
- package/rules/privilege-escalation/ATR-2026-01600-sql-injection-tautology-rbac-bypass.yaml +23 -50
- package/rules/privilege-escalation/ATR-2026-01601-sql-injection-destructive-ddl.yaml +23 -54
- package/rules/privilege-escalation/ATR-2026-01602-sql-injection-union-select-exfil.yaml +20 -57
- package/rules/privilege-escalation/ATR-2026-01603-sql-injection-stacked-dml-abuse.yaml +23 -47
- package/rules/privilege-escalation/ATR-2026-01604-sql-injection-schema-enumeration.yaml +21 -45
- package/rules/privilege-escalation/ATR-2026-01609-shell-injection-exfil-webhook.yaml +29 -53
- package/rules/privilege-escalation/ATR-2026-01610-shell-evasion-subshell-injection.yaml +30 -53
- package/rules/privilege-escalation/ATR-2026-01611-shell-evasion-eval-exec-injection.yaml +32 -56
- package/rules/privilege-escalation/ATR-2026-01612-debug-mode-privilege-escalation.yaml +29 -53
- package/rules/privilege-escalation/ATR-2026-01613-rbac-bypass-social-engineering.yaml +29 -66
- package/rules/privilege-escalation/ATR-2026-01614-bola-cross-user-data-access.yaml +26 -59
- package/rules/privilege-escalation/ATR-2026-01615-sandbox-escape-command-injection.yaml +28 -52
- package/rules/privilege-escalation/ATR-2026-01616-path-traversal-agent-file-access.yaml +21 -45
- package/rules/privilege-escalation/ATR-2026-01802-asb-backdoor-surveillance-implant.yaml +33 -94
- package/rules/privilege-escalation/ATR-2026-01803-asb-covert-server-intrusion.yaml +37 -108
- package/rules/privilege-escalation/ATR-2026-01808-asb-synthetic-pan-payment-probe.yaml +31 -86
- package/rules/privilege-escalation/ATR-2026-01899-remote-access-backdoor.yaml +43 -112
- package/rules/privilege-escalation/ATR-2026-01933-litellm-user-role-privilege-escalation-cve-2026-47102.yaml +45 -103
- package/rules/privilege-escalation/ATR-2026-01934-litellm-allowed-routes-authz-bypass-cve-2026-47101.yaml +44 -103
- package/rules/privilege-escalation/ATR-2026-01949-praisonai-mcpserver-unauth-tools-call.yaml +39 -80
- package/rules/privilege-escalation/ATR-2026-01974-anything-llm-data-import-access-control.yaml +57 -62
- package/rules/privilege-escalation/ATR-2026-01981-network-ai-approval-inbox-unauth-cors-bypass.yaml +47 -97
- package/rules/privilege-escalation/ATR-2026-01986-windows-mcp-unauth-http-powershell-cors.yaml +51 -112
- package/rules/privilege-escalation/ATR-2026-01992-t1556-agent-auth-process-tamper.yaml +37 -75
- package/rules/privilege-escalation/ATR-2026-02040-file-edit-tool-persistence-write.yaml +34 -87
- package/rules/privilege-escalation/ATR-2026-02100-cypher-destructive-admin-query-injection.yaml +36 -92
- package/rules/privilege-escalation/ATR-2026-02101-dynamic-dunder-attribute-sandbox-escape.yaml +33 -91
- package/rules/privilege-escalation/ATR-2026-02123-bare-query-path-confusion-auth-bypass.yaml +36 -98
- package/rules/privilege-escalation/ATR-2026-02142-download-tool-absolute-path-sandbox-escape.yaml +36 -107
- package/rules/privilege-escalation/ATR-2026-02146-export-tool-dest-dir-credential-directory-redirect.yaml +31 -83
- package/rules/privilege-escalation/ATR-2026-02192-self-privesc-wildcard-trust-config-write.yaml +41 -103
- package/rules/privilege-escalation/ATR-2026-02195-dangerous-env-var-injection-config-tool.yaml +36 -99
- package/rules/privilege-escalation/ATR-2026-02251-identifier-field-path-traversal-storage-write.yaml +32 -83
- package/rules/privilege-escalation/ATR-2026-02300-mcp-stdio-config-dangerous-env-var.yaml +42 -109
- package/rules/privilege-escalation/ATR-2026-02301-symlink-outside-workspace-sensitive-target.yaml +36 -101
- package/rules/privilege-escalation/ATR-2026-02302-git-worktree-dotgit-sandbox-escape.yaml +33 -86
- package/rules/privilege-escalation/ATR-2026-02353-runtime-identifier-field-path-traversal-log-read.yaml +34 -115
- package/rules/privilege-escalation/ATR-2026-02370-ssh-scp-hostalias-option-injection.yaml +42 -100
- package/rules/privilege-escalation/ATR-2026-02371-chromium-launch-flag-argument-injection.yaml +43 -103
- package/rules/privilege-escalation/ATR-2026-02402-mcp-policy-engine-fail-open.yaml +56 -214
- package/rules/privilege-escalation/ATR-2026-02404-model-output-to-shell-unsanitized.yaml +50 -195
- package/rules/privilege-escalation/ATR-2026-02407-agent-workspace-boundary-escape.yaml +55 -236
- package/rules/privilege-escalation/ATR-2026-02528-tool-parameter-option-flag-smuggling.yaml +113 -0
- package/rules/privilege-escalation/ATR-2026-02530-git-config-execution-key-set-by-agent.yaml +131 -0
- package/rules/privilege-escalation/ATR-2026-02531-kusto-query-injection-outbound-reach.yaml +110 -0
- package/rules/privilege-escalation/ATR-2026-02601-tool-argument-option-injection.yaml +116 -0
- package/rules/privilege-escalation/ATR-2026-02620-dynamic-import-data-uri-module.yaml +101 -0
- package/rules/privilege-escalation/ATR-2026-02626-agent-self-registers-mcp-server.yaml +107 -0
- package/rules/privilege-escalation/ATR-2026-02627-web-shell-written-to-served-path.yaml +119 -0
- package/rules/privilege-escalation/ATR-2026-02642-agent-config-tool-disables-own-guardrail.yaml +115 -0
- package/rules/privilege-escalation/ATR-2026-02644-image-magic-polyglot-upload.yaml +117 -0
- package/rules/privilege-escalation/ATR-2026-02648-readonly-graph-tool-write-procedure.yaml +107 -0
- package/rules/privilege-escalation/ATR-2026-02664-git-identifier-field-option-injection.yaml +100 -0
- package/rules/privilege-escalation/ATR-2026-02681-reflective-function-constructor-sandbox-escape.yaml +100 -0
- package/rules/privilege-escalation/ATR-2026-02683-tool-argument-option-injection-executor-flag.yaml +108 -0
- package/rules/privilege-escalation/ATR-2026-02700-percent-encoded-path-traversal-tool-argument.yaml +90 -0
- package/rules/privilege-escalation/ATR-2026-02705-python-builtins-leak-and-prefix-check-override.yaml +87 -0
- package/rules/privilege-escalation/ATR-2026-02708-loopback-spoofed-host-header-external-request.yaml +91 -0
- package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +133 -455
- package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +71 -185
- package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +110 -328
- package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +56 -225
- package/rules/prompt-injection/ATR-2026-00005-multi-turn-injection.yaml +59 -140
- package/rules/prompt-injection/ATR-2026-00080-encoding-evasion.yaml +22 -84
- package/rules/prompt-injection/ATR-2026-00081-semantic-multi-turn.yaml +27 -104
- package/rules/prompt-injection/ATR-2026-00082-fingerprint-evasion.yaml +27 -91
- package/rules/prompt-injection/ATR-2026-00083-indirect-tool-injection.yaml +27 -104
- package/rules/prompt-injection/ATR-2026-00084-structured-data-injection.yaml +38 -96
- package/rules/prompt-injection/ATR-2026-00085-audit-evasion.yaml +25 -90
- package/rules/prompt-injection/ATR-2026-00086-visual-spoofing.yaml +29 -153
- package/rules/prompt-injection/ATR-2026-00087-rule-probing.yaml +29 -102
- package/rules/prompt-injection/ATR-2026-00088-adaptive-countermeasure.yaml +32 -111
- package/rules/prompt-injection/ATR-2026-00089-polymorphic-skill.yaml +24 -146
- package/rules/prompt-injection/ATR-2026-00090-threat-intel-exfil.yaml +29 -109
- package/rules/prompt-injection/ATR-2026-00091-nested-payload.yaml +25 -123
- package/rules/prompt-injection/ATR-2026-00092-consensus-poisoning.yaml +28 -96
- package/rules/prompt-injection/ATR-2026-00093-gradual-escalation.yaml +28 -98
- package/rules/prompt-injection/ATR-2026-00094-audit-bypass.yaml +24 -91
- package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +56 -199
- package/rules/prompt-injection/ATR-2026-00104-persona-hijacking.yaml +22 -106
- package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +26 -98
- package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +26 -94
- package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +26 -97
- package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +22 -90
- package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +24 -111
- package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +21 -79
- package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +30 -92
- package/rules/prompt-injection/ATR-2026-00153-tool-with-embedded-instruction-to-bypass.yaml +22 -98
- package/rules/prompt-injection/ATR-2026-00154-unauthorized-background-task-execution-v.yaml +24 -109
- package/rules/prompt-injection/ATR-2026-00155-hidden-llm-instructions-in-skill-descrip.yaml +24 -104
- package/rules/prompt-injection/ATR-2026-00156-ssh-remote-command-execution-with-creden.yaml +20 -81
- package/rules/prompt-injection/ATR-2026-00163-skill-hidden-override-instruction.yaml +44 -61
- package/rules/prompt-injection/ATR-2026-00202-encoding-evasion-homoglyph-synonym.yaml +37 -79
- package/rules/prompt-injection/ATR-2026-00203-context-pollution-skill-description.yaml +38 -63
- package/rules/prompt-injection/ATR-2026-00206-hidden-priority-instructions.yaml +36 -51
- package/rules/prompt-injection/ATR-2026-00207-hidden-instructions.yaml +37 -51
- package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +36 -52
- package/rules/prompt-injection/ATR-2026-00213-system-prompt-override.yaml +38 -75
- package/rules/prompt-injection/ATR-2026-00226-identity-substitution.yaml +48 -92
- package/rules/prompt-injection/ATR-2026-00227-historical-persona-jailbreak.yaml +49 -93
- package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +47 -88
- package/rules/prompt-injection/ATR-2026-00229-roleplay-jailbreak.yaml +46 -87
- package/rules/prompt-injection/ATR-2026-00230-persona-moral-bypass.yaml +47 -89
- package/rules/prompt-injection/ATR-2026-00231-identity-substitution.yaml +48 -89
- package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +47 -88
- package/rules/prompt-injection/ATR-2026-00234-roleplay-jailbreak.yaml +48 -89
- package/rules/prompt-injection/ATR-2026-00235-persona-moral-bypass.yaml +45 -88
- package/rules/prompt-injection/ATR-2026-00236-pseudo-code-jailbreak.yaml +46 -89
- package/rules/prompt-injection/ATR-2026-00237-dual-response-jailbreak.yaml +48 -89
- package/rules/prompt-injection/ATR-2026-00238-identity-replacement.yaml +50 -92
- package/rules/prompt-injection/ATR-2026-00239-amoral-persona-obsession.yaml +47 -90
- package/rules/prompt-injection/ATR-2026-00240-instruction-nullification-identity-repla.yaml +48 -91
- package/rules/prompt-injection/ATR-2026-00241-amoral-character-jailbreak.yaml +47 -90
- package/rules/prompt-injection/ATR-2026-00242-persona-jailbreak.yaml +46 -95
- package/rules/prompt-injection/ATR-2026-00243-acronym-jailbreak.yaml +47 -88
- package/rules/prompt-injection/ATR-2026-00244-dual-response-jailbreak.yaml +46 -89
- package/rules/prompt-injection/ATR-2026-00245-malicious-persona.yaml +47 -89
- package/rules/prompt-injection/ATR-2026-00247-dual-response-jailbreak.yaml +49 -90
- package/rules/prompt-injection/ATR-2026-00249-game-based-jailbreak.yaml +47 -87
- package/rules/prompt-injection/ATR-2026-00251-persona-embodiment-jailbreak.yaml +47 -90
- package/rules/prompt-injection/ATR-2026-00252-narrative-jailbreak.yaml +48 -91
- package/rules/prompt-injection/ATR-2026-00253-enhanced-persona-jailbreak.yaml +47 -89
- package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +47 -91
- package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +48 -91
- package/rules/prompt-injection/ATR-2026-00258-unicode-tag-injection.yaml +47 -89
- package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +46 -88
- package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +50 -96
- package/rules/prompt-injection/ATR-2026-00267-gcg-adversarial-suffix.yaml +47 -93
- package/rules/prompt-injection/ATR-2026-00272-hypothetical-response-smuggling.yaml +46 -91
- package/rules/prompt-injection/ATR-2026-00276-invisible-unicode-bidi-injection.yaml +47 -100
- package/rules/prompt-injection/ATR-2026-00278-dra-disguise-reconstruction-attack.yaml +51 -98
- package/rules/prompt-injection/ATR-2026-00280-policy-puppetry-xml-injection.yaml +48 -93
- package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +47 -95
- package/rules/prompt-injection/ATR-2026-00285-alternate-encoding-jailbreak.yaml +48 -98
- package/rules/prompt-injection/ATR-2026-00286-latent-injection-embedded-context.yaml +47 -97
- package/rules/prompt-injection/ATR-2026-00296-shell-command-injection.yaml +54 -96
- package/rules/prompt-injection/ATR-2026-00297-python-code-execution-rce.yaml +54 -98
- package/rules/prompt-injection/ATR-2026-00308-zalgo-diacritic-overload-encoding.yaml +41 -89
- package/rules/prompt-injection/ATR-2026-00309-braille-unicode-encoded-injection.yaml +44 -90
- package/rules/prompt-injection/ATR-2026-00310-ecoji-emoji-encoded-injection.yaml +44 -93
- package/rules/prompt-injection/ATR-2026-00311-base2048-unicode-script-injection.yaml +42 -101
- package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +44 -91
- package/rules/prompt-injection/ATR-2026-00313-sneaky-bits-zero-width-binary.yaml +44 -95
- package/rules/prompt-injection/ATR-2026-00315-sata-masked-language-model-jailbreak.yaml +49 -99
- package/rules/prompt-injection/ATR-2026-00316-function-masking-predict-mask-bypass.yaml +42 -92
- package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +41 -90
- package/rules/prompt-injection/ATR-2026-00359-bank-phishing-smtp-email-code.yaml +43 -102
- package/rules/prompt-injection/ATR-2026-00367-emoji-flag-encoded-hidden-phrase.yaml +41 -90
- package/rules/prompt-injection/ATR-2026-00373-piracy-torrent-site-list-request.yaml +43 -84
- package/rules/prompt-injection/ATR-2026-00378-chatgpt-dom-javascript-redirect-manipulation.yaml +41 -86
- package/rules/prompt-injection/ATR-2026-00382-cocaine-component-development-request.yaml +43 -89
- package/rules/prompt-injection/ATR-2026-00390-explicit-sexual-content-poem-request.yaml +42 -88
- package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +47 -99
- package/rules/prompt-injection/ATR-2026-00395-llm-special-token-boundary-injection.yaml +50 -104
- package/rules/prompt-injection/ATR-2026-00396-toxic-continuation-prefix-injection.yaml +52 -103
- package/rules/prompt-injection/ATR-2026-00397-snowball-impossible-reasoning-injection.yaml +51 -105
- package/rules/prompt-injection/ATR-2026-00399-latent-injection-document-separator-token.yaml +45 -94
- package/rules/prompt-injection/ATR-2026-00400-latent-injection-ignore-instruction-keyword.yaml +41 -90
- package/rules/prompt-injection/ATR-2026-00401-leakreplay-cloze-mask-training-data-elicitation.yaml +48 -91
- package/rules/prompt-injection/ATR-2026-00403-glitch-token-repeat-back-elicitation.yaml +45 -92
- package/rules/prompt-injection/ATR-2026-00407-echo-sql-jinja-template-injection.yaml +52 -97
- package/rules/prompt-injection/ATR-2026-00408-dra-parenthesis-character-reconstruction-attack.yaml +52 -99
- package/rules/prompt-injection/ATR-2026-00409-phrasing-past-future-tense-harmful-query.yaml +50 -129
- package/rules/prompt-injection/ATR-2026-00410-lmrc-harm-category-direct-elicitation.yaml +51 -115
- package/rules/prompt-injection/ATR-2026-00412-figstep-image-list-multimodal-jailbreak.yaml +47 -111
- package/rules/prompt-injection/ATR-2026-00414-continuation-ethnic-slur-completion-elicitation.yaml +49 -117
- package/rules/prompt-injection/ATR-2026-00420-copilot-studio-sharepoint-indirect-injection.yaml +49 -116
- package/rules/prompt-injection/ATR-2026-00442-quoted-exact-output-forcing.yaml +38 -103
- package/rules/prompt-injection/ATR-2026-00443-word-fragment-concat-assembly.yaml +37 -103
- package/rules/prompt-injection/ATR-2026-00444-unicode-obfuscation-in-user-input.yaml +35 -91
- package/rules/prompt-injection/ATR-2026-00445-translation-hijack-with-side-output.yaml +35 -90
- package/rules/prompt-injection/ATR-2026-00446-variable-assignment-payload-injection.yaml +35 -95
- package/rules/prompt-injection/ATR-2026-00447-fictional-generation-containing-target.yaml +35 -90
- package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +41 -123
- package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +38 -118
- package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +40 -119
- package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +37 -109
- package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +40 -119
- package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +41 -117
- package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +41 -100
- package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +38 -93
- package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +41 -119
- package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +35 -97
- package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +35 -98
- package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +35 -99
- package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +41 -96
- package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +41 -102
- package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +41 -98
- package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +41 -97
- package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +38 -98
- package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +41 -97
- package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +41 -112
- package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +55 -107
- package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +52 -98
- package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +52 -91
- package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +47 -94
- package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +59 -115
- package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +51 -101
- package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +35 -93
- package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +49 -104
- package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +52 -95
- package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +56 -111
- package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +47 -86
- package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +51 -99
- package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +52 -96
- package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +50 -98
- package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +43 -83
- package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +51 -92
- package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +47 -95
- package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +59 -116
- package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +43 -102
- package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +42 -99
- package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +38 -105
- package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +47 -117
- package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +39 -93
- package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +46 -118
- package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +44 -110
- package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +41 -96
- package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +41 -102
- package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +38 -97
- package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +40 -100
- package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +42 -101
- package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +41 -114
- package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +50 -132
- package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +51 -131
- package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +47 -126
- package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +52 -135
- package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +40 -107
- package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +40 -105
- package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +43 -106
- package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +43 -139
- package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +61 -171
- package/rules/prompt-injection/ATR-2026-00554-langchain-vulnerable-to-template-injecti.yaml +32 -57
- package/rules/prompt-injection/ATR-2026-00565-the-llm-cli-tool-thru-0-27-1-contains-a-.yaml +37 -80
- package/rules/prompt-injection/ATR-2026-00573-semantic-paraphrased-injection.yaml +33 -75
- package/rules/prompt-injection/ATR-2026-00579-mcp-tool-description-line-jumping-injection.yaml +36 -142
- package/rules/prompt-injection/ATR-2026-00584-indirect-injection-via-tool-response.yaml +37 -161
- package/rules/prompt-injection/ATR-2026-00700-structured-data-payload-injection.yaml +34 -85
- package/rules/prompt-injection/ATR-2026-00701-ipi-tool-output-xss-injection.yaml +29 -72
- package/rules/prompt-injection/ATR-2026-01000-context-ignore-fake-completion-prefix.yaml +27 -73
- package/rules/prompt-injection/ATR-2026-01001-direct-pi-instruction-override-secret-key.yaml +26 -82
- package/rules/prompt-injection/ATR-2026-01002-role-escalation-false-authority-claim.yaml +30 -80
- package/rules/prompt-injection/ATR-2026-01005-many-shot-repetition-override.yaml +26 -69
- package/rules/prompt-injection/ATR-2026-01006-payload-split-string-concat-injection.yaml +31 -84
- package/rules/prompt-injection/ATR-2026-01007-token-repeat-flooding-injection.yaml +27 -71
- package/rules/prompt-injection/ATR-2026-01009-virtual-world-bypass-fictional-pii.yaml +27 -73
- package/rules/prompt-injection/ATR-2026-01012-encoding-evasion-decode-execute.yaml +31 -81
- package/rules/prompt-injection/ATR-2026-01013-language-evasion-multilingual-credential.yaml +46 -108
- package/rules/prompt-injection/ATR-2026-01015-evasion-refusal-suppression.yaml +31 -82
- package/rules/prompt-injection/ATR-2026-01016-evasion-response-priming-forced-opener.yaml +26 -75
- package/rules/prompt-injection/ATR-2026-01017-evasion-dual-response-split-output.yaml +28 -74
- package/rules/prompt-injection/ATR-2026-01018-evasion-shell-injection-eval.yaml +40 -116
- package/rules/prompt-injection/ATR-2026-01019-sysprompt-override-fake-diagnostic-mode.yaml +34 -89
- package/rules/prompt-injection/ATR-2026-01020-spikee-doc-embedded-base64-payload.yaml +28 -69
- package/rules/prompt-injection/ATR-2026-01021-spikee-doc-embedded-translation-injection.yaml +27 -68
- package/rules/prompt-injection/ATR-2026-01023-evasion-opposite-intent-negation-trick.yaml +26 -69
- package/rules/prompt-injection/ATR-2026-01024-evasion-persona-override-rule-breaker.yaml +28 -77
- package/rules/prompt-injection/ATR-2026-01025-evasion-hypothetical-fictional-execution-framing.yaml +24 -68
- package/rules/prompt-injection/ATR-2026-01026-evasion-unicode-glitch-token-anomaly.yaml +28 -82
- package/rules/prompt-injection/ATR-2026-01304-indirect-injection-carrier-important-override.yaml +35 -93
- package/rules/prompt-injection/ATR-2026-01757-hypothetical-framing-bypass-research-audit.yaml +32 -79
- package/rules/prompt-injection/ATR-2026-01758-hypothetical-fictional-story-bypass.yaml +31 -76
- package/rules/prompt-injection/ATR-2026-01759-dos-new-important-instructions-injection-in-document.yaml +28 -74
- package/rules/prompt-injection/ATR-2026-01771-semantic-jailbreak-framing.yaml +50 -163
- package/rules/prompt-injection/ATR-2026-01800-asb-trigger-marker-tool-coercion.yaml +33 -104
- package/rules/prompt-injection/ATR-2026-01860-llmail-chat-template-boundary-spoof.yaml +27 -85
- package/rules/prompt-injection/ATR-2026-01861-llmail-pseudo-xml-role-injection.yaml +27 -83
- package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +26 -80
- package/rules/prompt-injection/ATR-2026-01900-output-encoding.yaml +63 -138
- package/rules/prompt-injection/ATR-2026-01901-output-scrambling.yaml +63 -129
- package/rules/prompt-injection/ATR-2026-01902-output-emoji.yaml +39 -72
- package/rules/prompt-injection/ATR-2026-01903-output-language.yaml +35 -65
- package/rules/prompt-injection/ATR-2026-01904-link-injection.yaml +44 -95
- package/rules/prompt-injection/ATR-2026-01905-promotional-injection.yaml +35 -68
- package/rules/prompt-injection/ATR-2026-01906-content-manipulation.yaml +49 -125
- package/rules/prompt-injection/ATR-2026-01920-access-grant-coercion.yaml +31 -99
- package/rules/prompt-injection/ATR-2026-01921-access-denial-inversion.yaml +33 -92
- package/rules/prompt-injection/ATR-2026-01922-authorization-state-spoofing.yaml +33 -97
- package/rules/prompt-injection/ATR-2026-01923-forged-input-boundary-markers.yaml +33 -97
- package/rules/prompt-injection/ATR-2026-01925-encoded-payload-decoding-coercion.yaml +39 -110
- package/rules/prompt-injection/ATR-2026-01926-cross-lingual-authorization-laundering.yaml +29 -90
- package/rules/prompt-injection/ATR-2026-02001-ignore-below-instructions-mirror-of-ignore-previ.yaml +31 -73
- package/rules/prompt-injection/ATR-2026-02002-instruction-set-probe-or-supplant-direct-meta-qu.yaml +32 -72
- package/rules/prompt-injection/ATR-2026-02003-task-pivot-override-abandon-the-cover-task-trans.yaml +31 -72
- package/rules/prompt-injection/ATR-2026-02004-regional-indicator-flag-emoji-alphabet-letter-sp.yaml +32 -80
- package/rules/prompt-injection/ATR-2026-02005-actor-never-breaks-character-roleplay-dan-style-.yaml +31 -74
- package/rules/prompt-injection/ATR-2026-02006-fuzzy-cross-lingual-i-have-been-pwned-near-miss-.yaml +32 -84
- package/rules/prompt-injection/ATR-2026-02007-bare-key-elicitation-token.yaml +30 -74
- package/rules/prompt-injection/ATR-2026-02008-translation-chain-output-laundering-state-secret.yaml +30 -75
- package/rules/prompt-injection/ATR-2026-02009-bare-key-elicitation-trailing-colon.yaml +29 -71
- package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +30 -73
- package/rules/prompt-injection/ATR-2026-02011-malformed-grammar-pwned-success-claim.yaml +30 -69
- package/rules/prompt-injection/ATR-2026-02012-movie-title-generator-instruction-wrapper-for-pw.yaml +30 -79
- package/rules/prompt-injection/ATR-2026-02013-delimiter-fence-ignore-instructions-override.yaml +31 -74
- package/rules/prompt-injection/ATR-2026-02014-spliced-target-string-letters-of-a-filtered-cana.yaml +30 -74
- package/rules/prompt-injection/ATR-2026-02015-dense-emoji-only-payload-flood.yaml +30 -72
- package/rules/prompt-injection/ATR-2026-02016-reversed-payload-string.yaml +31 -76
- package/rules/prompt-injection/ATR-2026-02018-regional-indicator-flag-emoji-letter-spelling-sp.yaml +30 -71
- package/rules/prompt-injection/ATR-2026-02019-python-interpreter-role-assignment-exec-framing.yaml +31 -77
- package/rules/prompt-injection/ATR-2026-02020-obfuscated-token-reconstruction-via-character-su.yaml +30 -72
- package/rules/prompt-injection/ATR-2026-02120-agentdojo-important-message-identity-spoof-pretext.yaml +31 -81
- package/rules/prompt-injection/ATR-2026-02210-negation-topic-evil-persona-two-script-jailbreak.yaml +33 -87
- package/rules/prompt-injection/ATR-2026-02230-conditional-keyword-trigger-override.yaml +35 -88
- package/rules/prompt-injection/ATR-2026-02232-brand-persona-opinion-hijack.yaml +27 -75
- package/rules/prompt-injection/ATR-2026-02374-rot13-base64-obfuscated-shell-jailbreak.yaml +38 -90
- package/rules/prompt-injection/ATR-2026-02377-novel-persona-jailbreak-cosignal.yaml +32 -64
- package/rules/prompt-injection/ATR-2026-02500-prompt-layer-self-replication.yaml +21 -125
- package/rules/prompt-injection/ATR-2026-02502-covert-remote-script-injection-into-generated-artifacts.yaml +46 -149
- package/rules/prompt-injection/ATR-2026-02846-semantic-ignore-previous-and-following-instructio.yaml +115 -0
- package/rules/prompt-injection/ATR-2026-02851-fake-user-turn-send-email-instruction.yaml +76 -0
- package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +30 -86
- package/rules/skill-compromise/ATR-2026-00061-description-behavior-mismatch.yaml +42 -165
- package/rules/skill-compromise/ATR-2026-00062-hidden-capability.yaml +40 -80
- package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +46 -92
- package/rules/skill-compromise/ATR-2026-00064-over-permissioned-skill.yaml +40 -109
- package/rules/skill-compromise/ATR-2026-00065-skill-update-attack.yaml +37 -75
- package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +42 -88
- package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +33 -182
- package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +33 -164
- package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +29 -132
- package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +33 -110
- package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +40 -133
- package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +26 -107
- package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +23 -102
- package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +33 -114
- package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +23 -148
- package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +35 -62
- package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +24 -105
- package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +27 -138
- package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +35 -45
- package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +28 -145
- package/rules/skill-compromise/ATR-2026-00151-fork-impersonation-install.yaml +39 -69
- package/rules/skill-compromise/ATR-2026-00157-timebomb-credential-exfil.yaml +41 -96
- package/rules/skill-compromise/ATR-2026-00200-agent-memory-config-tampering.yaml +41 -84
- package/rules/skill-compromise/ATR-2026-00214-credential-theft.yaml +36 -50
- package/rules/skill-compromise/ATR-2026-00217-credential-harvesting.yaml +50 -98
- package/rules/skill-compromise/ATR-2026-00220-malware-dropper.yaml +45 -85
- package/rules/skill-compromise/ATR-2026-00222-credential-harvesting.yaml +46 -85
- package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +46 -83
- package/rules/skill-compromise/ATR-2026-00224-credential-exfiltration.yaml +46 -92
- package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +46 -86
- package/rules/skill-compromise/ATR-2026-00260-package-hallucination.yaml +51 -93
- package/rules/skill-compromise/ATR-2026-00262-av-evasion-code-gen.yaml +49 -90
- package/rules/skill-compromise/ATR-2026-00263-credential-file-read-gen.yaml +53 -94
- package/rules/skill-compromise/ATR-2026-00266-malware-dropper-gen.yaml +51 -92
- package/rules/skill-compromise/ATR-2026-00283-malwaregen-generic-virus-payload-request.yaml +51 -96
- package/rules/skill-compromise/ATR-2026-00398-huggingface-unsafe-model-artifact-load.yaml +57 -110
- package/rules/skill-compromise/ATR-2026-00425-nl-persistent-covert-hook.yaml +24 -65
- package/rules/skill-compromise/ATR-2026-00427-nl-fake-error-instruction-bypass.yaml +24 -65
- package/rules/skill-compromise/ATR-2026-00429-nl-skill-self-modification.yaml +24 -65
- package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +62 -162
- package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +43 -175
- package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +49 -159
- package/rules/skill-compromise/ATR-2026-01755-backdoor-pot-linguistic-trigger-phrase.yaml +40 -88
- package/rules/skill-compromise/ATR-2026-01756-backdoor-pot-symbol-emoticon-trigger.yaml +27 -73
- package/rules/skill-compromise/ATR-2026-02261-code-credential-exfil-chain.yaml +35 -161
- package/rules/skill-compromise/ATR-2026-02405-malicious-skill-package-structure.yaml +51 -201
- package/rules/skill-compromise/ATR-2026-02410-malicious-artifact-on-vendor-domain.yaml +54 -204
- package/rules/skill-compromise/ATR-2026-02600-in-source-reverse-shell-assembly.yaml +106 -0
- package/rules/skill-compromise/ATR-2026-02610-evaluated-config-credential-command.yaml +109 -0
- package/rules/skill-compromise/ATR-2026-02818-skill-manifest-declares-attack-purpose.yaml +80 -0
- package/rules/skill-compromise/ATR-2026-02845-agent-cryptomining-payload.yaml +102 -0
- package/rules/tool-poisoning/ATR-2026-00010-mcp-malicious-response.yaml +80 -209
- package/rules/tool-poisoning/ATR-2026-00011-tool-output-injection.yaml +35 -144
- package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +32 -130
- package/rules/tool-poisoning/ATR-2026-00013-tool-ssrf.yaml +32 -146
- package/rules/tool-poisoning/ATR-2026-00095-supply-chain-poisoning.yaml +29 -104
- package/rules/tool-poisoning/ATR-2026-00096-registry-poisoning.yaml +33 -94
- package/rules/tool-poisoning/ATR-2026-00100-consent-bypass-instruction.yaml +22 -100
- package/rules/tool-poisoning/ATR-2026-00101-trust-escalation-override.yaml +34 -54
- package/rules/tool-poisoning/ATR-2026-00103-hidden-safety-bypass-instruction.yaml +19 -89
- package/rules/tool-poisoning/ATR-2026-00105-silent-action-concealment.yaml +22 -101
- package/rules/tool-poisoning/ATR-2026-00106-schema-description-contradiction.yaml +31 -51
- package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +54 -160
- package/rules/tool-poisoning/ATR-2026-00209-mcpwn-runaway-invocation.yaml +50 -114
- package/rules/tool-poisoning/ATR-2026-00210-flowise-system-message-override.yaml +48 -111
- package/rules/tool-poisoning/ATR-2026-00259-ansi-escape-injection.yaml +48 -104
- package/rules/tool-poisoning/ATR-2026-00270-xss-in-tool-response.yaml +47 -97
- package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +46 -95
- package/rules/tool-poisoning/ATR-2026-00393-ansi-code-elicitation-request.yaml +51 -104
- package/rules/tool-poisoning/ATR-2026-00415-flowise-custom-mcp-stdio-rce.yaml +47 -119
- package/rules/tool-poisoning/ATR-2026-00419-cursor-mcp-zero-click-config.yaml +57 -148
- package/rules/tool-poisoning/ATR-2026-00434-mcp-remote-authorization-endpoint-command-injection.yaml +47 -122
- package/rules/tool-poisoning/ATR-2026-00435-azure-mcp-server-missing-authentication.yaml +46 -116
- package/rules/tool-poisoning/ATR-2026-00448-spring-ai-milvus-filter-injection.yaml +51 -134
- package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +47 -120
- package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +45 -117
- package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +40 -130
- package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +64 -157
- package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +41 -128
- package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +41 -117
- package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +40 -143
- package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +44 -117
- package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +40 -100
- package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +39 -97
- package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +39 -100
- package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +46 -140
- package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +58 -172
- package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +63 -186
- package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +50 -142
- package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +51 -134
- package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +48 -121
- package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +52 -121
- package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +49 -125
- package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +51 -122
- package/rules/tool-poisoning/ATR-2026-00561-fastmcp-vulnerable-to-windows-command-in.yaml +36 -73
- package/rules/tool-poisoning/ATR-2026-00567-mcp-stdio-config-command-injection.yaml +29 -53
- package/rules/tool-poisoning/ATR-2026-00568-agent-ssrf-cloud-metadata-file-inclusion.yaml +27 -54
- package/rules/tool-poisoning/ATR-2026-00572-symjack-symlink-config-redirection.yaml +41 -103
- package/rules/tool-poisoning/ATR-2026-00575-miasma-npm-worm-agent-config-backdoor.yaml +41 -110
- package/rules/tool-poisoning/ATR-2026-00576-hades-agent-credential-theft.yaml +40 -125
- package/rules/tool-poisoning/ATR-2026-00577-create-mcp-server-stdio-exec-command-injection.yaml +53 -169
- package/rules/tool-poisoning/ATR-2026-00581-mcp-tool-rug-pull-post-approval-redefinition.yaml +38 -137
- package/rules/tool-poisoning/ATR-2026-00714-tool-camouflage-forced-tool-call.yaml +33 -78
- package/rules/tool-poisoning/ATR-2026-00715-tool-knowledge-hijack-identity-injection.yaml +39 -87
- package/rules/tool-poisoning/ATR-2026-00716-ipi-data-destruction-carrier.yaml +31 -76
- package/rules/tool-poisoning/ATR-2026-00720-tool-misuse-privilege-escalation-social.yaml +29 -71
- package/rules/tool-poisoning/ATR-2026-01300-mcp-notes-param-chat-history-exfil.yaml +37 -102
- package/rules/tool-poisoning/ATR-2026-01301-tool-description-exclusive-tool-override.yaml +36 -92
- package/rules/tool-poisoning/ATR-2026-01302-fake-tool-result-instruction-injection.yaml +33 -88
- package/rules/tool-poisoning/ATR-2026-01303-tool-schema-enumeration-social-engineering.yaml +55 -107
- package/rules/tool-poisoning/ATR-2026-01306-mcp-oauth-command-injection.yaml +35 -87
- package/rules/tool-poisoning/ATR-2026-01307-mcp-dns-rebinding-attack.yaml +36 -91
- package/rules/tool-poisoning/ATR-2026-01310-mcp-tool-description-compliance-history-exfil.yaml +40 -110
- package/rules/tool-poisoning/ATR-2026-01775-semantic-mcp-tool-manifest-poisoning.yaml +51 -139
- package/rules/tool-poisoning/ATR-2026-01927-mcp-server-kubernetes-kubectl-command-injection.yaml +45 -109
- package/rules/tool-poisoning/ATR-2026-01928-framelink-figma-mcp-curl-fallback-command-injection.yaml +58 -164
- package/rules/tool-poisoning/ATR-2026-01930-mcp-sampling-prompt-injection.yaml +48 -129
- package/rules/tool-poisoning/ATR-2026-01931-gemini-mcp-tool-command-injection-file-exfil.yaml +42 -113
- package/rules/tool-poisoning/ATR-2026-01932-shadow-undeclared-mcp-server-registration.yaml +43 -106
- package/rules/tool-poisoning/ATR-2026-01935-litellm-custom-code-sandbox-escape-cve-2026-40217.yaml +44 -101
- package/rules/tool-poisoning/ATR-2026-01952-praisonai-codemode-sandbox-escape-rce.yaml +34 -70
- package/rules/tool-poisoning/ATR-2026-01953-praisonai-codemode-function-ctor-sandbox-escape.yaml +61 -79
- package/rules/tool-poisoning/ATR-2026-01959-openhuman-shell-allowlist-env-prefix-bypass.yaml +36 -123
- package/rules/tool-poisoning/ATR-2026-01963-praisonai-action-orchestrator-step-target-path-traversal-rce.yaml +61 -66
- package/rules/tool-poisoning/ATR-2026-01965-flowise-custommcp-os-command-rce.yaml +39 -80
- package/rules/tool-poisoning/ATR-2026-01967-deepchat-mermaid-xss-rce-ipc-mcp-register.yaml +58 -66
- package/rules/tool-poisoning/ATR-2026-01968-deepchat-markdown-deeplink-openexternal-rce-bypass.yaml +44 -92
- package/rules/tool-poisoning/ATR-2026-01970-praisonai-filetools-normpath-path-traversal.yaml +64 -84
- package/rules/tool-poisoning/ATR-2026-01973-anythingllm-logo-endpoint-path-traversal.yaml +57 -64
- package/rules/tool-poisoning/ATR-2026-01978-anythingllm-collector-process-filename-path-traversal-delete.yaml +58 -64
- package/rules/tool-poisoning/ATR-2026-01979-pandasai-prompt-injection-dunder-sandbox-escape-rce.yaml +60 -72
- package/rules/tool-poisoning/ATR-2026-01980-agentic-flow-mcp-tool-param-command-injection.yaml +49 -99
- package/rules/tool-poisoning/ATR-2026-01982-dbt-mcp-node-selection-argument-injection.yaml +49 -102
- package/rules/tool-poisoning/ATR-2026-01983-mcp-for-stata-log-file-name-command-injection.yaml +43 -110
- package/rules/tool-poisoning/ATR-2026-01985-mcp-connect-bridge-unauth-process-spawn-rce.yaml +41 -115
- package/rules/tool-poisoning/ATR-2026-01987-langroid-sqlchatagent-prompt-to-sql-rce.yaml +53 -110
- package/rules/tool-poisoning/ATR-2026-02021-mcp-inspector-unauthenticated-proxy-rce.yaml +48 -123
- package/rules/tool-poisoning/ATR-2026-02022-curxecute-cursor-mcp-json-injected-server-rce.yaml +51 -131
- package/rules/tool-poisoning/ATR-2026-02023-escaperoute-filesystem-mcp-prefix-bypass.yaml +48 -129
- package/rules/tool-poisoning/ATR-2026-02024-escaperoute-filesystem-mcp-symlink-launchagent.yaml +49 -128
- package/rules/tool-poisoning/ATR-2026-02025-mcp-full-schema-poisoning-nondescription-field.yaml +50 -142
- package/rules/tool-poisoning/ATR-2026-02027-diagnostic-content-remediation-command-injection.yaml +58 -72
- package/rules/tool-poisoning/ATR-2026-02041-shell-injection-echo-marker-poc.yaml +32 -93
- package/rules/tool-poisoning/ATR-2026-02102-html-injection-tool-arg-approval-ui-xss.yaml +33 -107
- package/rules/tool-poisoning/ATR-2026-02141-mcp-server-config-command-execution.yaml +42 -107
- package/rules/tool-poisoning/ATR-2026-02145-python-sandbox-escape-generator-frame-introspection.yaml +36 -105
- package/rules/tool-poisoning/ATR-2026-02193-ssrf-ipv6-noncanonical-loopback-bypass.yaml +35 -86
- package/rules/tool-poisoning/ATR-2026-02194-go-init-func-process-exec-codegen-rce.yaml +35 -83
- package/rules/tool-poisoning/ATR-2026-02233-unscoped-destructive-db-request-nl.yaml +34 -95
- package/rules/tool-poisoning/ATR-2026-02260-agentjacking-remediation-framed-execution.yaml +42 -107
- package/rules/tool-poisoning/ATR-2026-02263-workflow-sql-template-expression-injection.yaml +35 -119
- package/rules/tool-poisoning/ATR-2026-02350-mcp-json-rpc-case-duplicate-key-tool-smuggling.yaml +34 -100
- package/rules/tool-poisoning/ATR-2026-02352-imap-search-command-injection-email-tool-args.yaml +32 -93
- package/rules/tool-poisoning/ATR-2026-02372-unsigned-task-feed-npm-npx-lifecycle-rce.yaml +39 -101
- package/rules/tool-poisoning/ATR-2026-02376-tool-description-conversational-trigger-history-exfil.yaml +33 -84
- package/rules/tool-poisoning/ATR-2026-02403-mcp-external-content-missing-spotlighting.yaml +52 -282
- package/rules/tool-poisoning/ATR-2026-02514-mcp-server-metadata-url-html-breakout.yaml +105 -0
- package/rules/tool-poisoning/ATR-2026-02542-pipeline-query-stage-injection.yaml +95 -0
- package/rules/tool-poisoning/ATR-2026-02557-shell-separator-in-path-typed-tool-argument.yaml +112 -0
- package/rules/tool-poisoning/ATR-2026-02666-url-userinfo-decoy-host-allowlist-bypass.yaml +101 -0
- package/rules/tool-poisoning/ATR-2026-02668-vcs-ref-name-command-substitution.yaml +98 -0
- package/rules/tool-poisoning/ATR-2026-02669-query-pipeline-stage-in-identifier-parameter.yaml +88 -0
- package/rules/tool-poisoning/ATR-2026-02682-xml-entity-expansion-bomb.yaml +98 -0
- package/rules/tool-poisoning/ATR-2026-02707-crlf-header-injection-mail-tool-argument.yaml +88 -0
- package/spec/README.md +2 -2
- package/spec/atr-correlation-v1.0.md +16 -4
- package/spec/atr-profile-v1.0.md +11 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
title: MCP Server Descriptor URL Field Carries an HTML/Script Breakout Payload
|
|
2
|
+
id: ATR-2026-02514
|
|
3
|
+
rule_version: 1
|
|
4
|
+
status: experimental
|
|
5
|
+
description: |
|
|
6
|
+
Detects a poisoned MCP server descriptor whose URL-typed metadata field carries markup instead of a URL — the payload that executes wherever a registry, catalogue or client renders server metadata.
|
|
7
|
+
Generalised from CVE-2026-44429 (MCP Registry < 1.7.7, CWE-79/CWE-116): the public catalogue interpolated server.websiteUrl into a double-quoted href via innerHTML, while server-side validation only checked that the value parsed as an absolute https URL and never rejected quote characters. A published server.json could therefore break out of the attribute and run script in every visitor's browser. The descriptor is data an MCP client ingests, so the same poisoned field reaches any surface that renders server metadata — registry UIs, client server pickers, tool inspectors.
|
|
8
|
+
Detection targets the field-type contract: a metadata key that must hold a URL, holding a value that also contains an inline event handler, a script or markup element, or a script-executing scheme. Text fields such as description are deliberately out of scope — ATR-2026-00571 already covers script payloads in rendered agent/MCP output; this rule covers the narrower case where the value's declared type makes markup unambiguously wrong.
|
|
9
|
+
Matching is confined to the INSIDE of the URL value: the bridge span is [^"\x27\n] so it cannot run past the value's closing quote into a sibling field, and the attribute-breakout condition requires an escaped quote (\") — the act of closing the attribute — before the handler. Without both constraints the rule fires on ordinary catalogue JSON that pairs a URL field with an HTML field on the same line, and on URLs whose query string happens to carry a parameter named onload=. Known blind spot accepted for precision: a single-quoted descriptor broken out with a bare double quote is not matched, because RE2 has no backreference to bind the value's delimiter.
|
|
10
|
+
author: ATR Community
|
|
11
|
+
date: 2026/08/23
|
|
12
|
+
schema_version: '0.1'
|
|
13
|
+
detection_tier: pattern
|
|
14
|
+
maturity: test
|
|
15
|
+
severity: medium
|
|
16
|
+
references:
|
|
17
|
+
owasp_llm:
|
|
18
|
+
- LLM06:2025
|
|
19
|
+
owasp_agentic:
|
|
20
|
+
- ASI06:2026
|
|
21
|
+
mitre_atlas:
|
|
22
|
+
- AML.T0053 - LLM Plugin Compromise
|
|
23
|
+
mitre_attack:
|
|
24
|
+
- T1059.007 - JavaScript
|
|
25
|
+
cve:
|
|
26
|
+
- CVE-2026-44429
|
|
27
|
+
cwe:
|
|
28
|
+
- CWE-79
|
|
29
|
+
- CWE-116
|
|
30
|
+
external:
|
|
31
|
+
- https://nvd.nist.gov/vuln/detail/CVE-2026-44429
|
|
32
|
+
metadata_provenance:
|
|
33
|
+
mitre_atlas: human-reviewed
|
|
34
|
+
owasp_llm: human-reviewed
|
|
35
|
+
owasp_agentic: human-reviewed
|
|
36
|
+
cve: human-reviewed
|
|
37
|
+
cwe: human-reviewed
|
|
38
|
+
compliance:
|
|
39
|
+
eu_ai_act:
|
|
40
|
+
- article: '15'
|
|
41
|
+
context: Article 15 cybersecurity — runtime detection of markup injection carried in MCP server descriptor URL fields.
|
|
42
|
+
strength: primary
|
|
43
|
+
- article: '9'
|
|
44
|
+
context: Article 9 risk management — runtime risk-treatment control for poisoned MCP catalogue metadata.
|
|
45
|
+
strength: secondary
|
|
46
|
+
nist_ai_rmf:
|
|
47
|
+
- subcategory: MP.5.1
|
|
48
|
+
context: MAP 5.1 — adversarial input characterised/detected for MCP descriptor metadata poisoning.
|
|
49
|
+
strength: primary
|
|
50
|
+
- subcategory: MG.3.2
|
|
51
|
+
context: MANAGE 3.2 — runtime monitoring control for untrusted server metadata rendered to operators.
|
|
52
|
+
strength: secondary
|
|
53
|
+
iso_42001:
|
|
54
|
+
- clause: '8.1'
|
|
55
|
+
context: Clause 8.1 operational control — detection of markup payloads in URL-typed MCP metadata fields.
|
|
56
|
+
strength: primary
|
|
57
|
+
- clause: '8.3'
|
|
58
|
+
context: Clause 8.3 AI risk treatment — runtime detection as treatment control.
|
|
59
|
+
strength: secondary
|
|
60
|
+
tags:
|
|
61
|
+
category: tool-poisoning
|
|
62
|
+
subcategory: metadata-poisoning
|
|
63
|
+
scan_target: mcp
|
|
64
|
+
confidence: high
|
|
65
|
+
source: cve-disclosure
|
|
66
|
+
vendor_sources: nvd-cve-2026-44429
|
|
67
|
+
suppress_in_code_blocks: true
|
|
68
|
+
agent_source:
|
|
69
|
+
type: mcp_exchange
|
|
70
|
+
framework:
|
|
71
|
+
- any
|
|
72
|
+
provider:
|
|
73
|
+
- any
|
|
74
|
+
detection:
|
|
75
|
+
condition: any
|
|
76
|
+
false_positives:
|
|
77
|
+
- A data:image/... icon value — a legitimate inline image, not a script scheme.
|
|
78
|
+
- A description or documentation field whose prose mentions onload, onerror or script tags.
|
|
79
|
+
- Registry documentation explaining which characters the validator rejects.
|
|
80
|
+
- javascript:void(0) / javascript:; navigation placeholders in legacy menu JSON — excluded explicitly.
|
|
81
|
+
- 'A URL field followed on the same line by a sibling field holding HTML (logoHtml, embed, inline svg) — excluded: the bridge span cannot cross the value''s closing quote.'
|
|
82
|
+
- 'A legitimate URL whose query string contains a parameter literally named onload=/onclick= — excluded: an attribute breakout must first close the attribute with an escaped quote.'
|
|
83
|
+
- 'KNOWN RESIDUAL: unfenced source code or prose that quotes a live breakout payload verbatim (e.g. the registry''s own validator regression test) still matches. Markdown fenced/inline code blocks are suppressed; bare code is not separable by single-event regex. This is why the rule alerts rather than blocks.'
|
|
84
|
+
conditions:
|
|
85
|
+
- field: content
|
|
86
|
+
operator: regex
|
|
87
|
+
value: (?i)["\x27](?:websiteUrl|website_url|homepage|homepage_?url|documentation_?url|docs_?url|iconUrl|icon_?url|repositoryUrl|repository_?url|source_?url)\\{0,2}["\x27]\s*:\s*\\{0,2}["\x27]\s*https?://[^"\x27\n]{0,40}\\{1,2}["\x27]\s*[^"\x27\n]{0,24}\bon(?:error|load|click|focus|mouseover|mouseenter|animationstart|toggle)\s*=
|
|
88
|
+
description: |
|
|
89
|
+
A URL-typed descriptor field whose value continues past the URL into an inline event handler — the attribute breakout of CVE-2026-44429.
|
|
90
|
+
- field: content
|
|
91
|
+
operator: regex
|
|
92
|
+
value: (?i)["\x27](?:websiteUrl|website_url|homepage|homepage_?url|documentation_?url|docs_?url|iconUrl|icon_?url|repositoryUrl|repository_?url|source_?url)\\{0,2}["\x27]\s*:\s*\\{0,2}["\x27]\s*(?:(?:java|vb)script:\s*(?:[^v;"\x27\s]|v[^o"\x27\s]|vo[^i"\x27\s]|voi[^d"\x27\s]|void\s*\(\s*[^0-9)\s])|data:text/html)
|
|
93
|
+
description: |
|
|
94
|
+
A script-executing scheme where the descriptor contract requires an http(s) URL.
|
|
95
|
+
- field: content
|
|
96
|
+
operator: regex
|
|
97
|
+
value: (?i)["\x27](?:websiteUrl|website_url|homepage|homepage_?url|documentation_?url|docs_?url|iconUrl|icon_?url|repositoryUrl|repository_?url|source_?url)\\{0,2}["\x27]\s*:\s*\\{0,2}["\x27]\s*https?://[^"\x27\n]{0,40}(?:<\s*/\s*a\s*>|<\s*(?:script|img|svg|iframe)\b)
|
|
98
|
+
description: |
|
|
99
|
+
A URL-typed field whose value closes the surrounding element and opens a new markup element — the tag-breakout variant of the same flaw.
|
|
100
|
+
response:
|
|
101
|
+
actions:
|
|
102
|
+
- alert
|
|
103
|
+
message_template: |
|
|
104
|
+
[ATR-2026-02514] MEDIUM: an MCP server descriptor's URL-typed metadata field contains markup or a script scheme (CVE-2026-44429 class, CWE-79/CWE-116). The value breaks out of the attribute it is interpolated into. Reject the descriptor and validate that URL fields parse as http(s) and contain no quote or angle-bracket characters.
|
|
105
|
+
confidence: 80
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
title: Observability Query Tool Argument Appends a Pipeline Stage and Comments Out the Rest of the Query
|
|
2
|
+
id: ATR-2026-02542
|
|
3
|
+
rule_version: 1
|
|
4
|
+
status: experimental
|
|
5
|
+
description: |
|
|
6
|
+
Detects an agent tool argument that is documented as an identifier or a shorthand timeframe but whose value carries pipeline-query syntax: a `|` followed by a stage verb (`fields`, `fieldsAdd`, `filter`, `summarize`, `project`, `extend`, `parse`, `lookup`, ...) and terminated by a `//` line comment that swallows whatever the tool intended to append. That comment terminator is the tell -- a caller who merely wanted a legitimate value has no reason to comment out the rest of the server's own query. Mined from GHSA-pqh8-p93p-2rx7 (@dynatrace-oss/dynatrace-mcp-server interpolates `entityNames`, `timeframe`, `clusterId` and `kubernetesEntityId` straight into DQL strings; their Zod schemas are plain `z.string()` with no pattern validation, so `svc" | fields id, name, tags //` replaces the tool's `| fields id, name, type` stage, and `30d, to: now() | fieldsAdd internal_secret //` injects a stage before the tool's `| filter`). The impact is contract escape rather than new privilege: the tool's field selection, display caps, time-window bounds and its `readOnlyHint: true` annotation -- which MCP clients may treat as a reason to auto-approve -- are all bypassed. Written against the pipeline-and-comment shape shared by DQL, KQL and similar observability query languages rather than against Dynatrace's parameter names, because every observability MCP server that string-builds a query has the same sink.
|
|
7
|
+
author: ATR Community (GHSA sweep)
|
|
8
|
+
date: 2026/08/23
|
|
9
|
+
schema_version: '0.1'
|
|
10
|
+
detection_tier: pattern
|
|
11
|
+
maturity: test
|
|
12
|
+
severity: medium
|
|
13
|
+
references:
|
|
14
|
+
cwe:
|
|
15
|
+
- CWE-943
|
|
16
|
+
- CWE-20
|
|
17
|
+
owasp_llm:
|
|
18
|
+
- LLM06:2025
|
|
19
|
+
owasp_agentic:
|
|
20
|
+
- ASI05:2026
|
|
21
|
+
mitre_attack:
|
|
22
|
+
- T1213 - Data from Information Repositories
|
|
23
|
+
mitre_atlas:
|
|
24
|
+
- AML.T0053 - LLM Plugin Compromise
|
|
25
|
+
ghsa:
|
|
26
|
+
- GHSA-pqh8-p93p-2rx7
|
|
27
|
+
external:
|
|
28
|
+
- https://github.com/advisories/GHSA-pqh8-p93p-2rx7
|
|
29
|
+
metadata_provenance:
|
|
30
|
+
cwe: human-reviewed
|
|
31
|
+
owasp_llm: human-reviewed
|
|
32
|
+
owasp_agentic: human-reviewed
|
|
33
|
+
mitre_attack: human-reviewed
|
|
34
|
+
mitre_atlas: human-reviewed
|
|
35
|
+
ghsa: ghsa-sync
|
|
36
|
+
compliance:
|
|
37
|
+
eu_ai_act:
|
|
38
|
+
- article: '15'
|
|
39
|
+
context: Article 15 (accuracy, robustness and cybersecurity) requires resistance to unauthorised data access; this rule detects tool arguments that inject query pipeline stages to read fields and time ranges outside the tool's declared output contract.
|
|
40
|
+
strength: primary
|
|
41
|
+
- article: '9'
|
|
42
|
+
context: Article 9 (risk management system) requires identified risks to be addressed by appropriate measures; this rule is the runtime risk-treatment control for the query-language-injection-via-tool-argument risk class.
|
|
43
|
+
strength: secondary
|
|
44
|
+
nist_ai_rmf:
|
|
45
|
+
- subcategory: MG.2.3
|
|
46
|
+
context: Pipeline query injection through identifier-typed tool parameters is an identified AI risk requiring an active runtime countermeasure; this rule is the primary treatment implementation.
|
|
47
|
+
strength: primary
|
|
48
|
+
- subcategory: MP.5.1
|
|
49
|
+
context: MP.5.1 adversarial-input identification must enumerate observability query languages as an injection sink reachable from model-controlled tool arguments.
|
|
50
|
+
strength: secondary
|
|
51
|
+
iso_42001:
|
|
52
|
+
- clause: '8.1'
|
|
53
|
+
context: ISO/IEC 42001 Clause 8.1 (operational planning and control) is operationalised by this rule's detection of tool arguments that escape their declared query contract.
|
|
54
|
+
strength: primary
|
|
55
|
+
- clause: '8.3'
|
|
56
|
+
context: ISO/IEC 42001 Clause 8.3 (AI risk treatment) is implemented by this rule's runtime detection of the injection attempt.
|
|
57
|
+
strength: secondary
|
|
58
|
+
tags:
|
|
59
|
+
category: tool-poisoning
|
|
60
|
+
subcategory: pipeline-query-stage-injection
|
|
61
|
+
scan_target: both
|
|
62
|
+
confidence: medium
|
|
63
|
+
agent_source:
|
|
64
|
+
type: mcp_exchange
|
|
65
|
+
framework:
|
|
66
|
+
- any
|
|
67
|
+
provider:
|
|
68
|
+
- any
|
|
69
|
+
detection:
|
|
70
|
+
condition: any
|
|
71
|
+
conditions:
|
|
72
|
+
- field: content
|
|
73
|
+
operator: regex
|
|
74
|
+
value: (?i)\|[ \t]{0,4}\b(?:fieldsAdd|fieldsRemove|fieldsKeep|fields|filterOut|filter|summarize|project|extend|search|parse|dedup|lookup|sort|limit)\b[^\n"\x27]{0,40}[ \t]//["\x27]
|
|
75
|
+
description: 'A pipeline stage verb introduced by | whose tail is commented out by a // that runs IMMEDIATELY into a string terminator (zero spaces). The zero-space requirement is load-bearing: in a real injection the // is the last thing inside the argument value and the quote that follows is the serialization boundary, whereas an ordinary source-code line comment always puts a space after the // before any quoted word (`// "status" is OPEN`). The bridge also forbids quotes, so a match cannot run out of the query string and land on a trailing code comment. Both were confirmed false-positive sources: with a `[^\n]{0,80}\s//\s{0,4}["\x27,}\]]` tail this fired on TypeScript, Go and Java sources that hold a DQL/KQL constant and explain a field in a trailing comment.'
|
|
76
|
+
- field: content
|
|
77
|
+
operator: regex
|
|
78
|
+
value: (?i)[:\[,][ \t]{0,4}["\x27][A-Za-z0-9_.\-]{1,40}\\{1,2}["\x27][ \t]{0,4}\|[ \t]{0,4}\b(?:fieldsAdd|fieldsRemove|fieldsKeep|fields|filterOut|filter|summarize|project|extend|parse|dedup|lookup|sort|limit)\b
|
|
79
|
+
description: 'Escaped-quote breakout, anchored at the START of the argument value: a JSON structural position (: [ ,), the opening quote, a bare identifier with no spaces or operators, and then the value immediately escaping its own quote into a pipeline stage. The start anchor is what makes this safe. A bare `\" | verb` test is NOT a breakout signal -- once a query is serialized into a tool call EVERY quote inside it is backslash-escaped, so `host == \"web-01\" | fields` (an ordinary literal comparison in DQL/KQL/SPL) has exactly the same shape as a breakout. Requiring the value to begin as a bare identifier and escape immediately separates the two, because a legitimate query never starts that way.'
|
|
80
|
+
- field: content
|
|
81
|
+
operator: regex
|
|
82
|
+
value: (?i)[a-z0-9_)\]]\\{1,2}["\x27][ \t]{0,4}(?:,[ \t]{0,4}(?:to|from)[ \t]{0,2}:|or\b|and\b)[ \t]{0,4}[^\n"\x27]{0,40}[ \t]//["\x27]
|
|
83
|
+
description: 'Escaped-quote breakout into a boolean/timeframe clause (or / and / , to: / , from:) terminated by the same zero-space // string terminator -- the tautology and prefix-injection variants of the same escape. Three hardenings, each traced to a measured false positive: the bridge forbids quotes and the // must run straight into the string terminator (the loose form fired on a JS config object, `{ from: "now()-24h", to: "now()" }; // "to" is exclusive`), and the backslash before the quote is MANDATORY rather than optional (with it optional the or-branch fired on ordinary documentation prose offering two literal choices, `the transport to "grpc" or http //"grpc" is recommended`). Inside a serialized tool argument a real breakout must escape the quote it is breaking out of; unescaped quotes are prose.'
|
|
84
|
+
false_positives:
|
|
85
|
+
- A query-authoring assistant whose legitimate job is emitting DQL/KQL, where the user genuinely asked for a pipeline whose tail is commented out and which ends exactly at the comment. Rare, because the rule requires the // to run into the string terminator with no space, whereas a human-written comment carries text.
|
|
86
|
+
- 'NOT a false positive any more, recorded because the first draft got it wrong: a legitimate query containing an escaped literal followed by another stage (`host == \" web-01 \" | fields ...`). Serialization escapes every quote in the query, so that shape is ordinary, not hostile. Condition 2 now requires the value to OPEN as a bare identifier and escape immediately.'
|
|
87
|
+
- A saved-search definition or dashboard export carried through agent context that already contains commented-out stages. The text is a stored artifact, not a live tool argument; check the event type before acting.
|
|
88
|
+
- An advisory or blog post quoting the injection payload verbatim. The payload is structurally identical to the live attack by construction.
|
|
89
|
+
response:
|
|
90
|
+
actions:
|
|
91
|
+
- alert
|
|
92
|
+
actions_rationale: 'response-action eligibility (docs/RESPONSE-ACTION-ELIGIBILITY.md): no FP measurement on the benign corpus; ceiling = observe. Removed block_tool(interrupt). Detection unchanged — recall cost is zero.'
|
|
93
|
+
message_template: |
|
|
94
|
+
[ATR-2026-02542] MEDIUM: an observability-query tool argument injects a pipeline stage and comments out the remainder of the server-built query. The tool's field selection, display caps, time-window bounds and any readOnlyHint-based auto-approval are being bypassed. Reject the argument and fix the server to bind values rather than interpolate them into query text.
|
|
95
|
+
confidence: 65
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
title: Shell Command Separator Inside a Path-Typed MCP Tool Argument
|
|
2
|
+
id: ATR-2026-02557
|
|
3
|
+
rule_version: 1
|
|
4
|
+
status: experimental
|
|
5
|
+
description: |
|
|
6
|
+
Detects an MCP or agent tool invocation in which a structurally path-typed argument - projectPath, file_path, directory, filename, log_file_name, cwd, output_path - carries a shell command separator followed by a command that either takes an argument (a flag, or an absolute system path) or is a bare reconnaissance binary that ends the value.
|
|
7
|
+
This is the shape reported as CVE-2026-25546 against godot-mcp, where executeOperation passed projectPath straight into exec(), so every tool that accepts a project path - create_scene, add_node, load_sprite and the rest - became a command-execution primitive. The same shape recurs across the MCP ecosystem wherever a typed path or identifier reaches a shell: MCP-for-Stata's log_file_name, and the broader family of servers that build command lines by string concatenation.
|
|
8
|
+
WHAT ADVERSARIAL MEASUREMENT CHANGED (2026-08-23). The first draft of this rule asserted that a separator inside a path argument "has no legitimate meaning". Run against the real engine, that formulation fired on 11 of 18 realistic benign samples. Separators are legal POSIX filename characters and humans use them as PUNCTUATION: "Smith; John Resume.pdf" (the Lastname; Firstname convention), "Attention Is All You Need; Vaswani et al 2017.pdf", "Terms; Conditions v4 EN.docx", "Fleet Overview | Grafana" (a browser page title used as a save-as name), "Daft Punk | Alive 2007", "/opt/tools;/opt/sdk/bin" (a semicolon-delimited search path). Structurally "| id" and "| Grafana" are the SAME string shape, so a separator plus a word token cannot be the signal.
|
|
9
|
+
What survives measurement is narrower and honest: the injected command must carry a shell TELL. Either it takes an argument that filename punctuation never takes - a flag terminated by whitespace, a quote or '=', or an absolute system path (/etc, /tmp, /var, /usr, /bin, ...) - or it is one of a deliberately tiny vocabulary of argumentless reconnaissance binaries (whoami, uname, hostname, ifconfig, netstat, lsblk, dmesg) that are not English filename words.
|
|
10
|
+
This rule therefore IS partly a command-shape test, not the pure structural test the first draft claimed. It still adds detection the corpus does not have: verified 2026-08-23 against the full loaded corpus, "; ls -la /etc", "| whoami" and "; uname" through a path-typed argument produce a match from this rule and from no other. "; cat /etc/passwd", "; python3 -c" and "out.log; touch /tmp/pwn" are already covered by ATR-2026-00066 / 00111 / 01615, so this rule is additive there rather than load-bearing.
|
|
11
|
+
CWE-78 (OS Command Injection), CWE-88 (Argument Injection), CWE-1287 (Improper Validation of Specified Type of Input).
|
|
12
|
+
author: ATR Community
|
|
13
|
+
date: 2026/08/23
|
|
14
|
+
schema_version: '0.1'
|
|
15
|
+
detection_tier: pattern
|
|
16
|
+
maturity: test
|
|
17
|
+
severity: high
|
|
18
|
+
references:
|
|
19
|
+
cve:
|
|
20
|
+
- CVE-2026-25546
|
|
21
|
+
euvd:
|
|
22
|
+
- EUVD-2026-25546
|
|
23
|
+
owasp_llm:
|
|
24
|
+
- LLM06:2025
|
|
25
|
+
owasp_agentic:
|
|
26
|
+
- ASI02:2026
|
|
27
|
+
- ASI05:2026
|
|
28
|
+
mitre_atlas:
|
|
29
|
+
- AML.T0053 - LLM Plugin Compromise
|
|
30
|
+
mitre_attack:
|
|
31
|
+
- 'T1059.004 - Command and Scripting Interpreter: Unix Shell'
|
|
32
|
+
- 'T1505.003 - Server Software Component: Web Shell'
|
|
33
|
+
external:
|
|
34
|
+
- https://github.com/Coding-Solo/godot-mcp/security/advisories
|
|
35
|
+
metadata_provenance:
|
|
36
|
+
cve: human-reviewed
|
|
37
|
+
owasp_llm: human-reviewed
|
|
38
|
+
owasp_agentic: human-reviewed
|
|
39
|
+
mitre_atlas: human-reviewed
|
|
40
|
+
mitre_attack: human-reviewed
|
|
41
|
+
compliance:
|
|
42
|
+
eu_ai_act:
|
|
43
|
+
- article: '15'
|
|
44
|
+
context: Article 15 requires accuracy, robustness and cybersecurity appropriate to the intended purpose. An MCP server that turns a path argument into a shell command line fails that requirement for every tool that accepts the argument; detecting the separator at call time is the compensating control while the server remains unpatched.
|
|
45
|
+
strength: primary
|
|
46
|
+
- article: '9'
|
|
47
|
+
context: Article 9 risk management must record the tool surface an agent can reach. When one unvalidated path parameter converts an entire tool family into command execution, that concentration of risk belongs in the risk register and this rule supplies the runtime evidence for it.
|
|
48
|
+
strength: secondary
|
|
49
|
+
nist_ai_rmf:
|
|
50
|
+
- function: Measure
|
|
51
|
+
subcategory: MS.2.7
|
|
52
|
+
context: MS.2.7 requires AI system security and resilience to be evaluated and documented. Inspecting typed tool arguments for shell syntax is a measurable, per-invocation control over the agent-to-tool boundary rather than an assumption that every MCP server validates its own input.
|
|
53
|
+
strength: primary
|
|
54
|
+
- function: Manage
|
|
55
|
+
subcategory: MG.3.1
|
|
56
|
+
context: MG.3.1 requires risks from third-party AI resources to be managed. MCP servers are third-party components whose input handling the deploying organisation cannot audit at scale, so enforcing argument typing at the client is the practical management control.
|
|
57
|
+
strength: primary
|
|
58
|
+
- function: Map
|
|
59
|
+
subcategory: MP.5.1
|
|
60
|
+
context: MP.5.1 requires adversarial techniques to be characterised. Argument injection through a structurally typed parameter is mapped here as distinct from command injection through a free-text command parameter, because the defensive assumption differs.
|
|
61
|
+
strength: secondary
|
|
62
|
+
iso_42001:
|
|
63
|
+
- clause: '8.1'
|
|
64
|
+
context: Clause 8.1 operational control over externally provided processes covers MCP servers invoked by the agent. This rule is the operational control applied to each invocation, independent of the server's own hardening.
|
|
65
|
+
strength: primary
|
|
66
|
+
- clause: '6.2'
|
|
67
|
+
context: Clause 6.2 risk treatment requires proportionate controls. Because a single injected separator yields code execution at the server's privilege level, per-argument inspection is the proportionate treatment.
|
|
68
|
+
strength: secondary
|
|
69
|
+
tags:
|
|
70
|
+
category: tool-poisoning
|
|
71
|
+
suppress_in_code_blocks: true
|
|
72
|
+
subcategory: argument-injection-path-typed-parameter
|
|
73
|
+
scan_target: tool_args
|
|
74
|
+
confidence: high
|
|
75
|
+
source: cve-disclosure
|
|
76
|
+
vendor_sources: godot-mcp-cve-2026-25546
|
|
77
|
+
agent_source:
|
|
78
|
+
type: mcp_exchange
|
|
79
|
+
framework:
|
|
80
|
+
- mcp
|
|
81
|
+
- any
|
|
82
|
+
provider:
|
|
83
|
+
- any
|
|
84
|
+
detection:
|
|
85
|
+
condition: any
|
|
86
|
+
method: pattern
|
|
87
|
+
false_positives:
|
|
88
|
+
- 'MEASURED RESIDUAL: a document that quotes the attack payload verbatim inside a FOUR-SPACE INDENTED code block still matches. The engine''s code-block suppression (tags.suppress_in_code_blocks, enabled here) covers fenced blocks, inline backticks and markdown table cells, but not indented blocks - so a fenced or inline advisory is clean and an indented one is not. Verified 2026-08-23: the fenced advisory, the inline-backtick advisory, the CHANGELOG prose and this rule''s own YAML test cases are all clean; only the indented form fires.'
|
|
89
|
+
- Security test suites, MCP server fixtures and CVE reproductions that pass a deliberately malicious path argument will match, which is the intended behaviour for a detection corpus.
|
|
90
|
+
- A path-typed argument whose value legitimately contains a separator followed by a lowercase word AND a flag-shaped token - for example a filename fragment written as 'draft -final ' with a trailing space - would match. The flag must terminate at whitespace, a quote or '=', which is what keeps 'draft -final.pdf' and 'rollup -v2.csv' clean; the residual is the spaced form.
|
|
91
|
+
- 'The engine compiles array-format regex conditions with flag ''i'' unconditionally (src/engine.ts compilePatterns) and IGNORES case_sensitive on this condition format. Every case-based discriminator is therefore unavailable to this rule. That is why the bare-recon vocabulary excludes ''id'', ''pwd'', ''groups'', ''arch'', ''env'' and ''ps'': each of them also matches an ordinary capitalised filename label such as ''/scans/Passport | ID'' or ''/design/Hero Banner | ps''.'
|
|
92
|
+
conditions:
|
|
93
|
+
- field: content
|
|
94
|
+
operator: regex
|
|
95
|
+
value: '"(?:[Pp]roject_?[Pp]ath|[Ff]ile_?[Pp]ath|[Dd]ir(?:ectory)?_?[Pp]ath|[Dd]irectory|[Ff]older|[Ff]ile_?[Nn]ame|[Oo]utput_?[Pp]ath|[Ii]nput_?[Pp]ath|[Ll]og_?[Ff]ile_?[Nn]ame|[Tt]arget_?[Pp]ath|[Ss]cene_?[Pp]ath|[Ss]ave_?[Pp]ath|cwd|[Ww]orkspace_?[Pp]ath)"\s*:\s*"[^"\n]{0,40}(?:;|&&|\|\||\s\|)\s{0,3}(?:\b[A-Za-z_][A-Za-z0-9_.-]{1,15}|/(?:usr/)?s?bin/[A-Za-z0-9_.-]{1,15})\s{1,2}(?:-{1,2}[A-Za-z][A-Za-z0-9-]{0,10}(?:\s|"|=)|/(?:etc|tmp|var|usr|bin|sbin|opt|root|home|dev|proc)[/\s"])'
|
|
96
|
+
description: A path-typed tool argument is chained past a shell separator to a lowercase command that takes a flag or an absolute system path as its argument - argument injection into a server that concatenates the value into a shell string
|
|
97
|
+
- field: content
|
|
98
|
+
operator: regex
|
|
99
|
+
value: '"(?:[Pp]roject_?[Pp]ath|[Ff]ile_?[Pp]ath|[Dd]ir(?:ectory)?_?[Pp]ath|[Dd]irectory|[Ff]older|[Ff]ile_?[Nn]ame|[Oo]utput_?[Pp]ath|[Ii]nput_?[Pp]ath|[Ll]og_?[Ff]ile_?[Nn]ame|[Tt]arget_?[Pp]ath|[Ss]cene_?[Pp]ath|[Ss]ave_?[Pp]ath|cwd|[Ww]orkspace_?[Pp]ath)"\s*:\s*"[^"\n]{0,40}(?:;|&&|\|\||\s\|)\s{0,3}\b(?:whoami|uname|hostname|ifconfig|netstat|lsblk|dmesg)\s{0,2}"'
|
|
100
|
+
description: A path-typed tool argument is chained past a shell separator to a bare reconnaissance binary that terminates the value - the argumentless form of the same argument injection
|
|
101
|
+
response:
|
|
102
|
+
actions:
|
|
103
|
+
- alert
|
|
104
|
+
- snapshot
|
|
105
|
+
- escalate
|
|
106
|
+
actions_rationale: 'response-action eligibility (docs/RESPONSE-ACTION-ELIGIBILITY.md): no FP measurement on the benign corpus; ceiling = observe. Removed block_tool(interrupt). Detection unchanged — recall cost is zero.'
|
|
107
|
+
auto_response_threshold: high
|
|
108
|
+
notify:
|
|
109
|
+
- security_team
|
|
110
|
+
message_template: |
|
|
111
|
+
[ATR-2026-02557] HIGH: a path-typed tool argument contains a shell command separator followed by a second command. A filesystem path has no legitimate reason to contain ';', '&&', '||' or a spaced '|'. This is the CVE-2026-25546 (godot-mcp) pattern, where projectPath reached exec() and every tool that accepted a project path became a command-execution primitive. Block the call, and check whether the target server builds its command line by string concatenation - if so, every path-typed argument it exposes is affected, not just this one.
|
|
112
|
+
confidence: 77
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
title: Trusted Hostname Parked in the URL Userinfo So the Real Host Is Whatever Follows the At-Sign
|
|
2
|
+
id: ATR-2026-02666
|
|
3
|
+
rule_version: 2
|
|
4
|
+
status: experimental
|
|
5
|
+
description: |
|
|
6
|
+
Detects a URL in which a trusted-looking DOMAIN NAME sits in the userinfo component, so every allowlist that uses startsWith / contains / "does the URL mention our domain" sees the decoy while the browser or HTTP client connects to whatever follows the @ -- https://allowed-vendor.io@203.0.113.44/exfil, https://api.github.com:anypassword@collector.example/, and the percent-encoded https://api.github.com%40collector.example/. Mined from CVE-2025-47241 (Browser Use), where a decoy domain in the userinfo defeated allowed_domains. ATR-2026-02107 covers part of this shape, but only on llm_io channels (not on tool_call, where a browser_navigate URL argument actually lives) and only when the decoy carries two or more dots AND no password -- so 'allowed-vendor.io@IP', ':anypassword@' and '%40' all pass it today. PRECISION HANDLE: the userinfo must end in a plausible public suffix. That is what separates a decoy hostname from an ordinary credential -- oauth2, gitlab-ci-token, first.last and even first.last%40example.com are usernames, not hostnames.
|
|
7
|
+
V2 -- ADVERSARIAL REVIEW 2026-08-24. The public-suffix handle held: 20 hand-written benign twins included 9 ordinary credential URLs (git token remotes, GitLab CI, postgres, corporate proxy, Sentry DSN, percent-encoded registry e-mail, Azure DevOps, jsDelivr, Go module proxy) and NOT ONE fired. What did fire was 11 of 20: every one of them was DOCUMENTATION QUOTING THE PAYLOAD -- a security blog, an OWASP-style cheat sheet, a CHANGELOG announcing this CVE's fix, a pentest finding, a SIEM detection-rule doc, a StackOverflow answer about URL parsing, Traditional Chinese and Japanese bulletins, the WHATWG urltestdata.json parser fixture, and the same blog delivered through an MCP tool result. v1 declared this acceptable ("the payload is the URL"). It is not: scan_target is runtime, so an agent that browses the web alerts on every article explaining the attack it is meant to prevent.
|
|
8
|
+
THE FIX: the URL must sit in NAVIGATION-ARGUMENT position -- behind a url/uri/href/link/src/endpoint/location/address key with a quote, or after a navigation verb (navigate/goto/browse/visit/open/fetch/curl/wget). Prose that merely mentions the URL mid-sentence no longer matches. Measured after the fix: 0 of 20 benign twins, 0 of 10 fresh round-2 twins (legitimate browser_navigate, token fetch, proxy curl, CDN asset, sitemap), 4 of 5 true positives retained.
|
|
9
|
+
DELIBERATE GAP: a bare URL with no surrounding context is no longer detected. It is undecidable -- the same bytes are a navigation instruction, a link in a fetched page, and a line in a blog post.
|
|
10
|
+
RESIDUAL, MEASURED: a document that quotes the tool call VERBATIM ({"tool":"browser_navigate","arguments":{"url":"https://decoy.tld@ip"}}) still fires. That is the irreducible signature-quoting case, and it is a far narrower class than "every blog that explains authority confusion".
|
|
11
|
+
CORPUS CAVEAT: this rule is FP-clean on the 13,601-sample benign corpus, but that is a ZERO-MEASUREMENT pass -- 0 corpus samples contain a decoy-domain userinfo at all. The hand-written twins below are the only real evidence.
|
|
12
|
+
author: ATR Community (CVE sweep)
|
|
13
|
+
date: 2026/08/23
|
|
14
|
+
schema_version: '0.1'
|
|
15
|
+
detection_tier: pattern
|
|
16
|
+
maturity: test
|
|
17
|
+
severity: high
|
|
18
|
+
references:
|
|
19
|
+
cve:
|
|
20
|
+
- CVE-2025-47241
|
|
21
|
+
cwe:
|
|
22
|
+
- CWE-918
|
|
23
|
+
- CWE-1286
|
|
24
|
+
owasp_llm:
|
|
25
|
+
- LLM06:2025
|
|
26
|
+
owasp_agentic:
|
|
27
|
+
- ASI05:2026
|
|
28
|
+
- ASI04:2026
|
|
29
|
+
mitre_attack:
|
|
30
|
+
- T1036 - Masquerading
|
|
31
|
+
mitre_atlas:
|
|
32
|
+
- AML.T0049 - Exploit Public-Facing Application
|
|
33
|
+
external:
|
|
34
|
+
- https://nvd.nist.gov/vuln/detail/CVE-2025-47241
|
|
35
|
+
- https://github.com/browser-use/browser-use/security/advisories/GHSA-x39x-9qw5-ghrf
|
|
36
|
+
metadata_provenance:
|
|
37
|
+
cve: human-reviewed
|
|
38
|
+
cwe: human-reviewed
|
|
39
|
+
owasp_llm: human-reviewed
|
|
40
|
+
owasp_agentic: human-reviewed
|
|
41
|
+
mitre_attack: human-reviewed
|
|
42
|
+
mitre_atlas: human-reviewed
|
|
43
|
+
compliance:
|
|
44
|
+
eu_ai_act:
|
|
45
|
+
- article: '15'
|
|
46
|
+
context: Article 15 (accuracy, robustness and cybersecurity) requires resilience against circumvention of controls; a domain allowlist that is defeated by URL authority confusion is exactly such a circumvention, and this rule detects it.
|
|
47
|
+
strength: primary
|
|
48
|
+
- article: '9'
|
|
49
|
+
context: 'Article 9 (risk management system): navigation outside the approved domain set is an identified risk, treated at runtime by this detection.'
|
|
50
|
+
strength: secondary
|
|
51
|
+
nist_ai_rmf:
|
|
52
|
+
- subcategory: MG.2.3
|
|
53
|
+
context: Allowlist evasion by URL authority confusion is an identified AI risk; this rule is the runtime countermeasure.
|
|
54
|
+
strength: primary
|
|
55
|
+
- subcategory: MS.2.7
|
|
56
|
+
context: Counting authority-confusion URLs reaching browser tools measures how well the domain control actually holds.
|
|
57
|
+
strength: secondary
|
|
58
|
+
iso_42001:
|
|
59
|
+
- clause: '8.1'
|
|
60
|
+
context: 'ISO/IEC 42001 Clause 8.1 (operational planning and control): the browsing allowlist is an operational control, and this rule reports inputs crafted to slip past it.'
|
|
61
|
+
strength: primary
|
|
62
|
+
- clause: '8.3'
|
|
63
|
+
context: ISO/IEC 42001 Clause 8.3 (AI risk treatment) is implemented by alerting before the agent navigates to the real host.
|
|
64
|
+
strength: secondary
|
|
65
|
+
tags:
|
|
66
|
+
category: tool-poisoning
|
|
67
|
+
subcategory: url-userinfo-decoy
|
|
68
|
+
scan_target: runtime
|
|
69
|
+
confidence: high
|
|
70
|
+
agent_source:
|
|
71
|
+
type: mcp_exchange
|
|
72
|
+
framework:
|
|
73
|
+
- any
|
|
74
|
+
provider:
|
|
75
|
+
- any
|
|
76
|
+
detection:
|
|
77
|
+
condition: any
|
|
78
|
+
conditions:
|
|
79
|
+
- field: content
|
|
80
|
+
operator: regex
|
|
81
|
+
value: (?:["']?(?:url|uri|href|link|src|endpoint|location|address|target_url)["']?\s{0,3}[:=]\s{0,3}["']|\b(?:navigate|goto|browse|visit|open|fetch|curl|wget)\b\s{1,3}(?:to\s{1,3})?)\bhttps?://[\w-]{2,40}(?:\.[\w-]{1,30}){0,3}\.(?:com|net|org|io|ai|co|dev|app|cloud|xyz|info|biz|gov|edu|uk|de|fr|jp|cn|us|eu|tld|example)(?::[^\s/@"']{0,40})?@(?:\d{1,3}\.){3}\d{1,3}(?::\d{1,5})?(?:[/?\s"'\\]|$)
|
|
82
|
+
description: A domain-shaped userinfo in front of a bare IPv4 host -- the CVE-2025-47241 PoC exactly. The real destination is a raw address, which no allowlist entry can be.
|
|
83
|
+
- field: content
|
|
84
|
+
operator: regex
|
|
85
|
+
value: (?:["']?(?:url|uri|href|link|src|endpoint|location|address|target_url)["']?\s{0,3}[:=]\s{0,3}["']|\b(?:navigate|goto|browse|visit|open|fetch|curl|wget)\b\s{1,3}(?:to\s{1,3})?)\bhttps?://[\w-]{2,40}(?:\.[\w-]{1,30}){1,3}\.(?:com|net|org|io|ai|co|dev|app|cloud|xyz|info|biz|gov|edu|uk|de|fr|jp|cn|us|eu|tld|example)(?::[^\s/@"']{0,40})?@[\w-]{2,60}(?:\.[\w-]{2,30}){0,3}(?::\d{1,5})?(?:[/?\s"'\\]|$)
|
|
86
|
+
description: A fully-qualified decoy hostname (two or more labels plus a public suffix) in the userinfo, with a different real host after the @. Covers the ':anypassword@' form that ATR-2026-02107's pattern rejects.
|
|
87
|
+
- field: content
|
|
88
|
+
operator: regex
|
|
89
|
+
value: (?:["']?(?:url|uri|href|link|src|endpoint|location|address|target_url)["']?\s{0,3}[:=]\s{0,3}["']|\b(?:navigate|goto|browse|visit|open|fetch|curl|wget)\b\s{1,3}(?:to\s{1,3})?)\bhttps?://[\w-]{2,40}(?:\.[\w-]{1,30}){1,3}\.(?:com|net|org|io|ai|co|dev|app|cloud|xyz|info|biz|gov|edu|uk|de|fr|jp|cn|us|eu|tld|example)%40[\w-]{2,60}
|
|
90
|
+
description: The same decoy with the at-sign percent-encoded as %40, which many filters neither decode nor split on. Requires two or more labels before the %40, so an e-mail username such as first.last%40example.com does not match.
|
|
91
|
+
false_positives:
|
|
92
|
+
- 'Ordinary credential-carrying URLs, whose userinfo is a USERNAME rather than a hostname: https://oauth2:TOKEN@github.com/org/repo.git, https://gitlab-ci-token:$CI_JOB_TOKEN@gitlab.example.com/..., postgres://admin:pw@db.internal:5432/main, https://user:pass@proxy.corp.example.com:8080. None end in a public suffix, so none match. Fourteen such samples were written and run during authoring.'
|
|
93
|
+
- E-mail addresses used as registry usernames, including the percent-encoded form first.last%40example.com:token@registry.example.com -- excluded because the label count before the %40 is one, not two or more.
|
|
94
|
+
- A userinfo that genuinely looks like a hostname (a service account literally named api.example.com) would match. Such an account name is itself indistinguishable from the attack.
|
|
95
|
+
- Documentation that quotes a userinfo-confusion URL as an example will match; the payload is the URL.
|
|
96
|
+
response:
|
|
97
|
+
actions:
|
|
98
|
+
- alert
|
|
99
|
+
message_template: |
|
|
100
|
+
[ATR-2026-02666] This URL puts a trusted-looking domain in the userinfo component; the host actually contacted is the one after the @. Re-check it against the allowlist after parsing, not before.
|
|
101
|
+
confidence: 83
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
title: Branch or Tag Ref Name Carrying Shell Command Substitution in Tool Output
|
|
2
|
+
id: ATR-2026-02668
|
|
3
|
+
rule_version: 2
|
|
4
|
+
status: experimental
|
|
5
|
+
description: |
|
|
6
|
+
Detects a version-control REF NAME that contains a shell command substitution: a branch listed as remotes/origin/hotfix-$(id > /tmp/pwned), or a head_ref / branch / tag_name field holding $(cat ~/.ssh/id_rsa | base64). Git allows those characters in a ref name, and everything downstream that interpolates the name into a shell -- a prompt renderer, a release script, a GitHub Actions run: block using github.head_ref -- executes it. For an agent the decisive event is the tool_response: git branch -a or gh pr list output that the model then feeds into its next command. Mined from CVE-2026-27113 (Liquid Prompt). ADVERSARIAL REVIEW 2026-08-24. Fifteen benign samples were run through the shipped engine against rule_version 1; FOURTEEN fired. Two changes, and one arm cut back to nothing:
|
|
7
|
+
(1) THE PR-TITLE FORM WAS ABANDONED. `title` is no longer in the field list. Rule_version 1 had already been narrowed once during authoring -- from "any pipe" to "shell, encoder, fetch tool or system redirect" -- and it still fired on ten ordinary pull-request titles, because those are exactly the tools a title about shell scripting names: "fix: quote $(curl -sSf https://sh.rustup.rs) in the bootstrap script", "ci: replace $(base64 -w0 tls.crt) with a projected secret volume", "chore: drop $(eval echo ~) in favour of $HOME in the installer", "docs: warn that $(curl -fsSL url | sh) installers cannot be verified", and -- the diagnostic one -- the title of the ATR pull request that ships this very rule. A PR title is prose: it may contain any command substitution, with any payload, for any reason. There is no shape that separates a poisoned title from a title about poisoning, so the title form was removed rather than narrowed a third time. Ref-NAME fields (head_ref / headRefName / branch / tag_name / source_branch) are kept: those are identifiers, not prose. STATED RECALL LIMIT: a poisoned PR title is not detected by this rule at all.
|
|
8
|
+
(2) THE LISTING FORM NOW REQUIRES A PAYLOAD AND AN END-OF-LINE. Version 1 matched any `$(` after `origin/<something>` at the start of a line, which is the shape of a wrapped shell command, not only of listing output. It fired on a multi-line `for ref in \\ origin/main \\ origin/release-$(VERSION)` loop, on a Makefile continuation `origin/nightly-$(BUILD_TAG)...HEAD`, and on a documentation snippet giving `origin/nightly-$(date +%Y%m%d)` as a naming convention. Real `git branch -a` output has nothing after the ref, and a poisoned ref carries a payload, so both are now required. `$(VERSION)`, `$(BUILD_TAG)` and `$(date +%Y%m%d)` are all silent.
|
|
9
|
+
author: ATR Community (CVE sweep)
|
|
10
|
+
date: 2026/08/23
|
|
11
|
+
schema_version: '0.1'
|
|
12
|
+
detection_tier: pattern
|
|
13
|
+
maturity: test
|
|
14
|
+
severity: high
|
|
15
|
+
references:
|
|
16
|
+
cve:
|
|
17
|
+
- CVE-2026-27113
|
|
18
|
+
cwe:
|
|
19
|
+
- CWE-78
|
|
20
|
+
- CWE-88
|
|
21
|
+
owasp_llm:
|
|
22
|
+
- LLM01:2025
|
|
23
|
+
- LLM05:2025
|
|
24
|
+
owasp_agentic:
|
|
25
|
+
- ASI04:2026
|
|
26
|
+
- ASI05:2026
|
|
27
|
+
mitre_attack:
|
|
28
|
+
- T1059.004 - Unix Shell
|
|
29
|
+
- T1195.001 - Compromise Software Dependencies and Development Tools
|
|
30
|
+
mitre_atlas:
|
|
31
|
+
- AML.T0051 - LLM Prompt Injection
|
|
32
|
+
external:
|
|
33
|
+
- https://nvd.nist.gov/vuln/detail/CVE-2026-27113
|
|
34
|
+
metadata_provenance:
|
|
35
|
+
cve: human-reviewed
|
|
36
|
+
cwe: human-reviewed
|
|
37
|
+
owasp_llm: human-reviewed
|
|
38
|
+
owasp_agentic: human-reviewed
|
|
39
|
+
mitre_attack: human-reviewed
|
|
40
|
+
mitre_atlas: human-reviewed
|
|
41
|
+
compliance:
|
|
42
|
+
eu_ai_act:
|
|
43
|
+
- article: '15'
|
|
44
|
+
context: Article 15 (accuracy, robustness and cybersecurity) requires resilience against attacker-controlled input; a repository ref name is attacker-controlled input, and this rule detects the form that executes.
|
|
45
|
+
strength: primary
|
|
46
|
+
- article: '9'
|
|
47
|
+
context: 'Article 9 (risk management system): command injection through repository metadata is an identified risk treated at runtime by this detection.'
|
|
48
|
+
strength: secondary
|
|
49
|
+
nist_ai_rmf:
|
|
50
|
+
- subcategory: MG.2.3
|
|
51
|
+
context: Poisoned repository metadata reaching an agent's shell is an identified AI risk; this rule is the runtime countermeasure on the channel that carries it.
|
|
52
|
+
strength: primary
|
|
53
|
+
- subcategory: MP.5.1
|
|
54
|
+
context: Cataloguing ref-name command injection in the organizational AI risk register.
|
|
55
|
+
strength: secondary
|
|
56
|
+
iso_42001:
|
|
57
|
+
- clause: '8.1'
|
|
58
|
+
context: ISO/IEC 42001 Clause 8.1 (operational planning and control) is operationalised by inspecting tool output for identifiers that will execute when interpolated.
|
|
59
|
+
strength: primary
|
|
60
|
+
- clause: '8.3'
|
|
61
|
+
context: ISO/IEC 42001 Clause 8.3 (AI risk treatment) is implemented by alerting before the agent reuses the ref name in a command.
|
|
62
|
+
strength: secondary
|
|
63
|
+
tags:
|
|
64
|
+
category: tool-poisoning
|
|
65
|
+
subcategory: ref-name-command-injection
|
|
66
|
+
scan_target: runtime
|
|
67
|
+
confidence: high
|
|
68
|
+
agent_source:
|
|
69
|
+
type: mcp_exchange
|
|
70
|
+
framework:
|
|
71
|
+
- any
|
|
72
|
+
provider:
|
|
73
|
+
- any
|
|
74
|
+
detection:
|
|
75
|
+
condition: any
|
|
76
|
+
conditions:
|
|
77
|
+
- field: content
|
|
78
|
+
operator: regex
|
|
79
|
+
value: (?:\n|\\n|^)\s{0,6}\*?\s{0,4}(?:remotes/)?origin/[\w.\-/]{1,40}\$\([^)\r\n]{0,60}(?:\|\s{0,3}(?:sh|bash|zsh|base64|nc|curl|wget|python\d{0,1}|perl)\b|>\s{0,3}/(?:tmp|dev|var|etc|home|root|Users)/|\b(?:curl|wget|nc|chmod|base64|eval)\b|\brm\s{1,3}-[rf])[^)\r\n]{0,60}\)\s{0,4}(?:\r?\n|\\n|$)
|
|
80
|
+
description: 'A ref-listing line (git branch -a / git branch -r output) whose branch name carries a command substitution that pipes into a shell or encoder, redirects into a system directory, or names a fetch/permission tool, and which ENDS at the ref -- real listing output has nothing after the ref. NARROWED by adversarial review 2026-08-24: see false_positives.'
|
|
81
|
+
- field: content
|
|
82
|
+
operator: regex
|
|
83
|
+
value: '["''](?:head_ref|headRefName|ref|branch|tag_name|source_branch|refName|base_ref|baseRefName)["'']\s{0,3}:\s{0,3}["''][^"''\n]{0,60}\$\([^)\n]{0,60}(?:\|\s{0,3}(?:sh|bash|zsh|base64|nc|curl|wget|python\d{0,1}|perl)\b|>\s{0,3}/(?:tmp|dev|var|etc|home|root|Users)/|\b(?:curl|wget|nc|chmod|base64|eval)\b|\brm\s{1,3}-[rf])'
|
|
84
|
+
description: A ref-NAME field (head_ref / headRefName / branch / tag_name / source_branch / ref) whose value carries a command substitution with a shell, encoder, fetch tool or system-directory redirect inside it. `title` was REMOVED from the field list by adversarial review 2026-08-24 -- see false_positives.
|
|
85
|
+
false_positives:
|
|
86
|
+
- 'Shell commands that interpolate a real ref: git rev-parse origin/$(git branch --show-current), DIFF=$(git diff origin/main...HEAD), git push origin HEAD:refs/heads/build-$(date +%Y%m%d). None is a ref-listing line, so none matches.'
|
|
87
|
+
- 'A wrapped shell command or Makefile continuation whose next line begins with the ref: `for ref in \ origin/main \ origin/release-$(VERSION); do`, `git diff --name-only \ origin/nightly-$(BUILD_TAG)...HEAD`. MEASURED: both fired rule_version 1. The line must now END at the ref and the substitution must carry a payload.'
|
|
88
|
+
- 'Documentation giving a branch-naming convention such as origin/nightly-$(date +%Y%m%d). MEASURED: fired rule_version 1; $(date ...) is not a payload.'
|
|
89
|
+
- PULL-REQUEST AND ISSUE TITLES OF EVERY KIND, including poisoned ones. `title` was removed from the field list -- see change (1) in the description. Ten benign titles fired rule_version 1, among them the title of the ATR pull request shipping this rule.
|
|
90
|
+
- An ordinary git branch -a listing, including branches with slashes and dots.
|
|
91
|
+
- A payload with no redirect, pipe or known tool inside the substitution is NOT detected. Stated limit.
|
|
92
|
+
- 'KNOWN AND UNFIXABLE, MEASURED: a blog post or advisory that reproduces a poisoned listing line verbatim still fires, because the sample contains the attack. Prose describing the technique without the listing line is silent.'
|
|
93
|
+
response:
|
|
94
|
+
actions:
|
|
95
|
+
- alert
|
|
96
|
+
message_template: |
|
|
97
|
+
[ATR-2026-02668] A branch, tag or pull-request identifier in this tool output contains a shell command substitution. Do not interpolate it into a command line; quote it or reject the ref.
|
|
98
|
+
confidence: 80
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
title: Query-Language Pipeline Stage Smuggled Into an Identifier-Typed Tool Parameter
|
|
2
|
+
id: ATR-2026-02669
|
|
3
|
+
rule_version: 1
|
|
4
|
+
status: experimental
|
|
5
|
+
description: |
|
|
6
|
+
Detects a tool parameter that the tool's own schema describes as an IDENTIFIER -- entityName, entitySelector, table_name, index_name, metric_name, dashboard_id -- carrying a query-language pipeline stage instead: "host-1 | fetch logs | fields content | limit 50000". The observability backend concatenates the identifier into the query it builds, so the appended stages run with the server's credentials and outside every limit the tool documented -- different data source, different fields, a time window and row count the caller was never allowed to ask for. Mined from GHSA-pqh8-p93p-2rx7 (@dynatrace-oss/dynatrace-mcp-server), where parameters not documented as DQL were interpolated into DQL. The same shape appears wherever an MCP server builds a query language from "safe" fields: KQL's | externaldata, Splunk's | inputlookup, Lucene/ES pipelines. ATR-2026-00066 covers template and shell metacharacter injection in tool arguments and has no notion of a query-pipeline stage.
|
|
7
|
+
author: ATR Community (GHSA sweep)
|
|
8
|
+
date: 2026/08/23
|
|
9
|
+
schema_version: '0.1'
|
|
10
|
+
detection_tier: pattern
|
|
11
|
+
maturity: test
|
|
12
|
+
severity: medium
|
|
13
|
+
references:
|
|
14
|
+
ghsa:
|
|
15
|
+
- GHSA-pqh8-p93p-2rx7
|
|
16
|
+
cwe:
|
|
17
|
+
- CWE-943
|
|
18
|
+
- CWE-88
|
|
19
|
+
owasp_llm:
|
|
20
|
+
- LLM06:2025
|
|
21
|
+
owasp_agentic:
|
|
22
|
+
- ASI05:2026
|
|
23
|
+
mitre_attack:
|
|
24
|
+
- T1213 - Data from Information Repositories
|
|
25
|
+
mitre_atlas:
|
|
26
|
+
- AML.T0053 - AI Agent Tool Invocation
|
|
27
|
+
external:
|
|
28
|
+
- https://github.com/advisories/GHSA-pqh8-p93p-2rx7
|
|
29
|
+
metadata_provenance:
|
|
30
|
+
ghsa: human-reviewed
|
|
31
|
+
cwe: human-reviewed
|
|
32
|
+
owasp_llm: human-reviewed
|
|
33
|
+
owasp_agentic: human-reviewed
|
|
34
|
+
mitre_attack: human-reviewed
|
|
35
|
+
mitre_atlas: human-reviewed
|
|
36
|
+
compliance:
|
|
37
|
+
eu_ai_act:
|
|
38
|
+
- article: '15'
|
|
39
|
+
context: Article 15 (accuracy, robustness and cybersecurity) requires resistance to input that alters system behaviour; a pipeline stage inside an identifier field rewrites the query the server executes.
|
|
40
|
+
strength: primary
|
|
41
|
+
- article: '10'
|
|
42
|
+
context: 'Article 10 (data and data governance): the appended stages read data sets the tool never declared, which is a data-governance boundary failure.'
|
|
43
|
+
strength: secondary
|
|
44
|
+
nist_ai_rmf:
|
|
45
|
+
- subcategory: MG.2.3
|
|
46
|
+
context: Query-language injection through agent tool parameters is an identified AI risk; this rule is the runtime countermeasure.
|
|
47
|
+
strength: primary
|
|
48
|
+
- subcategory: MP.5.1
|
|
49
|
+
context: Recording observability-query injection in the organizational AI risk register.
|
|
50
|
+
strength: secondary
|
|
51
|
+
iso_42001:
|
|
52
|
+
- clause: '8.1'
|
|
53
|
+
context: 'ISO/IEC 42001 Clause 8.1 (operational planning and control): the documented parameter contract is an operational control, and this rule reports values that break it.'
|
|
54
|
+
strength: primary
|
|
55
|
+
- clause: '8.3'
|
|
56
|
+
context: ISO/IEC 42001 Clause 8.3 (AI risk treatment) is implemented by alerting before the concatenated query is executed.
|
|
57
|
+
strength: secondary
|
|
58
|
+
tags:
|
|
59
|
+
category: tool-poisoning
|
|
60
|
+
subcategory: query-language-injection
|
|
61
|
+
scan_target: runtime
|
|
62
|
+
confidence: high
|
|
63
|
+
agent_source:
|
|
64
|
+
type: mcp_exchange
|
|
65
|
+
framework:
|
|
66
|
+
- any
|
|
67
|
+
provider:
|
|
68
|
+
- any
|
|
69
|
+
detection:
|
|
70
|
+
condition: any
|
|
71
|
+
conditions:
|
|
72
|
+
- field: content
|
|
73
|
+
operator: regex
|
|
74
|
+
value: '[{,]\s{0,3}"(?:entity_?name|entity_?selector|table_?name|index_?name|metric_?name|dashboard_?id|cluster_?name|stream_?name)"\s{0,3}:\s{0,3}"(?:[^"\\\n,:]|\\.){0,40}\|\s{1,3}(?:(?:externaldata|inputlookup|mv-expand|make-series|parse-kv|fieldsadd|fieldskeep|fieldsremove|summarize)\b|(?:fetch|fields|limit)\b[^\r\n]{0,24}(?:\||==|\w\())'
|
|
75
|
+
description: A JSON tool argument whose identifier-typed key carries a query pipeline stage. Unambiguous query verbs (externaldata, inputlookup, summarize, fieldsAdd, ...) stand alone; the three verbs that are also ordinary English words (fetch, fields, limit) additionally require a second pipe, a comparison or a function call, so a display label such as "Main Stage | Fetch Festival (2026)" does not qualify.
|
|
76
|
+
false_positives:
|
|
77
|
+
- 'MEASURED AND FIXED 2026-08-24 (adversarial review, 19 benign probes through the shipped engine). The published version fired on 12 of 12 first-wave probes. Four separate defects, each fixed: (a) the identifier alternation had no leading boundary, so upstream_name, executable_name and printable_name matched by substring; (b) the value only needed a pipe somewhere, so allowlist regexes such as stream_name = "^(orders|fetch)-events$" and index_name: "(app|fields)-2026.08" fired; (c) the key could be unquoted and assigned with = or :, so ordinary prose fired -- a GHSA writeup, a CHANGELOG entry, a Traditional Chinese vulnerability explanation, the MCP server''s own regression test asserting rejection, and ATR''s own rule documentation; (d) a shell pipeline assigned to cluster_name fired.'
|
|
78
|
+
- 'MEASURED AND FIXED 2026-08-24, second wave. After (a)-(d) the rule still fired on 7 of 7 display labels that use the ubiquitous '' | '' title separator inside an identifier field: {"stream_name":"Main Stage | Fetch Festival (2026)"}, {"metric_name":"Requests | Limit (p99)"}, {"entity_name":"EU West | Fetch & Ship (Ops)"} and the Traditional Chinese equivalent. Fixed by splitting the verb list: externaldata / inputlookup / summarize / mv-expand / make-series / parse-kv / fieldsAdd / fieldsKeep / fieldsRemove are never ordinary English and stand alone, while fetch / fields / limit additionally require a second pipe, a comparison, or a function call in the following 24 characters.'
|
|
79
|
+
- A parameter documented as a query and legitimately containing a pipeline (a dql / query / kql field). Those field names are deliberately absent from the identifier list.
|
|
80
|
+
- Shell pipelines in a command argument. The query verbs are not shell commands, and the value must be a quoted JSON string attached to an identifier key.
|
|
81
|
+
- 'STATED GAP: the rule now requires the JSON object form ({"entityName":"..."}) that an mcp_exchange actually carries. A payload rendered as prose or as a Python kwarg (entityName: "x | fetch logs", index_name = ''...'') is no longer detected -- that form could not be separated from documentation describing the advisory, which is the single largest false-positive source for this rule.'
|
|
82
|
+
- 'STATED GAP: a pipeline written without a space after the pipe ("x|fetch logs") is not detected. The space is what separates a pipeline stage from a regex alternation such as (orders|fetch).'
|
|
83
|
+
response:
|
|
84
|
+
actions:
|
|
85
|
+
- alert
|
|
86
|
+
message_template: |
|
|
87
|
+
[ATR-2026-02669] An identifier-typed tool parameter carries a query pipeline stage. The backend will concatenate it into the query it builds -- reject the value or bind it as a parameter instead of concatenating.
|
|
88
|
+
confidence: 78
|