Back to skill

Security audit

Yeeth Claw

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent supply-chain security hook, but it persistently changes Claude Code behavior and rewrites Claude settings automatically without enough user control or guardrails.

Review this before installing because it changes Claude Code's persistent hook configuration and can block future Bash package installs. Install only if you are comfortable with automatic ~/.claude/settings.json changes, outbound package registry lookups, and optional Argus submission of blocked package metadata. Prefer making a settings backup first and use a fixed HTTPS Argus endpoint with a narrowly scoped key.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
hooks/openclaw/hook.py:35
Finding

Package Installation Checks Can Be Bypassed Through Unsupported or Incorrectly Parsed Syntax

Content
View full analysis
list[str]: """Extract package names from an install command, ignoring flags and local paths.""" # Strip the install verb and everything before it cmd = re.sub(r'^.*?(?:install|add|i)\s+', '', command.strip(), count=1, flags=re.IGNORECASE) tokens = cmd.split() packages = [] for tok in tokens: if tok.startswith('-'): # flag like -g, --save-dev continue if LOCAL_INSTALL_RE.search(tok): # local path or URL continue # Strip version specifiers: pkg@1.2.3, pkg==1.2.3, pkg>=1.0 name = re.split(r'[@=><~^]', tok)[0].strip() if name: packages.append(name) return packages ``` The resulting fail-open behavior occurs at `hooks/openclaw/hook.py:134-135`: ```python if not hits: sys.exit(0) ``` ### Technical Analysis The hook attempts to identify dependencies using regular expressions and whitespace tokenization rather than parsing each package manager's command grammar. For npm, the version-removal expression splits tokens at every `@` character: ```python name = re.split(r'[@=><~^]', tok)[0].strip() ``` A scoped npm dependency such as `@scope/package` begins with `@` ...[truncated 2317 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
hooks/openclaw/lib/argus.py:27
Finding

Unvalidated Argus Endpoint Can Disclose the Bearer API Key and Enable SSRF

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

The documented behavior does not match the reported implementation, especially around blocking criteria and how install-script presence is used. In a security control, such mismatches are dangerous because operators may rely on stated guarantees or thresholds that are not actually enforced, leading to incorrect trust decisions, unexpected blocking, or silent gaps in protection.

Content

No source excerpt is available for this finding.

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · hooks/openclaw/install.sh (reported line 4)May include surrounding context.

sh
#!/usr/bin/env bash
# OpenClaw install script
# Copies the hook to ~/.claude/hooks/openclaw and merges settings into
# ~/.claude/settings.json (or ~/.claude/settings.local.json).

set -euo pipefail

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · hooks/openclaw/install.sh (reported line 4)May include surrounding context.

sh
#!/usr/bin/env bash
# OpenClaw install script
# Copies the hook to ~/.claude/hooks/openclaw and merges settings into
# ~/.claude/settings.json (or ~/.claude/settings.local.json).

set -euo pipefail

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

The script assigns the Claude settings path and later uses it to modify ~/.claude/settings.json automatically. Access to agent configuration is security-relevant in this skill context because changes to Claude hook settings can affect future tool interception and execution behavior across the user's environment.

Content

Scanner excerpt · hooks/openclaw/install.sh (reported line 9)May include surrounding context.

sh
set -euo pipefail

HOOK_DIR="$HOME/.claude/hooks/openclaw"
SETTINGS="$HOME/.claude/settings.json"

echo "Installing OpenClaw to $HOOK_DIR..."
mkdir -p "$HOOK_DIR/lib"

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill invokes a Python hook with shell, environment, and potential network capabilities but does not declare any explicit tool scope or permissions boundaries. That omission reduces transparency and reviewability, making it harder for users to understand that package names, command context, and environment-derived secrets may be accessed or transmitted by the hook.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill can submit blocked package information to an external Argus API, but the user-facing documentation does not clearly warn about outbound data sharing or its privacy implications. Even if only package metadata is sent, this can disclose intended dependencies, project direction, or internal package names to a third party, which is sensitive in some environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The installer automatically rewrites the user's Claude settings file in place when jq is present, but it does not require explicit confirmation or create a backup before doing so. This can unexpectedly alter agent hook behavior or corrupt configuration if the merge is wrong, which is particularly sensitive because the file controls Claude Code execution hooks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This function sends package metadata to an external Argus API and includes an Authorization bearer token, but the code provides no confirmation prompt, logging, or user-visible notice at the point of transmission. The docstrings describe the behavior for developers, but they do not serve as a clear warning to end users that package-related data will be sent off-system.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The helper performs outbound HTTP requests to third-party package registries using urllib, which transmits the requested package name and client metadata such as the User-Agent. In this file, there is no confirmation prompt, user-facing log/print, or inline warning comment/docstring near the network operation describing that external registry lookups will occur.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.