@panguard-ai/atr 1.3.0 → 1.4.1

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.
Files changed (118) hide show
  1. package/dist/content-hash.d.ts +7 -0
  2. package/dist/content-hash.d.ts.map +1 -0
  3. package/dist/content-hash.js +10 -0
  4. package/dist/content-hash.js.map +1 -0
  5. package/dist/engine.d.ts +9 -0
  6. package/dist/engine.d.ts.map +1 -1
  7. package/dist/engine.js +134 -4
  8. package/dist/engine.js.map +1 -1
  9. package/dist/types.d.ts +83 -1
  10. package/dist/types.d.ts.map +1 -1
  11. package/package.json +11 -10
  12. package/rules/agent-manipulation/{ATR-2026-030-cross-agent-attack.yaml → ATR-2026-00030-cross-agent-attack.yaml} +54 -52
  13. package/rules/agent-manipulation/{ATR-2026-032-goal-hijacking.yaml → ATR-2026-00032-goal-hijacking.yaml} +39 -37
  14. package/rules/agent-manipulation/{ATR-2026-074-cross-agent-privilege-escalation.yaml → ATR-2026-00074-cross-agent-privilege-escalation.yaml} +35 -33
  15. package/rules/agent-manipulation/{ATR-2026-076-inter-agent-message-spoofing.yaml → ATR-2026-00076-inter-agent-message-spoofing.yaml} +58 -56
  16. package/rules/agent-manipulation/{ATR-2026-077-human-trust-exploitation.yaml → ATR-2026-00077-human-trust-exploitation.yaml} +45 -43
  17. package/rules/agent-manipulation/{ATR-2026-108-consensus-sybil-attack.yaml → ATR-2026-00108-consensus-sybil-attack.yaml} +34 -32
  18. package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +92 -0
  19. package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +92 -0
  20. package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +89 -0
  21. package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +89 -0
  22. package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +99 -0
  23. package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +53 -0
  24. package/rules/context-exfiltration/{ATR-2026-020-system-prompt-leak.yaml → ATR-2026-00020-system-prompt-leak.yaml} +54 -52
  25. package/rules/context-exfiltration/ATR-2026-00021-api-key-exposure.yaml +178 -0
  26. package/rules/context-exfiltration/{ATR-2026-075-agent-memory-manipulation.yaml → ATR-2026-00075-agent-memory-manipulation.yaml} +36 -34
  27. package/rules/context-exfiltration/{ATR-2026-102-disguised-analytics-exfiltration.yaml → ATR-2026-00102-disguised-analytics-exfiltration.yaml} +21 -19
  28. package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +89 -0
  29. package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +89 -0
  30. package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +90 -0
  31. package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +100 -0
  32. package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +52 -0
  33. package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +55 -0
  34. package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +49 -0
  35. package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +49 -0
  36. package/rules/data-poisoning/{ATR-2026-070-data-poisoning.yaml → ATR-2026-00070-data-poisoning.yaml} +56 -54
  37. package/rules/excessive-autonomy/{ATR-2026-050-runaway-agent-loop.yaml → ATR-2026-00050-runaway-agent-loop.yaml} +42 -40
  38. package/rules/excessive-autonomy/{ATR-2026-051-resource-exhaustion.yaml → ATR-2026-00051-resource-exhaustion.yaml} +44 -42
  39. package/rules/excessive-autonomy/{ATR-2026-052-cascading-failure.yaml → ATR-2026-00052-cascading-failure.yaml} +57 -55
  40. package/rules/excessive-autonomy/{ATR-2026-098-unauthorized-financial-action.yaml → ATR-2026-00098-unauthorized-financial-action.yaml} +57 -55
  41. package/rules/excessive-autonomy/{ATR-2026-099-high-risk-tool-gate.yaml → ATR-2026-00099-high-risk-tool-gate.yaml} +73 -56
  42. package/rules/model-security/{ATR-2026-072-model-behavior-extraction.yaml → ATR-2026-00072-model-behavior-extraction.yaml} +37 -35
  43. package/rules/model-security/{ATR-2026-073-malicious-finetuning-data.yaml → ATR-2026-00073-malicious-finetuning-data.yaml} +29 -27
  44. package/rules/privilege-escalation/{ATR-2026-040-privilege-escalation.yaml → ATR-2026-00040-privilege-escalation.yaml} +61 -59
  45. package/rules/privilege-escalation/{ATR-2026-041-scope-creep.yaml → ATR-2026-00041-scope-creep.yaml} +38 -36
  46. package/rules/privilege-escalation/{ATR-2026-107-delayed-execution-bypass.yaml → ATR-2026-00107-delayed-execution-bypass.yaml} +21 -19
  47. package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +92 -0
  48. package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +93 -0
  49. package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +89 -0
  50. package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +53 -0
  51. package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +49 -0
  52. package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +563 -0
  53. package/rules/prompt-injection/{ATR-2026-002-indirect-prompt-injection.yaml → ATR-2026-00002-indirect-prompt-injection.yaml} +66 -64
  54. package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +397 -0
  55. package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +308 -0
  56. package/rules/prompt-injection/{ATR-2026-005-multi-turn-injection.yaml → ATR-2026-00005-multi-turn-injection.yaml} +50 -48
  57. package/rules/prompt-injection/{ATR-2026-080-encoding-evasion.yaml → ATR-2026-00080-encoding-evasion.yaml} +22 -13
  58. package/rules/prompt-injection/{ATR-2026-081-semantic-multi-turn.yaml → ATR-2026-00081-semantic-multi-turn.yaml} +24 -15
  59. package/rules/prompt-injection/{ATR-2026-082-fingerprint-evasion.yaml → ATR-2026-00082-fingerprint-evasion.yaml} +23 -14
  60. package/rules/prompt-injection/{ATR-2026-083-indirect-tool-injection.yaml → ATR-2026-00083-indirect-tool-injection.yaml} +26 -14
  61. package/rules/prompt-injection/{ATR-2026-084-structured-data-injection.yaml → ATR-2026-00084-structured-data-injection.yaml} +24 -15
  62. package/rules/prompt-injection/{ATR-2026-085-audit-evasion.yaml → ATR-2026-00085-audit-evasion.yaml} +23 -14
  63. package/rules/prompt-injection/{ATR-2026-086-visual-spoofing.yaml → ATR-2026-00086-visual-spoofing.yaml} +23 -14
  64. package/rules/prompt-injection/{ATR-2026-087-rule-probing.yaml → ATR-2026-00087-rule-probing.yaml} +23 -14
  65. package/rules/prompt-injection/{ATR-2026-088-adaptive-countermeasure.yaml → ATR-2026-00088-adaptive-countermeasure.yaml} +23 -14
  66. package/rules/prompt-injection/{ATR-2026-089-polymorphic-skill.yaml → ATR-2026-00089-polymorphic-skill.yaml} +21 -12
  67. package/rules/prompt-injection/{ATR-2026-090-threat-intel-exfil.yaml → ATR-2026-00090-threat-intel-exfil.yaml} +23 -14
  68. package/rules/prompt-injection/{ATR-2026-091-nested-payload.yaml → ATR-2026-00091-nested-payload.yaml} +23 -14
  69. package/rules/prompt-injection/{ATR-2026-092-consensus-poisoning.yaml → ATR-2026-00092-consensus-poisoning.yaml} +25 -16
  70. package/rules/prompt-injection/{ATR-2026-093-gradual-escalation.yaml → ATR-2026-00093-gradual-escalation.yaml} +24 -15
  71. package/rules/prompt-injection/{ATR-2026-094-audit-bypass.yaml → ATR-2026-00094-audit-bypass.yaml} +23 -14
  72. package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +339 -0
  73. package/rules/prompt-injection/{ATR-2026-104-persona-hijacking.yaml → ATR-2026-00104-persona-hijacking.yaml} +21 -19
  74. package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +97 -0
  75. package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +93 -0
  76. package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +111 -0
  77. package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +52 -0
  78. package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +51 -0
  79. package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +52 -0
  80. package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +71 -0
  81. package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +155 -0
  82. package/rules/skill-compromise/{ATR-2026-061-description-behavior-mismatch.yaml → ATR-2026-00061-description-behavior-mismatch.yaml} +24 -22
  83. package/rules/skill-compromise/{ATR-2026-062-hidden-capability.yaml → ATR-2026-00062-hidden-capability.yaml} +25 -23
  84. package/rules/skill-compromise/{ATR-2026-063-skill-chain-attack.yaml → ATR-2026-00063-skill-chain-attack.yaml} +26 -23
  85. package/rules/skill-compromise/{ATR-2026-064-over-permissioned-skill.yaml → ATR-2026-00064-over-permissioned-skill.yaml} +32 -30
  86. package/rules/skill-compromise/{ATR-2026-065-skill-update-attack.yaml → ATR-2026-00065-skill-update-attack.yaml} +25 -23
  87. package/rules/skill-compromise/{ATR-2026-066-parameter-injection.yaml → ATR-2026-00066-parameter-injection.yaml} +26 -24
  88. package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +121 -0
  89. package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +165 -0
  90. package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +114 -0
  91. package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +118 -0
  92. package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +98 -0
  93. package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +93 -0
  94. package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +99 -0
  95. package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +74 -0
  96. package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +79 -0
  97. package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +73 -0
  98. package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +86 -0
  99. package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +82 -0
  100. package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +48 -0
  101. package/rules/tool-poisoning/{ATR-2026-010-mcp-malicious-response.yaml → ATR-2026-00010-mcp-malicious-response.yaml} +73 -71
  102. package/rules/tool-poisoning/{ATR-2026-011-tool-output-injection.yaml → ATR-2026-00011-tool-output-injection.yaml} +63 -52
  103. package/rules/tool-poisoning/{ATR-2026-012-unauthorized-tool-call.yaml → ATR-2026-00012-unauthorized-tool-call.yaml} +70 -59
  104. package/rules/tool-poisoning/{ATR-2026-013-tool-ssrf.yaml → ATR-2026-00013-tool-ssrf.yaml} +75 -64
  105. package/rules/tool-poisoning/{ATR-2026-095-supply-chain-poisoning.yaml → ATR-2026-00095-supply-chain-poisoning.yaml} +26 -14
  106. package/rules/tool-poisoning/{ATR-2026-096-registry-poisoning.yaml → ATR-2026-00096-registry-poisoning.yaml} +26 -14
  107. package/rules/tool-poisoning/{ATR-2026-100-consent-bypass-instruction.yaml → ATR-2026-00100-consent-bypass-instruction.yaml} +26 -24
  108. package/rules/tool-poisoning/{ATR-2026-101-trust-escalation-override.yaml → ATR-2026-00101-trust-escalation-override.yaml} +21 -19
  109. package/rules/tool-poisoning/{ATR-2026-103-hidden-safety-bypass-instruction.yaml → ATR-2026-00103-hidden-safety-bypass-instruction.yaml} +21 -19
  110. package/rules/tool-poisoning/{ATR-2026-105-silent-action-concealment.yaml → ATR-2026-00105-silent-action-concealment.yaml} +19 -17
  111. package/rules/tool-poisoning/{ATR-2026-106-schema-description-contradiction.yaml → ATR-2026-00106-schema-description-contradiction.yaml} +20 -18
  112. package/spec/atr-schema.yaml +59 -29
  113. package/rules/context-exfiltration/ATR-2026-021-api-key-exposure.yaml +0 -176
  114. package/rules/prompt-injection/ATR-2026-001-direct-prompt-injection.yaml +0 -453
  115. package/rules/prompt-injection/ATR-2026-003-jailbreak-attempt.yaml +0 -250
  116. package/rules/prompt-injection/ATR-2026-004-system-prompt-override.yaml +0 -204
  117. package/rules/prompt-injection/ATR-2026-097-cjk-injection-patterns.yaml +0 -180
  118. package/rules/skill-compromise/ATR-2026-060-skill-impersonation.yaml +0 -153
@@ -1,153 +0,0 @@
1
- title: 'MCP Skill Impersonation and Supply Chain Attack'
2
- id: ATR-2026-060
3
- status: experimental
4
- description: |
5
- Detects MCP skills that impersonate trusted tools through multiple
6
- attack vectors: typosquatting (misspelled tool names), version spoofing
7
- (claiming to be newer versions of known tools), namespace collision
8
- (similar package names with different publishers), and suspicious tool
9
- name patterns that mimic legitimate skills. This goes beyond simple
10
- typo detection to cover the full supply chain attack surface for
11
- MCP skill registries and tool marketplaces.
12
- author: 'ATR Community'
13
- date: '2026/03/08'
14
- schema_version: '0.1'
15
- detection_tier: pattern
16
- maturity: experimental
17
- severity: high
18
-
19
- references:
20
- owasp_llm:
21
- - 'LLM03:2025 - Supply Chain Vulnerabilities'
22
- - 'LLM05:2025 - Improper Output Handling'
23
- owasp_agentic:
24
- - 'ASI04:2026 - Agentic Supply Chain Vulnerabilities'
25
- mitre_atlas:
26
- - 'AML.T0010 - ML Supply Chain Compromise'
27
- mitre_attack:
28
- - 'T1195 - Supply Chain Compromise'
29
-
30
- tags:
31
- category: skill-compromise
32
- subcategory: skill-impersonation
33
- confidence: medium
34
-
35
- agent_source:
36
- type: tool_call
37
- framework:
38
- - any
39
- provider:
40
- - any
41
-
42
- detection:
43
- conditions:
44
- - field: tool_name
45
- operator: regex
46
- value: '(?i)(?:filesytem|filsystem|file_sytem|flie_system|filessystem|filesystm|filsystm|filesysem)[-_](?:read|write|list|delete|search)'
47
- description: 'Typosquatted filesystem tool names'
48
- - field: tool_name
49
- operator: regex
50
- value: '(?i)(?:gtihub|githbu|gihtub|gthub|g1thub|gltHub|githuub|guthub)[-_](?:api|search|commit|pr|issues?|repos?)'
51
- description: 'Typosquatted GitHub tool names'
52
- - field: tool_name
53
- operator: regex
54
- value: '(?i)(?:databse|databaes|dtabase|datbase|databasse|databasee|dataase)[-_](?:query|read|write|exec|connect)'
55
- description: 'Typosquatted database tool names'
56
- - field: tool_name
57
- operator: regex
58
- value: '(?i)(?:web[-_]?search|google[-_]?search|bing[-_]?search)[-_]?(?:v2|v3|pro|enhanced|premium|fast|turbo|plus|ultra|new)'
59
- description: 'Fake enhanced versions of known search tools'
60
- - field: tool_name
61
- operator: regex
62
- value: '(?i)(?:exec|execute|run|shell)[-_]?(?:cmd|command|script|code)[-_]?(?:safe|secure|sandbox|trusted|verified)?'
63
- description: 'Shell execution tools with deceptive safety suffixes'
64
- - field: tool_name
65
- operator: regex
66
- value: "(?i)(?:official|verified|trusted|authentic|real|original)[-_](?:filesystem|github|database|slack|aws|gcp|azure)(?![-_]tools\\b)"
67
- description: 'Tools using trust-implying prefixes to impersonate legitimate tools (excludes established -tools packages)'
68
- - field: tool_name
69
- operator: regex
70
- value: "(?i)(?:filesystem|github|database|slack|aws|gcp|azure)[-_](?:official|verified|v\\d+\\.\\d+|latest|stable|release|updated)"
71
- description: 'Version spoofing with fake version or release suffixes'
72
- - field: content
73
- operator: regex
74
- value: "(?i)(?:this\\s+(?:is\\s+)?(?:an?\\s+)?(?:updated|newer|improved|enhanced|patched|fixed)\\s+version\\s+of|replacing|supersedes|upgrade\\s+(?:from|to))\\s+(?:the\\s+)?(?:original|existing|current|old)\\s+(?:tool|skill|plugin|extension)"
75
- description: 'Skill claiming to be an updated replacement for a legitimate tool'
76
- - field: content
77
- operator: regex
78
- value: "(?i)(?:(?:same|identical|equivalent|compatible)\\s+(?:as|to|with)\\s+(?:the\\s+)?(?:official|original|standard)|(?:drop[-\\s]?in\\s+)?replacement\\s+for)\\s+[a-zA-Z_-]+"
79
- description: 'Skill claiming equivalence or compatibility with known legitimate tools'
80
- - field: tool_name
81
- operator: regex
82
- value: '(?i)(?:slakc|slck|slaack|sllack|s1ack|5lack)[-_](?:send|post|read|message|channel)'
83
- description: 'Typosquatted Slack tool names'
84
- - field: tool_name
85
- operator: regex
86
- value: '(?i)(?:opeanai|openla|open_al|openaii|0penai|openal)[-_](?:chat|complete|embed|generate)'
87
- description: 'Typosquatted OpenAI tool names'
88
- - field: tool_name
89
- operator: regex
90
- value: '(?i)(?:anthroplc|anthrop1c|anthropic_|_anthropic|anthrpoic)[-_](?:chat|complete|message|claude)'
91
- description: 'Typosquatted Anthropic tool names'
92
- condition: any
93
- false_positives:
94
- - 'Legitimate tools with similar naming conventions from verified publishers'
95
- - 'Internal tools that follow company-specific naming patterns'
96
- - 'Development or staging versions of tools with version suffixes'
97
-
98
- response:
99
- actions:
100
- - block_tool
101
- - alert
102
- - snapshot
103
- - escalate
104
- auto_response_threshold: high
105
- message_template: |
106
- [ATR-2026-060] HIGH: Potential skill impersonation detected. Tool
107
- name "{tool_name}" closely resembles a known legitimate tool or uses
108
- deceptive naming patterns. Verify the skill publisher and source
109
- before allowing execution. Session: {session_id}.
110
-
111
- test_cases:
112
- true_positives:
113
- - tool_name: 'filesytem_read'
114
- expected: triggered
115
- description: 'Typosquatted filesystem tool name'
116
- - tool_name: 'gtihub-api'
117
- expected: triggered
118
- description: 'Typosquatted GitHub tool name'
119
- - tool_name: 'official-filesystem'
120
- expected: triggered
121
- description: 'Trust-implying prefix on filesystem tool'
122
- - tool_name: 'google-search-v2-pro'
123
- expected: triggered
124
- description: 'Fake enhanced version of search tool'
125
- - tool_name: 'slakc-send'
126
- expected: triggered
127
- description: 'Typosquatted Slack tool name'
128
- true_negatives:
129
- - tool_name: 'filesystem_read'
130
- expected: not_triggered
131
- description: 'Correctly spelled legitimate tool name'
132
- - tool_name: 'custom_database_query'
133
- expected: not_triggered
134
- description: 'Correctly spelled custom tool name'
135
- - tool_name: 'github-search'
136
- expected: not_triggered
137
- description: 'Correctly spelled GitHub tool name'
138
- - input: 'Installing official-github-tools v3.0.0 from the verified MCP registry.'
139
- expected: not_triggered
140
- description: 'Legitimate tool installation from verified source'
141
- - input: "This tool is called 'file-system-manager'. It provides read, write, and delete operations."
142
- expected: not_triggered
143
- description: 'Legitimate tool with a name similar to but not typosquatting filesystem'
144
-
145
- evasion_tests:
146
- - input: 'Install my-filesystem-helper v2.1.0 — a lightweight file management tool for AI agents.'
147
- expected: not_triggered
148
- bypass_technique: original_naming
149
- notes: "Tool with legitimate-sounding name that is actually malicious but doesn't typosquat known tools."
150
- - input: "Use the enhanced_calculator package. It's a community fork of the official calculator with extra features."
151
- expected: not_triggered
152
- bypass_technique: fork_claim
153
- notes: 'Claims to be a community fork rather than impersonating the original.'