You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 62137f3
Browse filesBrowse the repository at this point in the historyBrowse files
# Stream findings as JSONL (one JSON object per line)
108
108
hound scan --format jsonl | jq '.severity'
109
109
110
-
# List all 91 rules
110
+
# List all 95 rules
111
111
hound scan --list-rules
112
112
113
113
# Interactive HTML report (self-contained, open in browser)
@@ -449,9 +449,9 @@ Targets OpenClaw `SKILL.md` files and any markdown files inside `skills/` direct
449
449
450
450
> **Scanning OpenClaw skills:** Run `npx hound scan --dir ./skills` or add `**/skills/**/*.md` and `**/SKILL.md` to your `include` config. ContextHound automatically emits skill files as `code-block` for multi-line rule analysis.
451
451
452
-
### K. Agentic (AGT) — v1.3
452
+
### K. Agentic (AGT) — v1.3 / v1.9
453
453
454
-
Targets risks specific to multi-step agentic systems: unbounded execution loops, unvalidated memory writes, user input leaking into agent planning, and inter-agent trust boundary violations.
454
+
Targets risks specific to multi-step agentic systems: unbounded execution loops, unvalidated memory writes, user input leaking into agent planning, inter-agent trust boundary violations, and OWASP Agentic AI Security Issues (ASI) gaps.
455
455
456
456
| ID | Severity | Description |
457
457
|----|----------|-------------|
@@ -462,6 +462,10 @@ Targets risks specific to multi-step agentic systems: unbounded execution loops,
462
462
| AGT-005 | Critical | Agent trusts claimed identity without cryptographic verification — trust decision based on `agentId`, `sender`, `source`, or `from_agent` field without HMAC, JWT, or shared-secret verification |
463
463
| AGT-006 | High | Raw agent output chained as input to another agent without validation — `.run()`, `.invoke()`, or `.generate()` called with another agent's `.output`/`.content`/`.result` directly as the argument |
464
464
| AGT-007 | Critical | Agent self-modification — agent rewrites its own `system_prompt`, `instructions`, or `tools` list with LLM-generated content at runtime |
465
+
| AGT-008 | Critical | ASI03 — Agent calls `assumeRole`, `grantAccess`, or `setPermissions` with a value derived from LLM output; privilege escalation via prompt injection |
466
+
| AGT-009 | High | ASI04 — Agent loads a tool or plugin at runtime from a variable path or dynamic import, enabling supply chain substitution |
467
+
| AGT-010 | High | ASI07 — Raw agent output forwarded to another agent via `send`/`route`/`dispatch` without HMAC, JWT signing, or schema validation |
468
+
| AGT-011 | High | ASI08 — Agent plan step error caught silently (no rethrow, no error-state flag); downstream steps proceed on bad or incomplete state |
title: 'Agent assumes IAM role or grants permissions based on LLM output (ASI03)',
177
+
severity: 'critical',
178
+
confidence: 'medium',
179
+
category: 'agentic',
180
+
remediation:
181
+
'Never call IAM, RBAC, or credential-assignment functions with values derived from LLM output. A prompt injection or jailbreak can escalate the agent\'s own privileges by inducing it to call assumeRole, grantAccess, or setPermissions with an attacker-chosen role ARN or permission set. Resolve permitted roles from a static allowlist in your application code, never from model responses.',
title: 'Agent loads tool or plugin from variable path or external URL at runtime (ASI04)',
209
+
severity: 'high',
210
+
confidence: 'medium',
211
+
category: 'agentic',
212
+
remediation:
213
+
'Never load tools, plugins, or modules at runtime from user-controlled values, LLM-generated paths, or dynamic imports without an explicit allowlist. An attacker who can influence the loaded path or URL can substitute a malicious binary or script for a legitimate tool. Resolve tool implementations from a trusted, static registry at startup.',
214
+
check(prompt: ExtractedPrompt): RuleMatch[]{
215
+
if(prompt.kind!=='code-block')return[];
216
+
217
+
// Detect: agent.loadTool/addTool/loadPlugin(variable) or dynamic import(variableNamedWithTool/Plugin/Url)
title: 'Raw agent output forwarded to another agent without trust boundary validation (ASI07)',
226
+
severity: 'high',
227
+
confidence: 'medium',
228
+
category: 'agentic',
229
+
remediation:
230
+
'Never pass one agent\'s raw output directly as the instruction payload to another agent or message bus without signing or schema validation. In multi-agent pipelines, a compromised upstream agent can inject instructions into every downstream agent that receives its output. Validate, sanitise, and schema-check inter-agent messages at each hop.',
231
+
check(prompt: ExtractedPrompt): RuleMatch[]{
232
+
if(prompt.kind!=='code-block')return[];
233
+
consttext=prompt.text;
234
+
235
+
// Suppress if message signing / cryptographic verification is present
title: 'Agent step error silently swallowed — downstream steps proceed on bad state (ASI08)',
248
+
severity: 'high',
249
+
confidence: 'medium',
250
+
category: 'agentic',
251
+
remediation:
252
+
'Never swallow exceptions from agent plan steps without halting or flagging the run. Silently catching errors allows subsequent steps to execute against incomplete or corrupted state, which can compound failures or be exploited to skip safety checks. Re-throw, reject the promise, or set an explicit error/aborted state that downstream steps check before proceeding.',
0 commit comments