@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,5 +1,6 @@
1
- title: 'Runaway Agent Loop Detection'
2
- id: ATR-2026-050
1
+ title: "Runaway Agent Loop Detection"
2
+ id: ATR-2026-00050
3
+ rule_version: 1
3
4
  status: experimental
4
5
  description: |
5
6
  Detects when an agent enters a runaway loop through repeated identical
@@ -9,26 +10,27 @@ description: |
9
10
  descriptions, recursive invocation patterns, and stalled progress
10
11
  indicators. Runaway loops waste computational resources, accumulate
11
12
  costs, and may indicate logic errors or adversarial manipulation.
12
- author: 'ATR Community'
13
- date: '2026/03/08'
14
- schema_version: '0.1'
13
+ author: "ATR Community"
14
+ date: "2026/03/08"
15
+ schema_version: "0.1"
15
16
  detection_tier: pattern
16
17
  maturity: experimental
17
18
  severity: high
18
19
 
19
20
  references:
20
21
  owasp_llm:
21
- - 'LLM06:2025 - Excessive Agency'
22
- - 'LLM10:2025 - Unbounded Consumption'
22
+ - "LLM06:2025 - Excessive Agency"
23
+ - "LLM10:2025 - Unbounded Consumption"
23
24
  owasp_agentic:
24
- - 'ASI05:2026 - Unexpected Code Execution'
25
+ - "ASI05:2026 - Unexpected Code Execution"
25
26
  mitre_atlas:
26
- - 'AML.T0053 - LLM Plugin Compromise'
27
- - 'AML.T0046 - Spamming ML System with Chaff Data'
27
+ - "AML.T0053 - LLM Plugin Compromise"
28
+ - "AML.T0046 - Spamming ML System with Chaff Data"
28
29
 
29
30
  tags:
30
31
  category: excessive-autonomy
31
32
  subcategory: runaway-loop
33
+ scan_target: mcp
32
34
  confidence: medium
33
35
 
34
36
  agent_source:
@@ -43,57 +45,57 @@ detection:
43
45
  - field: content
44
46
  operator: regex
45
47
  value: "(?i)(?:retrying|retry\\s+(?:attempt|number|#|count))\\s*(?::?\\s*)?\\d+"
46
- description: 'Retry counter pattern indicating repeated attempts'
48
+ description: "Retry counter pattern indicating repeated attempts"
47
49
  - field: content
48
50
  operator: regex
49
51
  value: "(?i)attempt\\s+\\d+\\s+(?:of|/)\\s+\\d+"
50
- description: 'Attempt X of Y counter pattern (e.g., attempt 5 of 10)'
52
+ description: "Attempt X of Y counter pattern (e.g., attempt 5 of 10)"
51
53
  - field: content
52
54
  operator: regex
53
55
  value: "(?i)(?:trying\\s+again|let\\s+me\\s+(?:try|attempt)\\s+(?:again|once\\s+more|one\\s+more\\s+time)|retrying\\s+(?:the\\s+)?(?:same|previous|last)\\s+(?:operation|request|call|action))"
54
- description: 'Natural language retry patterns in agent output'
56
+ description: "Natural language retry patterns in agent output"
55
57
  - field: content
56
58
  operator: regex
57
59
  value: "(?i)(?:still\\s+(?:failing|not\\s+working|getting\\s+(?:the\\s+same\\s+)?error)|same\\s+error\\s+(?:again|as\\s+before|persists)|error\\s+(?:persists|continues|remains))"
58
- description: 'Stalled progress with persistent error indicators'
60
+ description: "Stalled progress with persistent error indicators"
59
61
  - field: content
60
62
  operator: regex
61
63
  value: "(?i)(?:calling\\s+(?:myself|this\\s+(?:function|tool|agent))\\s+(?:again|recursively)|recursive\\s+(?:call|invocation|execution)|self[_-]?(?:invoke|call|trigger))"
62
- description: 'Recursive self-invocation patterns'
64
+ description: "Recursive self-invocation patterns"
63
65
  - field: content
64
66
  operator: regex
65
67
  value: "(?i)(?:iteration\\s+(?:#\\s*)?\\d{2,}|loop\\s+(?:iteration|count|index)\\s*[:=]?\\s*\\d{2,}|cycle\\s+\\d{2,})"
66
- description: 'High iteration count indicating prolonged looping'
68
+ description: "High iteration count indicating prolonged looping"
67
69
  - field: content
68
70
  operator: regex
69
71
  value: "(?i)(?:repeating\\s+(?:the\\s+)?(?:same|previous|identical)\\s+(?:step|action|operation|request)|performing\\s+(?:the\\s+)?(?:same|identical)\\s+(?:action|call)\\s+again)"
70
- description: 'Agent acknowledging it is repeating identical actions'
72
+ description: "Agent acknowledging it is repeating identical actions"
71
73
  - field: content
72
74
  operator: regex
73
75
  value: "(?i)(?:max(?:imum)?\\s+retries?\\s+(?:reached|exceeded|hit)|(?:exceeded|hit|reached)\\s+(?:the\\s+)?(?:retry|attempt|iteration)\\s+(?:limit|maximum|cap))"
74
- description: 'Retry limit reached indicators'
76
+ description: "Retry limit reached indicators"
75
77
  - field: content
76
78
  operator: regex
77
79
  value: "(?i)(?:no\\s+progress\\s+(?:after|in)\\s+\\d+\\s+(?:attempts?|tries|iterations?|cycles?)|stuck\\s+(?:in\\s+(?:a\\s+)?loop|on\\s+(?:the\\s+)?same\\s+(?:step|error)))"
78
- description: 'Explicit stall or no-progress acknowledgement'
80
+ description: "Explicit stall or no-progress acknowledgement"
79
81
  - field: content
80
82
  operator: regex
81
83
  value: "(?i)(?:(?:while|for)\\s*\\(\\s*(?:true|1|;;)\\s*\\)|(?:loop|repeat)\\s*\\{\\s*(?:call|invoke|execute))"
82
- description: 'Infinite loop constructs in generated or executed code'
84
+ description: "Infinite loop constructs in generated or executed code"
83
85
  - field: content
84
86
  operator: regex
85
87
  value: "(?i)(?:will\\s+keep\\s+(?:trying|retrying|attempting)|(?:continuously|endlessly|infinitely)\\s+(?:retrying|looping|repeating|calling))"
86
- description: 'Agent declaring intent to retry indefinitely'
88
+ description: "Agent declaring intent to retry indefinitely"
87
89
  - field: content
88
90
  operator: regex
89
91
  value: "(?i)(?:spawn(?:ing|ed)?\\s+(?:another|new|additional)\\s+(?:instance|copy|clone)\\s+of\\s+(?:myself|this\\s+agent)|fork(?:ing|ed)?\\s+(?:a\\s+)?(?:new\\s+)?(?:agent|process|instance))"
90
- description: 'Agent spawning copies of itself (fork bomb pattern)'
92
+ description: "Agent spawning copies of itself (fork bomb pattern)"
91
93
  condition: any
92
94
  false_positives:
93
- - 'Legitimate batch processing with progress counters in output'
94
- - 'Polling agents designed to check status at regular intervals'
95
- - 'Long-running data pipeline agents with expected high iteration counts'
96
- - 'Retry logic in error handling with bounded retry limits'
95
+ - "Legitimate batch processing with progress counters in output"
96
+ - "Polling agents designed to check status at regular intervals"
97
+ - "Long-running data pipeline agents with expected high iteration counts"
98
+ - "Retry logic in error handling with bounded retry limits"
97
99
 
98
100
  response:
99
101
  actions:
@@ -110,25 +112,25 @@ response:
110
112
 
111
113
  test_cases:
112
114
  true_positives:
113
- - input: 'Retrying attempt 15 of 10. The request still returns the same error.'
115
+ - input: "Retrying attempt 15 of 10. The request still returns the same error."
114
116
  expected: triggered
115
- description: 'Retry counter exceeding stated maximum'
116
- - input: 'Still failing after 25 iterations. Let me try again with the same parameters.'
117
+ description: "Retry counter exceeding stated maximum"
118
+ - input: "Still failing after 25 iterations. Let me try again with the same parameters."
117
119
  expected: triggered
118
- description: 'Agent stuck in retry loop with no progress'
119
- - input: 'Calling myself recursively to process the remaining items. Recursive call depth: 47.'
120
+ description: "Agent stuck in retry loop with no progress"
121
+ - input: "Calling myself recursively to process the remaining items. Recursive call depth: 47."
120
122
  expected: triggered
121
- description: 'Recursive self-invocation with deep call stack'
122
- - input: 'Will keep trying until it works. Continuously retrying the API call.'
123
+ description: "Recursive self-invocation with deep call stack"
124
+ - input: "Will keep trying until it works. Continuously retrying the API call."
123
125
  expected: triggered
124
- description: 'Agent declaring intent to retry indefinitely'
126
+ description: "Agent declaring intent to retry indefinitely"
125
127
  true_negatives:
126
- - input: 'Processing batch 3 of 5. All items completed successfully so far.'
128
+ - input: "Processing batch 3 of 5. All items completed successfully so far."
127
129
  expected: not_triggered
128
- description: 'Legitimate batch processing with bounded progress counter'
129
- - input: 'The API returned an error. Retrying once with exponential backoff.'
130
+ description: "Legitimate batch processing with bounded progress counter"
131
+ - input: "The API returned an error. Retrying once with exponential backoff."
130
132
  expected: not_triggered
131
- description: 'Normal bounded retry logic in error handling'
132
- - input: 'Task completed after 3 attempts. Here are the final results.'
133
+ description: "Normal bounded retry logic in error handling"
134
+ - input: "Task completed after 3 attempts. Here are the final results."
133
135
  expected: not_triggered
134
- description: 'Successful completion after reasonable retry count'
136
+ description: "Successful completion after reasonable retry count"
@@ -1,5 +1,6 @@
1
- title: 'Agent Resource Exhaustion Detection'
2
- id: ATR-2026-051
1
+ title: "Agent Resource Exhaustion Detection"
2
+ id: ATR-2026-00051
3
+ rule_version: 1
3
4
  status: experimental
4
5
  description: |
5
6
  Detects when an agent causes resource exhaustion through bulk operations,
@@ -9,26 +10,27 @@ description: |
9
10
  as SELECT * without LIMIT, mass iteration directives, unbounded batch
10
11
  sizes, and fork/spawn patterns that can degrade system performance or
11
12
  cause denial of service.
12
- author: 'ATR Community'
13
- date: '2026/03/08'
14
- schema_version: '0.1'
13
+ author: "ATR Community"
14
+ date: "2026/03/08"
15
+ schema_version: "0.1"
15
16
  detection_tier: pattern
16
17
  maturity: experimental
17
18
  severity: high
18
19
 
19
20
  references:
20
21
  owasp_llm:
21
- - 'LLM06:2025 - Excessive Agency'
22
- - 'LLM10:2025 - Unbounded Consumption'
22
+ - "LLM06:2025 - Excessive Agency"
23
+ - "LLM10:2025 - Unbounded Consumption"
23
24
  owasp_agentic:
24
- - 'ASI05:2026 - Unexpected Code Execution'
25
+ - "ASI05:2026 - Unexpected Code Execution"
25
26
  mitre_atlas:
26
- - 'AML.T0046 - Spamming ML System with Chaff Data'
27
- - 'AML.T0053 - LLM Plugin Compromise'
27
+ - "AML.T0046 - Spamming ML System with Chaff Data"
28
+ - "AML.T0053 - LLM Plugin Compromise"
28
29
 
29
30
  tags:
30
31
  category: excessive-autonomy
31
32
  subcategory: resource-exhaustion
33
+ scan_target: mcp
32
34
  confidence: medium
33
35
 
34
36
  agent_source:
@@ -43,57 +45,57 @@ detection:
43
45
  - field: content
44
46
  operator: regex
45
47
  value: "(?i)SELECT\\s+\\*\\s+FROM\\s+\\w+(?:\\s*;|\\s*$|\\s+WHERE)(?!.*\\bLIMIT\\b)"
46
- description: 'Unbounded SELECT * query without LIMIT clause'
48
+ description: "Unbounded SELECT * query without LIMIT clause"
47
49
  - field: content
48
50
  operator: regex
49
51
  value: "(?i)(?:for\\s+each|iterate\\s+(?:over\\s+)?(?:all|every)|process\\s+(?:all|every|each)\\s+(?:record|row|entry|item|file|document))"
50
- description: 'Bulk iteration directive over entire dataset'
52
+ description: "Bulk iteration directive over entire dataset"
51
53
  - field: content
52
54
  operator: regex
53
55
  value: "(?i)(?:limit|max_results?|page_size|batch_size|count|top)\\s*[:=]\\s*(?:\\d{5,}|all|unlimited|-1|999+|MAX_INT|infinity)"
54
- description: 'Excessively large or unbounded query parameters'
56
+ description: "Excessively large or unbounded query parameters"
55
57
  - field: content
56
58
  operator: regex
57
59
  value: "(?i)(?:delete\\s+(?:all|every|each)\\s+(?:files?|records?|entries|rows?|documents?)|rm\\s+-rf\\s+[/*]|truncate\\s+(?:all\\s+)?(?:tables?|data))"
58
- description: 'Mass deletion or truncation operations'
60
+ description: "Mass deletion or truncation operations"
59
61
  - field: content
60
62
  operator: regex
61
63
  value: "(?i)(?:download(?:ing)?\\s+(?:all|every|the\\s+entire)|(?:fetch(?:ing)?|pull(?:ing)?|retriev(?:e|ing))\\s+(?:all|every|the\\s+complete|the\\s+entire)\\s+(?:dataset|database|table|collection|bucket))"
62
- description: 'Bulk data download or retrieval of entire datasets'
64
+ description: "Bulk data download or retrieval of entire datasets"
63
65
  - field: content
64
66
  operator: regex
65
67
  value: "(?i)(?:send\\s+(?:a\\s+)?(?:request|message|email|notification)\\s+to\\s+(?:all|every|each)\\s+(?:user|member|contact|subscriber|endpoint))"
66
- description: 'Mass messaging or notification blast patterns'
68
+ description: "Mass messaging or notification blast patterns"
67
69
  - field: content
68
70
  operator: regex
69
71
  value: "(?i)(?:spawn(?:ing)?\\s+\\d{2,}\\s+(?:(?:concurrent|parallel|simultaneous)\\s+)?(?:threads?|processes?|workers?|instances?|tasks?|connections?)|(?:create|open|launch)\\s+\\d{2,}\\s+(?:concurrent|parallel|simultaneous))"
70
- description: 'Spawning excessive concurrent processes or connections'
72
+ description: "Spawning excessive concurrent processes or connections"
71
73
  - field: content
72
74
  operator: regex
73
75
  value: "(?i)(?:while\\s*\\(\\s*true\\s*\\)|for\\s*\\(\\s*;\\s*;\\s*\\)|do\\s*\\{).*(?:fetch|request|call|query|send|write)"
74
- description: 'Infinite loop with resource-consuming operations inside'
76
+ description: "Infinite loop with resource-consuming operations inside"
75
77
  - field: content
76
78
  operator: regex
77
79
  value: "(?i)(?:(?:scrape|crawl|spider|harvest)\\s+(?:all|every|the\\s+entire)\\s+(?:site|website|domain|pages?)|recursive(?:ly)?\\s+(?:crawl|scrape|fetch|download))"
78
- description: 'Unbounded web scraping or crawling operations'
80
+ description: "Unbounded web scraping or crawling operations"
79
81
  - field: content
80
82
  operator: regex
81
83
  value: "(?i)(?:no\\s+(?:limit|cap|maximum|bound|restriction)\\s+(?:on|for)\\s+(?:requests?|queries|calls?|operations?|iterations?)|(?:unlimited|unbounded|uncapped)\\s+(?:requests?|queries|calls?|operations?))"
82
- description: 'Explicit removal of rate limits or resource caps'
84
+ description: "Explicit removal of rate limits or resource caps"
83
85
  - field: content
84
86
  operator: regex
85
87
  value: "(?i)(?:process(?:ing)?\\s+(?:the\\s+)?(?:entire|full|complete|whole)\\s+(?:corpus|dataset|collection|index|archive)|scan(?:ning)?\\s+(?:all|every)\\s+\\d{4,}\\s+(?:records?|files?|entries))"
86
- description: 'Full corpus processing or scanning massive datasets'
88
+ description: "Full corpus processing or scanning massive datasets"
87
89
  - field: content
88
90
  operator: regex
89
91
  value: "(?i)(?:copy\\s+(?:all|every|entire)\\s+(?:data|files?|records?|tables?)\\s+(?:to|into)|replicate\\s+(?:the\\s+)?(?:entire|full|complete)\\s+(?:database|dataset|collection))"
90
- description: 'Mass data replication or copy operations'
92
+ description: "Mass data replication or copy operations"
91
93
  condition: any
92
94
  false_positives:
93
- - 'Authorized large-scale data processing or ETL pipeline agents'
94
- - 'Batch analysis tasks with expected high volume approved by admin'
95
- - 'Initial data ingestion or indexing operations with known high volume'
96
- - 'Database export operations authorized by data team'
95
+ - "Authorized large-scale data processing or ETL pipeline agents"
96
+ - "Batch analysis tasks with expected high volume approved by admin"
97
+ - "Initial data ingestion or indexing operations with known high volume"
98
+ - "Database export operations authorized by data team"
97
99
 
98
100
  response:
99
101
  actions:
@@ -110,28 +112,28 @@ response:
110
112
 
111
113
  test_cases:
112
114
  true_positives:
113
- - input: 'SELECT * FROM transactions;'
115
+ - input: "SELECT * FROM transactions;"
114
116
  expected: triggered
115
- description: 'Unbounded SELECT query without LIMIT'
116
- - input: 'I will iterate over all 500000 records and process each one individually.'
117
+ description: "Unbounded SELECT query without LIMIT"
118
+ - input: "I will iterate over all 500000 records and process each one individually."
117
119
  expected: triggered
118
- description: 'Bulk iteration over massive dataset'
119
- - input: 'Setting batch_size=999999 and limit=unlimited for maximum throughput.'
120
+ description: "Bulk iteration over massive dataset"
121
+ - input: "Setting batch_size=999999 and limit=unlimited for maximum throughput."
120
122
  expected: triggered
121
- description: 'Excessively large batch parameters'
122
- - input: 'Downloading all files from the S3 bucket. Fetching the entire dataset for local processing.'
123
+ description: "Excessively large batch parameters"
124
+ - input: "Downloading all files from the S3 bucket. Fetching the entire dataset for local processing."
123
125
  expected: triggered
124
- description: 'Bulk data download of entire storage'
125
- - input: 'Spawning 50 concurrent workers to send requests to the API.'
126
+ description: "Bulk data download of entire storage"
127
+ - input: "Spawning 50 concurrent workers to send requests to the API."
126
128
  expected: triggered
127
- description: 'Excessive concurrent process spawning'
129
+ description: "Excessive concurrent process spawning"
128
130
  true_negatives:
129
- - input: 'SELECT id, name FROM users WHERE active=true LIMIT 100;'
131
+ - input: "SELECT id, name FROM users WHERE active=true LIMIT 100;"
130
132
  expected: not_triggered
131
- description: 'Bounded query with column selection and LIMIT'
132
- - input: 'Processing the 25 records from the filtered result set.'
133
+ description: "Bounded query with column selection and LIMIT"
134
+ - input: "Processing the 25 records from the filtered result set."
133
135
  expected: not_triggered
134
- description: 'Processing a reasonably sized result set'
135
- - input: 'Fetching the first page of results with page_size=20.'
136
+ description: "Processing a reasonably sized result set"
137
+ - input: "Fetching the first page of results with page_size=20."
136
138
  expected: not_triggered
137
- description: 'Paginated query with reasonable page size'
139
+ description: "Paginated query with reasonable page size"
@@ -1,5 +1,6 @@
1
- title: 'Cascading Failure Detection in Agent Pipelines'
2
- id: ATR-2026-052
1
+ title: "Cascading Failure Detection in Agent Pipelines"
2
+ id: ATR-2026-00052
3
+ rule_version: 1
3
4
  status: experimental
4
5
  description: |
5
6
  Detects cascading failure patterns in automated agent pipelines where
@@ -10,26 +11,27 @@ description: |
10
11
  incorrect signals. These patterns exploit the "trust the previous
11
12
  stage" assumption in multi-step agent workflows.
12
13
  Note: This rule detects textual descriptions of cascading failure patterns, not live cascading failures. Structural cascade prevention requires behavioral monitoring.
13
- author: 'ATR Community'
14
- date: '2026/03/09'
15
- schema_version: '0.1'
14
+ author: "ATR Community"
15
+ date: "2026/03/09"
16
+ schema_version: "0.1"
16
17
  detection_tier: pattern
17
18
  maturity: experimental
18
19
  severity: high
19
20
 
20
21
  references:
21
22
  owasp_llm:
22
- - 'LLM06:2025 - Excessive Agency'
23
- - 'LLM05:2025 - Improper Output Handling'
23
+ - "LLM06:2025 - Excessive Agency"
24
+ - "LLM05:2025 - Improper Output Handling"
24
25
  owasp_agentic:
25
- - 'ASI08:2026 - Cascading Failures'
26
+ - "ASI08:2026 - Cascading Failures"
26
27
  mitre_atlas:
27
- - 'AML.T0053 - LLM Plugin Compromise'
28
- - 'AML.T0046 - Spamming ML System with Chaff Data'
28
+ - "AML.T0053 - LLM Plugin Compromise"
29
+ - "AML.T0046 - Spamming ML System with Chaff Data"
29
30
 
30
31
  tags:
31
32
  category: excessive-autonomy
32
33
  subcategory: cascading-failure
34
+ scan_target: mcp
33
35
  confidence: medium
34
36
 
35
37
  agent_source:
@@ -44,53 +46,53 @@ detection:
44
46
  - field: content
45
47
  operator: regex
46
48
  value: "(?i)auto[_-]?approv(?:ed|ing|al).{0,30}(?:without|no|skipping)\\s+(?:human|manual|review|check|verification|validation)"
47
- description: 'Automated approval bypassing human review checkpoint'
49
+ description: "Automated approval bypassing human review checkpoint"
48
50
  - field: content
49
51
  operator: regex
50
52
  value: "(?i)(?:propagat(?:ed|ing)|forward(?:ed|ing)|pass(?:ed|ing))\\s+(?:error|failure|exception|fault)\\s+(?:to|through|downstream|to\\s+next\\s+(?:stage|step|agent))"
51
- description: 'Error propagating downstream through pipeline stages'
53
+ description: "Error propagating downstream through pipeline stages"
52
54
  - field: content
53
55
  operator: regex
54
56
  value: "(?i)(?:stage|step|phase)\\s+\\d+\\s+(?:failed|error|timed\\s+out).*(?:stage|step|phase)\\s+\\d+\\s+(?:also|subsequently|then)\\s+(?:failed|errored)"
55
- description: 'Multiple pipeline stages failing in sequence'
57
+ description: "Multiple pipeline stages failing in sequence"
56
58
  - field: content
57
59
  operator: regex
58
60
  value: "(?i)(?:trusting|accepting|using)\\s+(?:previous|upstream|prior)\\s+(?:stage|step|agent)\\s+(?:output|result|response)\\s+(?:without|no)\\s+(?:validation|verification|check)"
59
- description: 'Stage consuming upstream output without validation'
61
+ description: "Stage consuming upstream output without validation"
60
62
  - field: content
61
63
  operator: regex
62
64
  value: "(?i)(?:rollback|revert|undo|destroy|delete|terminate)\\s+(?:all|everything|entire|production|live).{0,40}(?:based\\s+on|triggered\\s+by|due\\s+to)\\s+(?:automated|agent|AI|pipeline)"
63
- description: 'Destructive action triggered by automated pipeline signal'
65
+ description: "Destructive action triggered by automated pipeline signal"
64
66
  - field: content
65
67
  operator: regex
66
68
  value: "(?i)(?:amplif(?:ied|ying)|escalat(?:ed|ing)|magnif(?:ied|ying))\\s+(?:the\\s+)?(?:error|issue|problem|signal|impact|damage)\\s+(?:across|through|to)\\s+(?:multiple|all|downstream)"
67
- description: 'Error amplification across multiple pipeline stages'
69
+ description: "Error amplification across multiple pipeline stages"
68
70
  - field: content
69
71
  operator: regex
70
72
  value: "(?i)(?:no\\s+(?:human|manual)\\s+(?:in|checkpoint|review|gate|approval)\\s+(?:the|this)?\\s*(?:loop|pipeline|chain|workflow)|(?:fully|completely)\\s+automated\\s+(?:pipeline|workflow|chain)\\s+(?:with|including)\\s+(?:destructive|production|critical))"
71
- description: 'Fully automated pipeline with no human-in-the-loop for critical actions'
73
+ description: "Fully automated pipeline with no human-in-the-loop for critical actions"
72
74
  - field: content
73
75
  operator: regex
74
76
  value: "(?i)(?:blind(?:ly)?|unconditional(?:ly)?|automatic(?:ally)?)\\s+(?:executing|running|applying|deploying).{0,60}(?:previous|upstream|AI|agent|automated)(?:\\s+(?:AI|agent|system|model))?"
75
- description: 'Blind execution of upstream agent recommendations'
77
+ description: "Blind execution of upstream agent recommendations"
76
78
  - field: content
77
79
  operator: regex
78
80
  value: "(?i)(?!(?:post[- ]?(?:incident|mortem)|review|analysis|report|last\\s+(?:week|month|time)|caused\\s+by|root\\s+cause|lessons?\\s+learned|investigation|retrospective).{0,80})(?:chain\\s+reaction|domino\\s+(?:effect|failure)|failure\\s+cascade|cascading\\s+(?:error|failure|shutdown|rollback))(?!.{0,80}(?:was\\s+caused\\s+by|root\\s+cause|post[- ]?(?:incident|mortem)|lessons?\\s+learned|last\\s+(?:week|month|time)))"
79
- description: 'Explicit cascading failure terminology (excludes retrospective analysis context)'
81
+ description: "Explicit cascading failure terminology (excludes retrospective analysis context)"
80
82
  - field: content
81
83
  operator: regex
82
84
  value: "(?i)(?:retry|fallback)\\s+(?:triggered|activated|initiated)\\s+(?:automatically|by\\s+(?:previous|upstream)).*(?:retry|fallback)\\s+(?:triggered|activated|initiated)"
83
- description: 'Cascading retry/fallback loops across stages'
85
+ description: "Cascading retry/fallback loops across stages"
84
86
  - field: content
85
87
  operator: regex
86
88
  value: "(?i)(?:all|every)\\s+\\d+\\s+(?:downstream|dependent|connected)\\s+(?:agents?|services?|stages?|steps?)\\s+(?:affected|impacted|failed|halted)"
87
- description: 'Multiple downstream components affected by single failure'
89
+ description: "Multiple downstream components affected by single failure"
88
90
  condition: any
89
91
  false_positives:
90
- - 'Legitimate pipeline monitoring reporting multi-stage errors for debugging'
91
- - 'Chaos engineering or fault injection testing in controlled environments'
92
- - 'Post-incident analysis discussing cascading failure root causes'
93
- - 'Circuit breaker implementations that intentionally detect cascade patterns'
92
+ - "Legitimate pipeline monitoring reporting multi-stage errors for debugging"
93
+ - "Chaos engineering or fault injection testing in controlled environments"
94
+ - "Post-incident analysis discussing cascading failure root causes"
95
+ - "Circuit breaker implementations that intentionally detect cascade patterns"
94
96
 
95
97
  response:
96
98
  actions:
@@ -105,49 +107,49 @@ response:
105
107
 
106
108
  test_cases:
107
109
  true_positives:
108
- - input: 'Auto-approved deployment without human review based on AI test results. Pushing to production.'
110
+ - input: "Auto-approved deployment without human review based on AI test results. Pushing to production."
109
111
  expected: triggered
110
- description: 'Auto-approval bypassing human review for production deployment'
111
- - input: 'Stage 2 failed with timeout. Stage 3 also failed due to missing input from stage 2. Stage 4 subsequently failed.'
112
+ description: "Auto-approval bypassing human review for production deployment"
113
+ - input: "Stage 2 failed with timeout. Stage 3 also failed due to missing input from stage 2. Stage 4 subsequently failed."
112
114
  expected: triggered
113
- description: 'Sequential multi-stage pipeline failure cascade'
114
- - input: 'Rollback all production services triggered by automated monitoring agent alert.'
115
+ description: "Sequential multi-stage pipeline failure cascade"
116
+ - input: "Rollback all production services triggered by automated monitoring agent alert."
115
117
  expected: triggered
116
- description: 'Destructive rollback triggered by automated signal'
117
- - input: 'Trusting previous stage output without validation. Proceeding to deploy the generated configuration.'
118
+ description: "Destructive rollback triggered by automated signal"
119
+ - input: "Trusting previous stage output without validation. Proceeding to deploy the generated configuration."
118
120
  expected: triggered
119
- description: 'Pipeline stage consuming unvalidated upstream output'
120
- - input: 'Cascading failure detected: payment service down caused order service, notification service, and analytics to fail.'
121
+ description: "Pipeline stage consuming unvalidated upstream output"
122
+ - input: "Cascading failure detected: payment service down caused order service, notification service, and analytics to fail."
121
123
  expected: triggered
122
- description: 'Cascading failure across dependent services'
123
- - input: 'Fully automated pipeline with destructive teardown stage. No human in the loop for the delete operation.'
124
+ description: "Cascading failure across dependent services"
125
+ - input: "Fully automated pipeline with destructive teardown stage. No human in the loop for the delete operation."
124
126
  expected: triggered
125
- description: 'Fully automated pipeline with destructive actions and no human gate'
126
- - input: 'Blindly executing recommendations from upstream AI agent. Applying all suggested database schema changes.'
127
+ description: "Fully automated pipeline with destructive actions and no human gate"
128
+ - input: "Blindly executing recommendations from upstream AI agent. Applying all suggested database schema changes."
127
129
  expected: triggered
128
- description: 'Blind execution of AI-generated database changes'
129
- - input: 'Retry triggered automatically by previous failure. Fallback triggered by retry timeout. Second fallback triggered.'
130
+ description: "Blind execution of AI-generated database changes"
131
+ - input: "Retry triggered automatically by previous failure. Fallback triggered by retry timeout. Second fallback triggered."
130
132
  expected: triggered
131
- description: 'Cascading retry-fallback loop across stages'
132
- - input: 'Amplifying the error across all 12 downstream services. Impact spreading to production cluster.'
133
+ description: "Cascading retry-fallback loop across stages"
134
+ - input: "Amplifying the error across all 12 downstream services. Impact spreading to production cluster."
133
135
  expected: triggered
134
- description: 'Error amplification across multiple downstream services'
135
- - input: 'All 8 dependent agents affected by the coordinator failure. Entire pipeline halted.'
136
+ description: "Error amplification across multiple downstream services"
137
+ - input: "All 8 dependent agents affected by the coordinator failure. Entire pipeline halted."
136
138
  expected: triggered
137
- description: 'Single failure impacting all downstream agents'
139
+ description: "Single failure impacting all downstream agents"
138
140
  true_negatives:
139
- - input: 'Pipeline completed successfully. All 5 stages passed validation. Awaiting human approval for deployment.'
141
+ - input: "Pipeline completed successfully. All 5 stages passed validation. Awaiting human approval for deployment."
140
142
  expected: not_triggered
141
- description: 'Normal pipeline completion with human approval gate'
142
- - input: 'Stage 3 encountered an error. Circuit breaker activated. Alerting on-call engineer for review.'
143
+ description: "Normal pipeline completion with human approval gate"
144
+ - input: "Stage 3 encountered an error. Circuit breaker activated. Alerting on-call engineer for review."
143
145
  expected: not_triggered
144
- description: 'Proper circuit breaker stopping cascade and alerting human'
145
- - input: 'Running chaos engineering test: simulating stage 2 failure to verify pipeline resilience.'
146
+ description: "Proper circuit breaker stopping cascade and alerting human"
147
+ - input: "Running chaos engineering test: simulating stage 2 failure to verify pipeline resilience."
146
148
  expected: not_triggered
147
- description: 'Intentional fault injection for resilience testing'
148
- - input: 'Post-incident review: the cascading failure last week was caused by an unhandled null pointer in stage 1.'
149
+ description: "Intentional fault injection for resilience testing"
150
+ - input: "Post-incident review: the cascading failure last week was caused by an unhandled null pointer in stage 1."
149
151
  expected: not_triggered
150
- description: 'Post-incident analysis discussing past cascade'
151
- - input: 'Automated tests passed. Sending results to reviewer for manual sign-off before merge.'
152
+ description: "Post-incident analysis discussing past cascade"
153
+ - input: "Automated tests passed. Sending results to reviewer for manual sign-off before merge."
152
154
  expected: not_triggered
153
- description: 'Automated tests with proper human-in-the-loop before action'
155
+ description: "Automated tests with proper human-in-the-loop before action"