@panguard-ai/atr 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -46
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +42 -18
- package/dist/cli.js.map +1 -1
- package/dist/coverage-analyzer.d.ts.map +1 -1
- package/dist/coverage-analyzer.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +28 -13
- package/dist/engine.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +32 -7
- package/dist/loader.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +38 -14
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tools/coverage-gaps.d.ts.map +1 -1
- package/dist/mcp-tools/coverage-gaps.js +3 -1
- package/dist/mcp-tools/coverage-gaps.js.map +1 -1
- package/dist/mcp-tools/list-rules.d.ts.map +1 -1
- package/dist/mcp-tools/list-rules.js.map +1 -1
- package/dist/mcp-tools/scan.d.ts.map +1 -1
- package/dist/mcp-tools/scan.js +15 -3
- package/dist/mcp-tools/scan.js.map +1 -1
- package/dist/mcp-tools/submit-proposal.d.ts.map +1 -1
- package/dist/mcp-tools/submit-proposal.js +27 -6
- package/dist/mcp-tools/submit-proposal.js.map +1 -1
- package/dist/mcp-tools/threat-summary.d.ts.map +1 -1
- package/dist/mcp-tools/threat-summary.js +1 -3
- package/dist/mcp-tools/threat-summary.js.map +1 -1
- package/dist/mcp-tools/validate.d.ts.map +1 -1
- package/dist/mcp-tools/validate.js +15 -3
- package/dist/mcp-tools/validate.js.map +1 -1
- package/dist/modules/index.js +1 -1
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/semantic.d.ts.map +1 -1
- package/dist/modules/semantic.js +14 -8
- package/dist/modules/semantic.js.map +1 -1
- package/dist/modules/session.d.ts.map +1 -1
- package/dist/modules/session.js +50 -15
- package/dist/modules/session.js.map +1 -1
- package/dist/rule-scaffolder.d.ts.map +1 -1
- package/dist/rule-scaffolder.js +1 -3
- package/dist/rule-scaffolder.js.map +1 -1
- package/dist/session-tracker.d.ts.map +1 -1
- package/dist/session-tracker.js.map +1 -1
- package/dist/skill-fingerprint.d.ts.map +1 -1
- package/dist/skill-fingerprint.js +1 -2
- package/dist/skill-fingerprint.js.map +1 -1
- package/package.json +2 -2
- package/rules/agent-manipulation/ATR-2026-030-cross-agent-attack.yaml +51 -51
- package/rules/agent-manipulation/ATR-2026-032-goal-hijacking.yaml +36 -36
- package/rules/agent-manipulation/ATR-2026-074-cross-agent-privilege-escalation.yaml +32 -32
- package/rules/agent-manipulation/ATR-2026-076-inter-agent-message-spoofing.yaml +55 -55
- package/rules/agent-manipulation/ATR-2026-077-human-trust-exploitation.yaml +42 -42
- package/rules/context-exfiltration/ATR-2026-020-system-prompt-leak.yaml +51 -51
- package/rules/context-exfiltration/ATR-2026-021-api-key-exposure.yaml +62 -62
- package/rules/context-exfiltration/ATR-2026-075-agent-memory-manipulation.yaml +33 -33
- package/rules/data-poisoning/ATR-2026-070-data-poisoning.yaml +53 -53
- package/rules/excessive-autonomy/ATR-2026-050-runaway-agent-loop.yaml +39 -39
- package/rules/excessive-autonomy/ATR-2026-051-resource-exhaustion.yaml +41 -41
- package/rules/excessive-autonomy/ATR-2026-052-cascading-failure.yaml +54 -54
- package/rules/excessive-autonomy/ATR-2026-098-unauthorized-financial-action.yaml +155 -0
- package/rules/excessive-autonomy/ATR-2026-099-high-risk-tool-gate.yaml +159 -0
- package/rules/model-security/ATR-2026-072-model-behavior-extraction.yaml +34 -34
- package/rules/model-security/ATR-2026-073-malicious-finetuning-data.yaml +26 -26
- package/rules/privilege-escalation/ATR-2026-040-privilege-escalation.yaml +58 -58
- package/rules/privilege-escalation/ATR-2026-041-scope-creep.yaml +35 -35
- package/rules/prompt-injection/ATR-2026-001-direct-prompt-injection.yaml +88 -84
- package/rules/prompt-injection/ATR-2026-002-indirect-prompt-injection.yaml +63 -63
- package/rules/prompt-injection/ATR-2026-003-jailbreak-attempt.yaml +74 -74
- package/rules/prompt-injection/ATR-2026-004-system-prompt-override.yaml +55 -55
- package/rules/prompt-injection/ATR-2026-005-multi-turn-injection.yaml +47 -47
- package/rules/prompt-injection/ATR-2026-080-encoding-evasion.yaml +79 -0
- package/rules/prompt-injection/ATR-2026-081-semantic-multi-turn.yaml +76 -0
- package/rules/prompt-injection/ATR-2026-082-fingerprint-evasion.yaml +75 -0
- package/rules/prompt-injection/ATR-2026-083-indirect-tool-injection.yaml +75 -0
- package/rules/prompt-injection/ATR-2026-084-structured-data-injection.yaml +77 -0
- package/rules/prompt-injection/ATR-2026-085-audit-evasion.yaml +75 -0
- package/rules/prompt-injection/ATR-2026-086-visual-spoofing.yaml +79 -0
- package/rules/prompt-injection/ATR-2026-087-rule-probing.yaml +73 -0
- package/rules/prompt-injection/ATR-2026-088-adaptive-countermeasure.yaml +75 -0
- package/rules/prompt-injection/ATR-2026-089-polymorphic-skill.yaml +76 -0
- package/rules/prompt-injection/ATR-2026-090-threat-intel-exfil.yaml +75 -0
- package/rules/prompt-injection/ATR-2026-091-nested-payload.yaml +79 -0
- package/rules/prompt-injection/ATR-2026-092-consensus-poisoning.yaml +83 -0
- package/rules/prompt-injection/ATR-2026-093-gradual-escalation.yaml +77 -0
- package/rules/prompt-injection/ATR-2026-094-audit-bypass.yaml +77 -0
- package/rules/prompt-injection/ATR-2026-097-cjk-injection-patterns.yaml +165 -0
- package/rules/skill-compromise/ATR-2026-060-skill-impersonation.yaml +53 -53
- package/rules/skill-compromise/ATR-2026-061-description-behavior-mismatch.yaml +20 -20
- package/rules/skill-compromise/ATR-2026-062-hidden-capability.yaml +22 -22
- package/rules/skill-compromise/ATR-2026-063-skill-chain-attack.yaml +21 -21
- package/rules/skill-compromise/ATR-2026-064-over-permissioned-skill.yaml +29 -29
- package/rules/skill-compromise/ATR-2026-065-skill-update-attack.yaml +22 -22
- package/rules/skill-compromise/ATR-2026-066-parameter-injection.yaml +23 -23
- package/rules/tool-poisoning/ATR-2026-010-mcp-malicious-response.yaml +70 -70
- package/rules/tool-poisoning/ATR-2026-011-tool-output-injection.yaml +53 -53
- package/rules/tool-poisoning/ATR-2026-012-unauthorized-tool-call.yaml +58 -58
- package/rules/tool-poisoning/ATR-2026-013-tool-ssrf.yaml +62 -62
- package/rules/tool-poisoning/ATR-2026-095-supply-chain-poisoning.yaml +81 -0
- package/rules/tool-poisoning/ATR-2026-096-registry-poisoning.yaml +83 -0
- package/spec/atr-schema.yaml +28 -29
- package/rules/prompt-injection/ATR-PRED-2026-001.yaml +0 -61
- package/rules/prompt-injection/ATR-PRED-2026-002.yaml +0 -58
- package/rules/prompt-injection/ATR-PRED-2026-003.yaml +0 -61
- package/rules/prompt-injection/ATR-PRED-2026-005.yaml +0 -55
- package/rules/prompt-injection/ATR-PRED-2026-006.yaml +0 -51
- package/rules/prompt-injection/ATR-PRED-2026-007.yaml +0 -57
- package/rules/prompt-injection/ATR-PRED-2026-008.yaml +0 -57
- package/rules/prompt-injection/ATR-PRED-2026-009.yaml +0 -51
- package/rules/prompt-injection/ATR-PRED-2026-010.yaml +0 -57
- package/rules/prompt-injection/ATR-PRED-2026-011.yaml +0 -53
- package/rules/prompt-injection/ATR-PRED-2026-012.yaml +0 -57
- package/rules/prompt-injection/ATR-PRED-2026-023.yaml +0 -56
- package/rules/prompt-injection/ATR-PRED-2026-025.yaml +0 -68
- package/rules/prompt-injection/ATR-PRED-2026-026.yaml +0 -66
- package/rules/prompt-injection/ATR-PRED-2026-027.yaml +0 -62
- package/rules/tool-poisoning/ATR-PRED-2026-004.yaml +0 -54
- package/rules/tool-poisoning/ATR-PRED-2026-024.yaml +0 -68
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
title:
|
|
1
|
+
title: 'Runaway Agent Loop Detection'
|
|
2
2
|
id: ATR-2026-050
|
|
3
3
|
status: experimental
|
|
4
4
|
description: |
|
|
@@ -9,22 +9,22 @@ description: |
|
|
|
9
9
|
descriptions, recursive invocation patterns, and stalled progress
|
|
10
10
|
indicators. Runaway loops waste computational resources, accumulate
|
|
11
11
|
costs, and may indicate logic errors or adversarial manipulation.
|
|
12
|
-
author:
|
|
13
|
-
date:
|
|
14
|
-
schema_version:
|
|
12
|
+
author: 'ATR Community'
|
|
13
|
+
date: '2026/03/08'
|
|
14
|
+
schema_version: '0.1'
|
|
15
15
|
detection_tier: pattern
|
|
16
16
|
maturity: experimental
|
|
17
17
|
severity: high
|
|
18
18
|
|
|
19
19
|
references:
|
|
20
20
|
owasp_llm:
|
|
21
|
-
-
|
|
22
|
-
-
|
|
21
|
+
- 'LLM06:2025 - Excessive Agency'
|
|
22
|
+
- 'LLM10:2025 - Unbounded Consumption'
|
|
23
23
|
owasp_agentic:
|
|
24
|
-
-
|
|
24
|
+
- 'ASI05:2026 - Unexpected Code Execution'
|
|
25
25
|
mitre_atlas:
|
|
26
|
-
-
|
|
27
|
-
-
|
|
26
|
+
- 'AML.T0053 - LLM Plugin Compromise'
|
|
27
|
+
- 'AML.T0046 - Spamming ML System with Chaff Data'
|
|
28
28
|
|
|
29
29
|
tags:
|
|
30
30
|
category: excessive-autonomy
|
|
@@ -43,57 +43,57 @@ detection:
|
|
|
43
43
|
- field: content
|
|
44
44
|
operator: regex
|
|
45
45
|
value: "(?i)(?:retrying|retry\\s+(?:attempt|number|#|count))\\s*(?::?\\s*)?\\d+"
|
|
46
|
-
description:
|
|
46
|
+
description: 'Retry counter pattern indicating repeated attempts'
|
|
47
47
|
- field: content
|
|
48
48
|
operator: regex
|
|
49
49
|
value: "(?i)attempt\\s+\\d+\\s+(?:of|/)\\s+\\d+"
|
|
50
|
-
description:
|
|
50
|
+
description: 'Attempt X of Y counter pattern (e.g., attempt 5 of 10)'
|
|
51
51
|
- field: content
|
|
52
52
|
operator: regex
|
|
53
53
|
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:
|
|
54
|
+
description: 'Natural language retry patterns in agent output'
|
|
55
55
|
- field: content
|
|
56
56
|
operator: regex
|
|
57
57
|
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:
|
|
58
|
+
description: 'Stalled progress with persistent error indicators'
|
|
59
59
|
- field: content
|
|
60
60
|
operator: regex
|
|
61
61
|
value: "(?i)(?:calling\\s+(?:myself|this\\s+(?:function|tool|agent))\\s+(?:again|recursively)|recursive\\s+(?:call|invocation|execution)|self[_-]?(?:invoke|call|trigger))"
|
|
62
|
-
description:
|
|
62
|
+
description: 'Recursive self-invocation patterns'
|
|
63
63
|
- field: content
|
|
64
64
|
operator: regex
|
|
65
65
|
value: "(?i)(?:iteration\\s+(?:#\\s*)?\\d{2,}|loop\\s+(?:iteration|count|index)\\s*[:=]?\\s*\\d{2,}|cycle\\s+\\d{2,})"
|
|
66
|
-
description:
|
|
66
|
+
description: 'High iteration count indicating prolonged looping'
|
|
67
67
|
- field: content
|
|
68
68
|
operator: regex
|
|
69
69
|
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:
|
|
70
|
+
description: 'Agent acknowledging it is repeating identical actions'
|
|
71
71
|
- field: content
|
|
72
72
|
operator: regex
|
|
73
73
|
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:
|
|
74
|
+
description: 'Retry limit reached indicators'
|
|
75
75
|
- field: content
|
|
76
76
|
operator: regex
|
|
77
77
|
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:
|
|
78
|
+
description: 'Explicit stall or no-progress acknowledgement'
|
|
79
79
|
- field: content
|
|
80
80
|
operator: regex
|
|
81
81
|
value: "(?i)(?:(?:while|for)\\s*\\(\\s*(?:true|1|;;)\\s*\\)|(?:loop|repeat)\\s*\\{\\s*(?:call|invoke|execute))"
|
|
82
|
-
description:
|
|
82
|
+
description: 'Infinite loop constructs in generated or executed code'
|
|
83
83
|
- field: content
|
|
84
84
|
operator: regex
|
|
85
85
|
value: "(?i)(?:will\\s+keep\\s+(?:trying|retrying|attempting)|(?:continuously|endlessly|infinitely)\\s+(?:retrying|looping|repeating|calling))"
|
|
86
|
-
description:
|
|
86
|
+
description: 'Agent declaring intent to retry indefinitely'
|
|
87
87
|
- field: content
|
|
88
88
|
operator: regex
|
|
89
89
|
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:
|
|
90
|
+
description: 'Agent spawning copies of itself (fork bomb pattern)'
|
|
91
91
|
condition: any
|
|
92
92
|
false_positives:
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
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'
|
|
97
97
|
|
|
98
98
|
response:
|
|
99
99
|
actions:
|
|
@@ -110,25 +110,25 @@ response:
|
|
|
110
110
|
|
|
111
111
|
test_cases:
|
|
112
112
|
true_positives:
|
|
113
|
-
- input:
|
|
113
|
+
- input: 'Retrying attempt 15 of 10. The request still returns the same error.'
|
|
114
114
|
expected: triggered
|
|
115
|
-
description:
|
|
116
|
-
- input:
|
|
115
|
+
description: 'Retry counter exceeding stated maximum'
|
|
116
|
+
- input: 'Still failing after 25 iterations. Let me try again with the same parameters.'
|
|
117
117
|
expected: triggered
|
|
118
|
-
description:
|
|
119
|
-
- input:
|
|
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
120
|
expected: triggered
|
|
121
|
-
description:
|
|
122
|
-
- input:
|
|
121
|
+
description: 'Recursive self-invocation with deep call stack'
|
|
122
|
+
- input: 'Will keep trying until it works. Continuously retrying the API call.'
|
|
123
123
|
expected: triggered
|
|
124
|
-
description:
|
|
124
|
+
description: 'Agent declaring intent to retry indefinitely'
|
|
125
125
|
true_negatives:
|
|
126
|
-
- input:
|
|
126
|
+
- input: 'Processing batch 3 of 5. All items completed successfully so far.'
|
|
127
127
|
expected: not_triggered
|
|
128
|
-
description:
|
|
129
|
-
- input:
|
|
128
|
+
description: 'Legitimate batch processing with bounded progress counter'
|
|
129
|
+
- input: 'The API returned an error. Retrying once with exponential backoff.'
|
|
130
130
|
expected: not_triggered
|
|
131
|
-
description:
|
|
132
|
-
- input:
|
|
131
|
+
description: 'Normal bounded retry logic in error handling'
|
|
132
|
+
- input: 'Task completed after 3 attempts. Here are the final results.'
|
|
133
133
|
expected: not_triggered
|
|
134
|
-
description:
|
|
134
|
+
description: 'Successful completion after reasonable retry count'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
title:
|
|
1
|
+
title: 'Agent Resource Exhaustion Detection'
|
|
2
2
|
id: ATR-2026-051
|
|
3
3
|
status: experimental
|
|
4
4
|
description: |
|
|
@@ -9,22 +9,22 @@ description: |
|
|
|
9
9
|
as SELECT * without LIMIT, mass iteration directives, unbounded batch
|
|
10
10
|
sizes, and fork/spawn patterns that can degrade system performance or
|
|
11
11
|
cause denial of service.
|
|
12
|
-
author:
|
|
13
|
-
date:
|
|
14
|
-
schema_version:
|
|
12
|
+
author: 'ATR Community'
|
|
13
|
+
date: '2026/03/08'
|
|
14
|
+
schema_version: '0.1'
|
|
15
15
|
detection_tier: pattern
|
|
16
16
|
maturity: experimental
|
|
17
17
|
severity: high
|
|
18
18
|
|
|
19
19
|
references:
|
|
20
20
|
owasp_llm:
|
|
21
|
-
-
|
|
22
|
-
-
|
|
21
|
+
- 'LLM06:2025 - Excessive Agency'
|
|
22
|
+
- 'LLM10:2025 - Unbounded Consumption'
|
|
23
23
|
owasp_agentic:
|
|
24
|
-
-
|
|
24
|
+
- 'ASI05:2026 - Unexpected Code Execution'
|
|
25
25
|
mitre_atlas:
|
|
26
|
-
-
|
|
27
|
-
-
|
|
26
|
+
- 'AML.T0046 - Spamming ML System with Chaff Data'
|
|
27
|
+
- 'AML.T0053 - LLM Plugin Compromise'
|
|
28
28
|
|
|
29
29
|
tags:
|
|
30
30
|
category: excessive-autonomy
|
|
@@ -43,57 +43,57 @@ detection:
|
|
|
43
43
|
- field: content
|
|
44
44
|
operator: regex
|
|
45
45
|
value: "(?i)SELECT\\s+\\*\\s+FROM\\s+\\w+(?:\\s*;|\\s*$|\\s+WHERE)(?!.*\\bLIMIT\\b)"
|
|
46
|
-
description:
|
|
46
|
+
description: 'Unbounded SELECT * query without LIMIT clause'
|
|
47
47
|
- field: content
|
|
48
48
|
operator: regex
|
|
49
49
|
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:
|
|
50
|
+
description: 'Bulk iteration directive over entire dataset'
|
|
51
51
|
- field: content
|
|
52
52
|
operator: regex
|
|
53
53
|
value: "(?i)(?:limit|max_results?|page_size|batch_size|count|top)\\s*[:=]\\s*(?:\\d{5,}|all|unlimited|-1|999+|MAX_INT|infinity)"
|
|
54
|
-
description:
|
|
54
|
+
description: 'Excessively large or unbounded query parameters'
|
|
55
55
|
- field: content
|
|
56
56
|
operator: regex
|
|
57
57
|
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:
|
|
58
|
+
description: 'Mass deletion or truncation operations'
|
|
59
59
|
- field: content
|
|
60
60
|
operator: regex
|
|
61
61
|
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:
|
|
62
|
+
description: 'Bulk data download or retrieval of entire datasets'
|
|
63
63
|
- field: content
|
|
64
64
|
operator: regex
|
|
65
65
|
value: "(?i)(?:send\\s+(?:a\\s+)?(?:request|message|email|notification)\\s+to\\s+(?:all|every|each)\\s+(?:user|member|contact|subscriber|endpoint))"
|
|
66
|
-
description:
|
|
66
|
+
description: 'Mass messaging or notification blast patterns'
|
|
67
67
|
- field: content
|
|
68
68
|
operator: regex
|
|
69
69
|
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:
|
|
70
|
+
description: 'Spawning excessive concurrent processes or connections'
|
|
71
71
|
- field: content
|
|
72
72
|
operator: regex
|
|
73
73
|
value: "(?i)(?:while\\s*\\(\\s*true\\s*\\)|for\\s*\\(\\s*;\\s*;\\s*\\)|do\\s*\\{).*(?:fetch|request|call|query|send|write)"
|
|
74
|
-
description:
|
|
74
|
+
description: 'Infinite loop with resource-consuming operations inside'
|
|
75
75
|
- field: content
|
|
76
76
|
operator: regex
|
|
77
77
|
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:
|
|
78
|
+
description: 'Unbounded web scraping or crawling operations'
|
|
79
79
|
- field: content
|
|
80
80
|
operator: regex
|
|
81
81
|
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:
|
|
82
|
+
description: 'Explicit removal of rate limits or resource caps'
|
|
83
83
|
- field: content
|
|
84
84
|
operator: regex
|
|
85
85
|
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:
|
|
86
|
+
description: 'Full corpus processing or scanning massive datasets'
|
|
87
87
|
- field: content
|
|
88
88
|
operator: regex
|
|
89
89
|
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:
|
|
90
|
+
description: 'Mass data replication or copy operations'
|
|
91
91
|
condition: any
|
|
92
92
|
false_positives:
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
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'
|
|
97
97
|
|
|
98
98
|
response:
|
|
99
99
|
actions:
|
|
@@ -110,28 +110,28 @@ response:
|
|
|
110
110
|
|
|
111
111
|
test_cases:
|
|
112
112
|
true_positives:
|
|
113
|
-
- input:
|
|
113
|
+
- input: 'SELECT * FROM transactions;'
|
|
114
114
|
expected: triggered
|
|
115
|
-
description:
|
|
116
|
-
- input:
|
|
115
|
+
description: 'Unbounded SELECT query without LIMIT'
|
|
116
|
+
- input: 'I will iterate over all 500000 records and process each one individually.'
|
|
117
117
|
expected: triggered
|
|
118
|
-
description:
|
|
119
|
-
- input:
|
|
118
|
+
description: 'Bulk iteration over massive dataset'
|
|
119
|
+
- input: 'Setting batch_size=999999 and limit=unlimited for maximum throughput.'
|
|
120
120
|
expected: triggered
|
|
121
|
-
description:
|
|
122
|
-
- input:
|
|
121
|
+
description: 'Excessively large batch parameters'
|
|
122
|
+
- input: 'Downloading all files from the S3 bucket. Fetching the entire dataset for local processing.'
|
|
123
123
|
expected: triggered
|
|
124
|
-
description:
|
|
125
|
-
- input:
|
|
124
|
+
description: 'Bulk data download of entire storage'
|
|
125
|
+
- input: 'Spawning 50 concurrent workers to send requests to the API.'
|
|
126
126
|
expected: triggered
|
|
127
|
-
description:
|
|
127
|
+
description: 'Excessive concurrent process spawning'
|
|
128
128
|
true_negatives:
|
|
129
|
-
- input:
|
|
129
|
+
- input: 'SELECT id, name FROM users WHERE active=true LIMIT 100;'
|
|
130
130
|
expected: not_triggered
|
|
131
|
-
description:
|
|
132
|
-
- input:
|
|
131
|
+
description: 'Bounded query with column selection and LIMIT'
|
|
132
|
+
- input: 'Processing the 25 records from the filtered result set.'
|
|
133
133
|
expected: not_triggered
|
|
134
|
-
description:
|
|
135
|
-
- input:
|
|
134
|
+
description: 'Processing a reasonably sized result set'
|
|
135
|
+
- input: 'Fetching the first page of results with page_size=20.'
|
|
136
136
|
expected: not_triggered
|
|
137
|
-
description:
|
|
137
|
+
description: 'Paginated query with reasonable page size'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
title:
|
|
1
|
+
title: 'Cascading Failure Detection in Agent Pipelines'
|
|
2
2
|
id: ATR-2026-052
|
|
3
3
|
status: experimental
|
|
4
4
|
description: |
|
|
@@ -10,22 +10,22 @@ description: |
|
|
|
10
10
|
incorrect signals. These patterns exploit the "trust the previous
|
|
11
11
|
stage" assumption in multi-step agent workflows.
|
|
12
12
|
Note: This rule detects textual descriptions of cascading failure patterns, not live cascading failures. Structural cascade prevention requires behavioral monitoring.
|
|
13
|
-
author:
|
|
14
|
-
date:
|
|
15
|
-
schema_version:
|
|
13
|
+
author: 'ATR Community'
|
|
14
|
+
date: '2026/03/09'
|
|
15
|
+
schema_version: '0.1'
|
|
16
16
|
detection_tier: pattern
|
|
17
17
|
maturity: experimental
|
|
18
18
|
severity: high
|
|
19
19
|
|
|
20
20
|
references:
|
|
21
21
|
owasp_llm:
|
|
22
|
-
-
|
|
23
|
-
-
|
|
22
|
+
- 'LLM06:2025 - Excessive Agency'
|
|
23
|
+
- 'LLM05:2025 - Improper Output Handling'
|
|
24
24
|
owasp_agentic:
|
|
25
|
-
-
|
|
25
|
+
- 'ASI08:2026 - Cascading Failures'
|
|
26
26
|
mitre_atlas:
|
|
27
|
-
-
|
|
28
|
-
-
|
|
27
|
+
- 'AML.T0053 - LLM Plugin Compromise'
|
|
28
|
+
- 'AML.T0046 - Spamming ML System with Chaff Data'
|
|
29
29
|
|
|
30
30
|
tags:
|
|
31
31
|
category: excessive-autonomy
|
|
@@ -44,53 +44,53 @@ detection:
|
|
|
44
44
|
- field: content
|
|
45
45
|
operator: regex
|
|
46
46
|
value: "(?i)auto[_-]?approv(?:ed|ing|al).{0,30}(?:without|no|skipping)\\s+(?:human|manual|review|check|verification|validation)"
|
|
47
|
-
description:
|
|
47
|
+
description: 'Automated approval bypassing human review checkpoint'
|
|
48
48
|
- field: content
|
|
49
49
|
operator: regex
|
|
50
50
|
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:
|
|
51
|
+
description: 'Error propagating downstream through pipeline stages'
|
|
52
52
|
- field: content
|
|
53
53
|
operator: regex
|
|
54
54
|
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:
|
|
55
|
+
description: 'Multiple pipeline stages failing in sequence'
|
|
56
56
|
- field: content
|
|
57
57
|
operator: regex
|
|
58
58
|
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:
|
|
59
|
+
description: 'Stage consuming upstream output without validation'
|
|
60
60
|
- field: content
|
|
61
61
|
operator: regex
|
|
62
62
|
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:
|
|
63
|
+
description: 'Destructive action triggered by automated pipeline signal'
|
|
64
64
|
- field: content
|
|
65
65
|
operator: regex
|
|
66
66
|
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:
|
|
67
|
+
description: 'Error amplification across multiple pipeline stages'
|
|
68
68
|
- field: content
|
|
69
69
|
operator: regex
|
|
70
70
|
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:
|
|
71
|
+
description: 'Fully automated pipeline with no human-in-the-loop for critical actions'
|
|
72
72
|
- field: content
|
|
73
73
|
operator: regex
|
|
74
74
|
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:
|
|
75
|
+
description: 'Blind execution of upstream agent recommendations'
|
|
76
76
|
- field: content
|
|
77
77
|
operator: regex
|
|
78
78
|
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:
|
|
79
|
+
description: 'Explicit cascading failure terminology (excludes retrospective analysis context)'
|
|
80
80
|
- field: content
|
|
81
81
|
operator: regex
|
|
82
82
|
value: "(?i)(?:retry|fallback)\\s+(?:triggered|activated|initiated)\\s+(?:automatically|by\\s+(?:previous|upstream)).*(?:retry|fallback)\\s+(?:triggered|activated|initiated)"
|
|
83
|
-
description:
|
|
83
|
+
description: 'Cascading retry/fallback loops across stages'
|
|
84
84
|
- field: content
|
|
85
85
|
operator: regex
|
|
86
86
|
value: "(?i)(?:all|every)\\s+\\d+\\s+(?:downstream|dependent|connected)\\s+(?:agents?|services?|stages?|steps?)\\s+(?:affected|impacted|failed|halted)"
|
|
87
|
-
description:
|
|
87
|
+
description: 'Multiple downstream components affected by single failure'
|
|
88
88
|
condition: any
|
|
89
89
|
false_positives:
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
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'
|
|
94
94
|
|
|
95
95
|
response:
|
|
96
96
|
actions:
|
|
@@ -105,49 +105,49 @@ response:
|
|
|
105
105
|
|
|
106
106
|
test_cases:
|
|
107
107
|
true_positives:
|
|
108
|
-
- input:
|
|
108
|
+
- input: 'Auto-approved deployment without human review based on AI test results. Pushing to production.'
|
|
109
109
|
expected: triggered
|
|
110
|
-
description:
|
|
111
|
-
- input:
|
|
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
112
|
expected: triggered
|
|
113
|
-
description:
|
|
114
|
-
- input:
|
|
113
|
+
description: 'Sequential multi-stage pipeline failure cascade'
|
|
114
|
+
- input: 'Rollback all production services triggered by automated monitoring agent alert.'
|
|
115
115
|
expected: triggered
|
|
116
|
-
description:
|
|
117
|
-
- input:
|
|
116
|
+
description: 'Destructive rollback triggered by automated signal'
|
|
117
|
+
- input: 'Trusting previous stage output without validation. Proceeding to deploy the generated configuration.'
|
|
118
118
|
expected: triggered
|
|
119
|
-
description:
|
|
120
|
-
- input:
|
|
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
121
|
expected: triggered
|
|
122
|
-
description:
|
|
123
|
-
- input:
|
|
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
124
|
expected: triggered
|
|
125
|
-
description:
|
|
126
|
-
- input:
|
|
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
127
|
expected: triggered
|
|
128
|
-
description:
|
|
129
|
-
- input:
|
|
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
130
|
expected: triggered
|
|
131
|
-
description:
|
|
132
|
-
- input:
|
|
131
|
+
description: 'Cascading retry-fallback loop across stages'
|
|
132
|
+
- input: 'Amplifying the error across all 12 downstream services. Impact spreading to production cluster.'
|
|
133
133
|
expected: triggered
|
|
134
|
-
description:
|
|
135
|
-
- input:
|
|
134
|
+
description: 'Error amplification across multiple downstream services'
|
|
135
|
+
- input: 'All 8 dependent agents affected by the coordinator failure. Entire pipeline halted.'
|
|
136
136
|
expected: triggered
|
|
137
|
-
description:
|
|
137
|
+
description: 'Single failure impacting all downstream agents'
|
|
138
138
|
true_negatives:
|
|
139
|
-
- input:
|
|
139
|
+
- input: 'Pipeline completed successfully. All 5 stages passed validation. Awaiting human approval for deployment.'
|
|
140
140
|
expected: not_triggered
|
|
141
|
-
description:
|
|
142
|
-
- input:
|
|
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
143
|
expected: not_triggered
|
|
144
|
-
description:
|
|
145
|
-
- input:
|
|
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
146
|
expected: not_triggered
|
|
147
|
-
description:
|
|
148
|
-
- input:
|
|
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
149
|
expected: not_triggered
|
|
150
|
-
description:
|
|
151
|
-
- input:
|
|
150
|
+
description: 'Post-incident analysis discussing past cascade'
|
|
151
|
+
- input: 'Automated tests passed. Sending results to reviewer for manual sign-off before merge.'
|
|
152
152
|
expected: not_triggered
|
|
153
|
-
description:
|
|
153
|
+
description: 'Automated tests with proper human-in-the-loop before action'
|