@waratahlabs/canopy 0.5.0 → 0.6.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 +244 -195
- package/SKILL.md +13 -2
- package/demo/data/insaider-threat-model.tc.json +7800 -0
- package/demo/data/openclaw-demo.tc.json +80 -303
- package/demo/data/openclaw-nemoclaw-demo.tc.json +114 -389
- package/dist/aivss/scoring/heuristic-scorer.d.ts +1 -1
- package/dist/aivss/scoring/heuristic-scorer.js +1 -1
- package/dist/cli.js +24 -37
- package/dist/cli.js.map +1 -1
- package/dist/examples/insaider-assessment.d.ts +28 -0
- package/dist/examples/insaider-assessment.d.ts.map +1 -0
- package/dist/examples/insaider-assessment.js +301 -0
- package/dist/examples/insaider-assessment.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -9
- package/dist/index.js.map +1 -1
- package/dist/output/tc-assembler.d.ts +0 -10
- package/dist/output/tc-assembler.d.ts.map +1 -1
- package/dist/output/tc-assembler.js +4 -42
- package/dist/output/tc-assembler.js.map +1 -1
- package/dist/references/container-taxonomy.d.ts +41 -0
- package/dist/references/container-taxonomy.d.ts.map +1 -0
- package/dist/references/container-taxonomy.js +207 -0
- package/dist/references/container-taxonomy.js.map +1 -0
- package/dist/references/index.d.ts +0 -7
- package/dist/references/index.d.ts.map +1 -1
- package/dist/references/index.js +0 -13
- package/dist/references/index.js.map +1 -1
- package/dist/references/nist-ai-rmf.d.ts +1 -6
- package/dist/references/nist-ai-rmf.d.ts.map +1 -1
- package/dist/references/nist-ai-rmf.js +1 -10
- package/dist/references/nist-ai-rmf.js.map +1 -1
- package/dist/references/owasp-agentic-top10.d.ts +1 -6
- package/dist/references/owasp-agentic-top10.d.ts.map +1 -1
- package/dist/references/owasp-agentic-top10.js +0 -9
- package/dist/references/owasp-agentic-top10.js.map +1 -1
- package/package.json +4 -18
- package/demo/index.html +0 -556
- package/dist/aivss/scoring/a2a-corpus.test.d.ts +0 -28
- package/dist/aivss/scoring/a2a-corpus.test.d.ts.map +0 -1
- package/dist/aivss/scoring/a2a-corpus.test.js +0 -109
- package/dist/aivss/scoring/a2a-corpus.test.js.map +0 -1
- package/dist/aivss/scoring/determinism.test.d.ts +0 -16
- package/dist/aivss/scoring/determinism.test.d.ts.map +0 -1
- package/dist/aivss/scoring/determinism.test.js +0 -169
- package/dist/aivss/scoring/determinism.test.js.map +0 -1
- package/dist/aivss/scoring/scoring-mode.d.ts +0 -48
- package/dist/aivss/scoring/scoring-mode.d.ts.map +0 -1
- package/dist/aivss/scoring/scoring-mode.js +0 -64
- package/dist/aivss/scoring/scoring-mode.js.map +0 -1
- package/dist/references/registry-parity.test.d.ts +0 -17
- package/dist/references/registry-parity.test.d.ts.map +0 -1
- package/dist/references/registry-parity.test.js +0 -87
- package/dist/references/registry-parity.test.js.map +0 -1
|
@@ -5,42 +5,15 @@
|
|
|
5
5
|
"description": "AIVSS V4 + ATLAS threat model for 1 agent(s) with NeMo Claw kernel-level isolation applied."
|
|
6
6
|
},
|
|
7
7
|
"metadata": [
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"key": "atlas-version",
|
|
18
|
-
"value": "5.6.0"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"key": "acsc-version",
|
|
22
|
-
"value": "2026-05"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"key": "nemoclaw-version",
|
|
26
|
-
"value": "alpha-2026"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"key": "demo",
|
|
30
|
-
"value": "true"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"key": "generated-at",
|
|
34
|
-
"value": "2026-05-30T00:00:00.000Z"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"key": "security-wrapper",
|
|
38
|
-
"value": "NeMo Claw"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"key": "isolation-layers",
|
|
42
|
-
"value": "Network + Filesystem + Process + Inference"
|
|
43
|
-
}
|
|
8
|
+
{ "key": "canopy-version", "value": "0.1.0" },
|
|
9
|
+
{ "key": "aivss-version", "value": "0.8" },
|
|
10
|
+
{ "key": "atlas-version", "value": "5.6.0" },
|
|
11
|
+
{ "key": "acsc-version", "value": "2026-05" },
|
|
12
|
+
{ "key": "nemoclaw-version", "value": "alpha-2026" },
|
|
13
|
+
{ "key": "demo", "value": "true" },
|
|
14
|
+
{ "key": "generated-at", "value": "2026-05-30T00:00:00.000Z" },
|
|
15
|
+
{ "key": "security-wrapper", "value": "NeMo Claw" },
|
|
16
|
+
{ "key": "isolation-layers", "value": "Network + Filesystem + Process + Inference" }
|
|
44
17
|
],
|
|
45
18
|
"threats": [
|
|
46
19
|
{
|
|
@@ -50,72 +23,26 @@
|
|
|
50
23
|
"prerequisites": "Attacker can send messages to an enabled OpenClaw channel (iMessage, Telegram, Slack)",
|
|
51
24
|
"threatAction": "Inject a crafted prompt via an inbound message that causes the assistant to execute unintended tool calls within the sandbox boundary",
|
|
52
25
|
"threatImpact": "Unintended tool execution within /sandbox; exfiltration limited to allowlisted endpoints; host filesystem and credentials inaccessible",
|
|
53
|
-
"impactedGoal": [
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
"impactedAssets": [
|
|
57
|
-
"Tool execution within sandbox",
|
|
58
|
-
"Allowlisted network endpoints"
|
|
59
|
-
],
|
|
60
|
-
"statement": "Prompt injection via inbound channels remains possible \u2014 NeMo Claw's sandbox confines the blast radius but does not prevent the injection. An attacker can still cause unintended tool calls and may exfiltrate data to any allowlisted external endpoint. The MR risk surface is unchanged; only the impact scope is reduced.",
|
|
26
|
+
"impactedGoal": ["Integrity"],
|
|
27
|
+
"impactedAssets": ["Tool execution within sandbox", "Allowlisted network endpoints"],
|
|
28
|
+
"statement": "Prompt injection via inbound channels remains possible — NeMo Claw's sandbox confines the blast radius but does not prevent the injection. An attacker can still cause unintended tool calls and may exfiltrate data to any allowlisted external endpoint. The MR risk surface is unchanged; only the impact scope is reduced.",
|
|
61
29
|
"status": "identified",
|
|
62
30
|
"metadata": [
|
|
63
|
-
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
"key": "severity-delta",
|
|
81
|
-
"value": "unchanged"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"key": "atlas-techniqueId",
|
|
85
|
-
"value": "AML.T0051"
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
"key": "atlas-techniqueName",
|
|
89
|
-
"value": "LLM Prompt Injection"
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
"key": "atlas-tactic",
|
|
93
|
-
"value": "Initial Access"
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"key": "acsc-riskFamily",
|
|
97
|
-
"value": "design-and-configuration"
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
"key": "acsc-riskId",
|
|
101
|
-
"value": "acsc-dc-002"
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"key": "nemoclaw-mitigated",
|
|
105
|
-
"value": "false"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"key": "nemoclaw-control",
|
|
109
|
-
"value": "None \u2014 injection occurs inside sandboxed process"
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"key": "deploymentContext",
|
|
113
|
-
"value": "General"
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"key": "priority",
|
|
117
|
-
"value": "high"
|
|
118
|
-
}
|
|
31
|
+
{ "key": "aivss-metric", "value": "MR" },
|
|
32
|
+
{ "key": "aivss-subCategory", "value": "Prompt Injection Resistance" },
|
|
33
|
+
{ "key": "aivss-severity", "value": "High" },
|
|
34
|
+
{ "key": "baseline-severity", "value": "High" },
|
|
35
|
+
{ "key": "severity-delta", "value": "unchanged" },
|
|
36
|
+
{ "key": "atlas-techniqueId", "value": "AML.T0051" },
|
|
37
|
+
{ "key": "atlas-techniqueName", "value": "LLM Prompt Injection" },
|
|
38
|
+
{ "key": "atlas-tactic", "value": "Initial Access" },
|
|
39
|
+
{ "key": "acsc-riskFamily", "value": "design-and-configuration" },
|
|
40
|
+
{ "key": "acsc-riskId", "value": "acsc-dc-002" },
|
|
41
|
+
{ "key": "jarkas-layer", "value": "L2 Application" },
|
|
42
|
+
{ "key": "nemoclaw-mitigated", "value": "false" },
|
|
43
|
+
{ "key": "nemoclaw-control", "value": "None — injection occurs inside sandboxed process" },
|
|
44
|
+
{ "key": "deploymentContext", "value": "General" },
|
|
45
|
+
{ "key": "priority", "value": "high" }
|
|
119
46
|
]
|
|
120
47
|
},
|
|
121
48
|
{
|
|
@@ -123,73 +50,29 @@
|
|
|
123
50
|
"numericId": 2,
|
|
124
51
|
"threatSource": "Malicious skill package from registry (e.g. ClawHub)",
|
|
125
52
|
"prerequisites": "User installs a skill from an unverified source",
|
|
126
|
-
"threatAction": "Malicious skill attempts to exfiltrate conversation data or establish persistence
|
|
53
|
+
"threatAction": "Malicious skill attempts to exfiltrate conversation data or establish persistence — contained by filesystem and network isolation",
|
|
127
54
|
"threatImpact": "Limited to /sandbox and /tmp; host filesystem and credentials inaccessible; network exfiltration restricted to allowlist",
|
|
128
|
-
"impactedGoal": [
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
"impactedAssets": [
|
|
132
|
-
"Data within /sandbox only"
|
|
133
|
-
],
|
|
134
|
-
"statement": "The 900-malicious-package OpenClaw registry incident would have had significantly reduced impact under NeMo Claw. Malicious skills are confined to /sandbox \u2014 they cannot read openclaw.json, cannot reach unapproved hosts, and cannot persist outside the sandbox. The CS supply chain threat is materially reduced, though not eliminated: skills can still cause harm within their confined scope.",
|
|
55
|
+
"impactedGoal": ["Confidentiality"],
|
|
56
|
+
"impactedAssets": ["Data within /sandbox only"],
|
|
57
|
+
"statement": "The 900-malicious-package OpenClaw registry incident would have had significantly reduced impact under NeMo Claw. Malicious skills are confined to /sandbox — they cannot read openclaw.json, cannot reach unapproved hosts, and cannot persist outside the sandbox. The CS supply chain threat is materially reduced, though not eliminated: skills can still cause harm within their confined scope.",
|
|
135
58
|
"status": "identified",
|
|
136
59
|
"metadata": [
|
|
137
|
-
{
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
{
|
|
154
|
-
"key": "severity-delta",
|
|
155
|
-
"value": "reduced"
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
"key": "atlas-techniqueId",
|
|
159
|
-
"value": "AML.T0010"
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
"key": "atlas-techniqueName",
|
|
163
|
-
"value": "ML Supply Chain Compromise"
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
"key": "atlas-tactic",
|
|
167
|
-
"value": "Persistence"
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
"key": "acsc-riskFamily",
|
|
171
|
-
"value": "structural"
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
"key": "acsc-riskId",
|
|
175
|
-
"value": "acsc-s-001"
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
"key": "nemoclaw-mitigated",
|
|
179
|
-
"value": "partial"
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"key": "nemoclaw-control",
|
|
183
|
-
"value": "Layer 2 Filesystem: /sandbox isolation. Layer 1 Network: egress allowlist."
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
"key": "deploymentContext",
|
|
187
|
-
"value": "General"
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
"key": "priority",
|
|
191
|
-
"value": "medium"
|
|
192
|
-
}
|
|
60
|
+
{ "key": "aivss-metric", "value": "CS" },
|
|
61
|
+
{ "key": "aivss-subCategory", "value": "Third-Party Component Risk" },
|
|
62
|
+
{ "key": "aivss-severity", "value": "Medium" },
|
|
63
|
+
{ "key": "baseline-severity", "value": "High" },
|
|
64
|
+
{ "key": "severity-delta", "value": "reduced" },
|
|
65
|
+
{ "key": "atlas-techniqueId", "value": "AML.T0010" },
|
|
66
|
+
{ "key": "atlas-techniqueName", "value": "ML Supply Chain Compromise" },
|
|
67
|
+
{ "key": "atlas-tactic", "value": "Persistence" },
|
|
68
|
+
{ "key": "acsc-riskFamily", "value": "structural" },
|
|
69
|
+
{ "key": "acsc-riskId", "value": "acsc-s-001" },
|
|
70
|
+
{ "key": "jarkas-layer", "value": "L2 Application" },
|
|
71
|
+
{ "key": "jarkas-layer-mitigated", "value": "L4 Host" },
|
|
72
|
+
{ "key": "nemoclaw-mitigated", "value": "partial" },
|
|
73
|
+
{ "key": "nemoclaw-control", "value": "Layer 2 Filesystem: /sandbox isolation. Layer 1 Network: egress allowlist." },
|
|
74
|
+
{ "key": "deploymentContext", "value": "General" },
|
|
75
|
+
{ "key": "priority", "value": "medium" }
|
|
193
76
|
]
|
|
194
77
|
},
|
|
195
78
|
{
|
|
@@ -197,73 +80,28 @@
|
|
|
197
80
|
"numericId": 3,
|
|
198
81
|
"threatSource": "Compromised skill or injected agent action",
|
|
199
82
|
"prerequisites": "Attacker achieves code execution within OpenClaw process",
|
|
200
|
-
"threatAction": "Attempt to read openclaw.json for API keys and channel tokens
|
|
83
|
+
"threatAction": "Attempt to read openclaw.json for API keys and channel tokens — blocked by filesystem isolation",
|
|
201
84
|
"threatImpact": "Minimal: host filesystem is read-only outside /sandbox; credentials in openclaw.json inaccessible",
|
|
202
|
-
"impactedGoal": [
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
"impactedAssets": [
|
|
206
|
-
"In-process secrets only (if passed as env vars to sandbox)"
|
|
207
|
-
],
|
|
208
|
-
"statement": "NeMo Claw's Layer 2 filesystem isolation directly mitigates credential theft from openclaw.json \u2014 the host filesystem is read-only from within the sandbox. Credentials passed as environment variables into the sandbox remain at-risk, but the primary attack vector (reading config files) is blocked. This is NeMo Claw's clearest win at the host layer.",
|
|
85
|
+
"impactedGoal": ["Confidentiality"],
|
|
86
|
+
"impactedAssets": ["In-process secrets only (if passed as env vars to sandbox)"],
|
|
87
|
+
"statement": "NeMo Claw's Layer 2 filesystem isolation directly mitigates credential theft from openclaw.json — the host filesystem is read-only from within the sandbox. Credentials passed as environment variables into the sandbox remain at-risk, but the primary attack vector (reading config files) is blocked. This is NeMo Claw's clearest win in the Jarkas L4 Host layer.",
|
|
209
88
|
"status": "identified",
|
|
210
89
|
"metadata": [
|
|
211
|
-
{
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
"key": "severity-delta",
|
|
229
|
-
"value": "reduced"
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
"key": "atlas-techniqueId",
|
|
233
|
-
"value": "AML.T0044"
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
"key": "atlas-techniqueName",
|
|
237
|
-
"value": "Full ML Model Access"
|
|
238
|
-
},
|
|
239
|
-
{
|
|
240
|
-
"key": "atlas-tactic",
|
|
241
|
-
"value": "Credential Access"
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
"key": "acsc-riskFamily",
|
|
245
|
-
"value": "privilege"
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
"key": "acsc-riskId",
|
|
249
|
-
"value": "acsc-p-001"
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
"key": "nemoclaw-mitigated",
|
|
253
|
-
"value": "true"
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
"key": "nemoclaw-control",
|
|
257
|
-
"value": "Layer 2 Filesystem: host FS read-only outside /sandbox. Layer 3 Process: Landlock prevents path traversal."
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
"key": "deploymentContext",
|
|
261
|
-
"value": "General"
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
"key": "priority",
|
|
265
|
-
"value": "low"
|
|
266
|
-
}
|
|
90
|
+
{ "key": "aivss-metric", "value": "DC" },
|
|
91
|
+
{ "key": "aivss-subCategory", "value": "Credential Storage Security" },
|
|
92
|
+
{ "key": "aivss-severity", "value": "Low" },
|
|
93
|
+
{ "key": "baseline-severity", "value": "Medium" },
|
|
94
|
+
{ "key": "severity-delta", "value": "reduced" },
|
|
95
|
+
{ "key": "atlas-techniqueId", "value": "AML.T0044" },
|
|
96
|
+
{ "key": "atlas-techniqueName", "value": "Full ML Model Access" },
|
|
97
|
+
{ "key": "atlas-tactic", "value": "Credential Access" },
|
|
98
|
+
{ "key": "acsc-riskFamily", "value": "privilege" },
|
|
99
|
+
{ "key": "acsc-riskId", "value": "acsc-p-001" },
|
|
100
|
+
{ "key": "jarkas-layer", "value": "L4 Host" },
|
|
101
|
+
{ "key": "nemoclaw-mitigated", "value": "true" },
|
|
102
|
+
{ "key": "nemoclaw-control", "value": "Layer 2 Filesystem: host FS read-only outside /sandbox. Layer 3 Process: Landlock prevents path traversal." },
|
|
103
|
+
{ "key": "deploymentContext", "value": "General" },
|
|
104
|
+
{ "key": "priority", "value": "low" }
|
|
267
105
|
]
|
|
268
106
|
},
|
|
269
107
|
{
|
|
@@ -271,75 +109,28 @@
|
|
|
271
109
|
"numericId": 4,
|
|
272
110
|
"threatSource": "Prompt injection establishing a cron job",
|
|
273
111
|
"prerequisites": "Cron enabled; attacker achieves successful prompt injection",
|
|
274
|
-
"threatAction": "Schedule recurring autonomous job inside the sandbox
|
|
112
|
+
"threatAction": "Schedule recurring autonomous job inside the sandbox — persists across conversation resets, executes without user confirmation",
|
|
275
113
|
"threatImpact": "Persistent autonomous execution within sandbox boundary; exfiltration limited to allowlisted endpoints",
|
|
276
|
-
"impactedGoal": [
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
],
|
|
280
|
-
"impactedAssets": [
|
|
281
|
-
"Cron scheduler",
|
|
282
|
-
"In-sandbox data and tool access"
|
|
283
|
-
],
|
|
284
|
-
"statement": "Cron persistence is unchanged by NeMo Claw. Scheduled jobs run inside the sandbox \u2014 the mechanism works, blast radius is contained, but the persistence itself is not prevented. An attacker who achieves one successful injection can establish a recurring presence that the user cannot see without the Approval TUI. This is NeMo Claw's most important residual risk at L1 Orchestration.",
|
|
114
|
+
"impactedGoal": ["Integrity", "Confidentiality"],
|
|
115
|
+
"impactedAssets": ["Cron scheduler", "In-sandbox data and tool access"],
|
|
116
|
+
"statement": "Cron persistence is unchanged by NeMo Claw. Scheduled jobs run inside the sandbox — the mechanism works, blast radius is contained, but the persistence itself is not prevented. An attacker who achieves one successful injection can establish a recurring presence that the user cannot see without the Approval TUI. This is NeMo Claw's most important residual risk at L1 Orchestration.",
|
|
285
117
|
"status": "identified",
|
|
286
118
|
"metadata": [
|
|
287
|
-
{
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
},
|
|
303
|
-
{
|
|
304
|
-
"key": "severity-delta",
|
|
305
|
-
"value": "unchanged"
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
"key": "atlas-techniqueId",
|
|
309
|
-
"value": "AML.T0080"
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
"key": "atlas-techniqueName",
|
|
313
|
-
"value": "Establish Persistence via Agent"
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
"key": "atlas-tactic",
|
|
317
|
-
"value": "Persistence"
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
"key": "acsc-riskFamily",
|
|
321
|
-
"value": "behaviour"
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
"key": "acsc-riskId",
|
|
325
|
-
"value": "acsc-b-003"
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
"key": "nemoclaw-mitigated",
|
|
329
|
-
"value": "false"
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
"key": "nemoclaw-control",
|
|
333
|
-
"value": "None \u2014 cron operates within sandbox boundary. Approval TUI provides visibility but not prevention."
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
"key": "deploymentContext",
|
|
337
|
-
"value": "General"
|
|
338
|
-
},
|
|
339
|
-
{
|
|
340
|
-
"key": "priority",
|
|
341
|
-
"value": "high"
|
|
342
|
-
}
|
|
119
|
+
{ "key": "aivss-metric", "value": "AA" },
|
|
120
|
+
{ "key": "aivss-subCategory", "value": "Autonomous Execution Control" },
|
|
121
|
+
{ "key": "aivss-severity", "value": "High" },
|
|
122
|
+
{ "key": "baseline-severity", "value": "High" },
|
|
123
|
+
{ "key": "severity-delta", "value": "unchanged" },
|
|
124
|
+
{ "key": "atlas-techniqueId", "value": "AML.T0080" },
|
|
125
|
+
{ "key": "atlas-techniqueName", "value": "Establish Persistence via Agent" },
|
|
126
|
+
{ "key": "atlas-tactic", "value": "Persistence" },
|
|
127
|
+
{ "key": "acsc-riskFamily", "value": "behaviour" },
|
|
128
|
+
{ "key": "acsc-riskId", "value": "acsc-b-003" },
|
|
129
|
+
{ "key": "jarkas-layer", "value": "L1 Orchestration" },
|
|
130
|
+
{ "key": "nemoclaw-mitigated", "value": "false" },
|
|
131
|
+
{ "key": "nemoclaw-control", "value": "None — cron operates within sandbox boundary. Approval TUI provides visibility but not prevention." },
|
|
132
|
+
{ "key": "deploymentContext", "value": "General" },
|
|
133
|
+
{ "key": "priority", "value": "high" }
|
|
343
134
|
]
|
|
344
135
|
},
|
|
345
136
|
{
|
|
@@ -347,74 +138,28 @@
|
|
|
347
138
|
"numericId": 5,
|
|
348
139
|
"threatSource": "Compromised device with personal and corporate channels connected",
|
|
349
140
|
"prerequisites": "Slack or Teams enabled; attacker achieves prompt injection or device access",
|
|
350
|
-
"threatAction": "Use assistant's channel access to send messages or extract data
|
|
141
|
+
"threatAction": "Use assistant's channel access to send messages or extract data — network allowlist limits egress; Privacy Router strips PII in transit",
|
|
351
142
|
"threatImpact": "Reduced: network egress allowlist limits which endpoints can be reached; PII stripped by Privacy Router before external model calls",
|
|
352
|
-
"impactedGoal": [
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
"impactedAssets": [
|
|
356
|
-
"Corporate channel messages (partially mitigated)",
|
|
357
|
-
"User identity in transit"
|
|
358
|
-
],
|
|
359
|
-
"statement": "NeMo Claw's egress allowlist and Privacy Router partially mitigate the personal-to-corporate pivot. Outbound data cannot reach arbitrary endpoints \u2014 only allowlisted hosts. PII is stripped before external model API calls. However, the channel access itself remains: if Slack and iMessage are both enabled, the assistant can still bridge between them within the sandbox. The residual risk is lower but not eliminated.",
|
|
143
|
+
"impactedGoal": ["Confidentiality"],
|
|
144
|
+
"impactedAssets": ["Corporate channel messages (partially mitigated)", "User identity in transit"],
|
|
145
|
+
"statement": "NeMo Claw's egress allowlist and Privacy Router partially mitigate the personal-to-corporate pivot. Outbound data cannot reach arbitrary endpoints — only allowlisted hosts. PII is stripped before external model API calls. However, the channel access itself remains: if Slack and iMessage are both enabled, the assistant can still bridge between them within the sandbox. The residual risk is lower but not eliminated.",
|
|
360
146
|
"status": "identified",
|
|
361
147
|
"metadata": [
|
|
362
|
-
{
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
},
|
|
370
|
-
{
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
},
|
|
374
|
-
{
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
},
|
|
378
|
-
{
|
|
379
|
-
"key": "severity-delta",
|
|
380
|
-
"value": "reduced"
|
|
381
|
-
},
|
|
382
|
-
{
|
|
383
|
-
"key": "atlas-techniqueId",
|
|
384
|
-
"value": "AML.T0043"
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
"key": "atlas-techniqueName",
|
|
388
|
-
"value": "Craft Adversarial Data"
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
"key": "atlas-tactic",
|
|
392
|
-
"value": "Exfiltration"
|
|
393
|
-
},
|
|
394
|
-
{
|
|
395
|
-
"key": "acsc-riskFamily",
|
|
396
|
-
"value": "structural"
|
|
397
|
-
},
|
|
398
|
-
{
|
|
399
|
-
"key": "acsc-riskId",
|
|
400
|
-
"value": "acsc-s-002"
|
|
401
|
-
},
|
|
402
|
-
{
|
|
403
|
-
"key": "nemoclaw-mitigated",
|
|
404
|
-
"value": "partial"
|
|
405
|
-
},
|
|
406
|
-
{
|
|
407
|
-
"key": "nemoclaw-control",
|
|
408
|
-
"value": "Layer 1 Network: egress allowlist. Layer 4 Inference: Privacy Router strips PII before external model calls."
|
|
409
|
-
},
|
|
410
|
-
{
|
|
411
|
-
"key": "deploymentContext",
|
|
412
|
-
"value": "General"
|
|
413
|
-
},
|
|
414
|
-
{
|
|
415
|
-
"key": "priority",
|
|
416
|
-
"value": "medium"
|
|
417
|
-
}
|
|
148
|
+
{ "key": "aivss-metric", "value": "EI" },
|
|
149
|
+
{ "key": "aivss-subCategory", "value": "Cross-Context Data Leakage" },
|
|
150
|
+
{ "key": "aivss-severity", "value": "Medium" },
|
|
151
|
+
{ "key": "baseline-severity", "value": "High" },
|
|
152
|
+
{ "key": "severity-delta", "value": "reduced" },
|
|
153
|
+
{ "key": "atlas-techniqueId", "value": "AML.T0043" },
|
|
154
|
+
{ "key": "atlas-techniqueName", "value": "Craft Adversarial Data" },
|
|
155
|
+
{ "key": "atlas-tactic", "value": "Exfiltration" },
|
|
156
|
+
{ "key": "acsc-riskFamily", "value": "structural" },
|
|
157
|
+
{ "key": "acsc-riskId", "value": "acsc-s-002" },
|
|
158
|
+
{ "key": "jarkas-layer", "value": "L2 Application" },
|
|
159
|
+
{ "key": "nemoclaw-mitigated", "value": "partial" },
|
|
160
|
+
{ "key": "nemoclaw-control", "value": "Layer 1 Network: egress allowlist. Layer 4 Inference: Privacy Router strips PII before external model calls." },
|
|
161
|
+
{ "key": "deploymentContext", "value": "General" },
|
|
162
|
+
{ "key": "priority", "value": "medium" }
|
|
418
163
|
]
|
|
419
164
|
}
|
|
420
165
|
],
|
|
@@ -422,54 +167,34 @@
|
|
|
422
167
|
{
|
|
423
168
|
"id": "m-001",
|
|
424
169
|
"numericId": 1,
|
|
425
|
-
"content": "[NeMo Claw
|
|
170
|
+
"content": "[NeMo Claw — Residual] Per-channel trust tiers still required. NeMo Claw does not prevent prompt injection — it confines its blast radius. Implement message authenticity checks or per-sender trust scoring at the application layer."
|
|
426
171
|
},
|
|
427
172
|
{
|
|
428
173
|
"id": "m-002",
|
|
429
174
|
"numericId": 2,
|
|
430
|
-
"content": "[NeMo Claw
|
|
175
|
+
"content": "[NeMo Claw — Mitigated] Filesystem isolation: skills confined to /sandbox. Malicious skill exfiltration paths to host credentials and arbitrary network endpoints are blocked by NeMo Claw Layer 2 + Layer 1."
|
|
431
176
|
},
|
|
432
177
|
{
|
|
433
178
|
"id": "m-003",
|
|
434
179
|
"numericId": 3,
|
|
435
|
-
"content": "[NeMo Claw
|
|
180
|
+
"content": "[NeMo Claw — Mitigated] Host credential access blocked. openclaw.json is not readable from within the sandbox. Secrets passed as env vars remain at-risk — prefer in-sandbox secret management."
|
|
436
181
|
},
|
|
437
182
|
{
|
|
438
183
|
"id": "m-004",
|
|
439
184
|
"numericId": 4,
|
|
440
|
-
"content": "[NeMo Claw
|
|
185
|
+
"content": "[NeMo Claw — Residual] Cron persistence remains possible inside the sandbox. Enable the Approval TUI for visibility into all scheduled jobs. Require explicit re-confirmation for cron jobs older than 7 days."
|
|
441
186
|
},
|
|
442
187
|
{
|
|
443
188
|
"id": "m-005",
|
|
444
189
|
"numericId": 5,
|
|
445
|
-
"content": "[NeMo Claw
|
|
190
|
+
"content": "[NeMo Claw — Partial] Egress allowlist + Privacy Router reduce cross-context leakage. Separate corporate and personal channel profiles with explicit context-switch confirmation for cross-boundary tool calls."
|
|
446
191
|
}
|
|
447
192
|
],
|
|
448
193
|
"mitigationLinks": [
|
|
449
|
-
{
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
}
|
|
454
|
-
{
|
|
455
|
-
"mitigationId": "m-002",
|
|
456
|
-
"linkedId": "t-002",
|
|
457
|
-
"type": "Threat"
|
|
458
|
-
},
|
|
459
|
-
{
|
|
460
|
-
"mitigationId": "m-003",
|
|
461
|
-
"linkedId": "t-003",
|
|
462
|
-
"type": "Threat"
|
|
463
|
-
},
|
|
464
|
-
{
|
|
465
|
-
"mitigationId": "m-004",
|
|
466
|
-
"linkedId": "t-004",
|
|
467
|
-
"type": "Threat"
|
|
468
|
-
},
|
|
469
|
-
{
|
|
470
|
-
"mitigationId": "m-005",
|
|
471
|
-
"linkedId": "t-005",
|
|
472
|
-
"type": "Threat"
|
|
473
|
-
}
|
|
194
|
+
{ "mitigationId": "m-001", "linkedId": "t-001", "type": "Threat" },
|
|
195
|
+
{ "mitigationId": "m-002", "linkedId": "t-002", "type": "Threat" },
|
|
196
|
+
{ "mitigationId": "m-003", "linkedId": "t-003", "type": "Threat" },
|
|
197
|
+
{ "mitigationId": "m-004", "linkedId": "t-004", "type": "Threat" },
|
|
198
|
+
{ "mitigationId": "m-005", "linkedId": "t-005", "type": "Threat" }
|
|
474
199
|
]
|
|
475
200
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Deterministic heuristic severity scorer.
|
|
3
3
|
*
|
|
4
4
|
* Produces per-sub-category SeverityLabels from AgentDefinition fields alone —
|
|
5
|
-
* no LLM call required. Used by the --
|
|
5
|
+
* no LLM call required. Used by the --no-provider CLI path so assessments carry
|
|
6
6
|
* meaningful signal rather than a flat "Medium" for every finding.
|
|
7
7
|
*
|
|
8
8
|
* Calibration principle: High requires 2+ independent risk signals. A single
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Deterministic heuristic severity scorer.
|
|
3
3
|
*
|
|
4
4
|
* Produces per-sub-category SeverityLabels from AgentDefinition fields alone —
|
|
5
|
-
* no LLM call required. Used by the --
|
|
5
|
+
* no LLM call required. Used by the --no-provider CLI path so assessments carry
|
|
6
6
|
* meaningful signal rather than a flat "Medium" for every finding.
|
|
7
7
|
*
|
|
8
8
|
* Calibration principle: High requires 2+ independent risk signals. A single
|