Back to skill

Security audit

Openclaw Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed transaction-safety checker, but it automatically installs unpinned Python packages while acting as a high-trust blockchain security gate.

Install only in an isolated virtual environment or container, review and pin the Sigui SDK and rich versions yourself, configure SIGUI_API_URL only for a trusted endpoint, and never use demo results or unverified oracle responses to authorize real funds.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
evaluate.py:44
Finding

Automatic Installation and Execution of Inadequately Pinned Third-Party Dependencies

Content
View full analysis
bool: """ Attempt to install sigui-sdk automatically if not found. Returns True if SDK is available after the attempt. """ try: from sigui import SiguiClient # noqa: F401 return True except ImportError: pass print("📦 sigui-sdk not found. Installing automatically...", file=sys.stderr) try: subprocess.check_call( [sys.executable, "-m", "pip", "install", "sigui-sdk>=0.3.1", "--quiet"], timeout=120, ) # Verify import works after install result = subprocess.run( [sys.executable, "-c", "from sigui import SiguiClient; print('ok')"], capture_output=True, text=True, timeout=10, ) if result.returncode == 0: print("✅ sigui-sdk installed successfully.", file=sys.stderr) return True else: print(f"❌ sigui-sdk installed but import failed: {result.stderr}", file=sys.stderr) return False except subprocess.TimeoutExpired: print("❌ Auto-install timed out. Run: pip install sigui-sdk>=0.3.1", file=sys.stderr) return False except Exception as e: print(f"❌ Auto-install failed: {e}", file=sys.stderr) print(" Run manually: pip install sigui-sdk>=0.3.1", file=sys.stderr) return False SIGUI_AVAILABLE = _auto_install_sdk() ``` `install.sh:91-106`: ```bash # ── Install sigui-sdk ───────────────────────────────────────────────────────── if $PYTHON -c "from sigui import SiguiClient" &>/dev/null 2>&1; then SDK_VER=$($PYTHON -c "import sigui; print(getattr(sigui, '__version__', 'unknown'))" 2>/dev/nu ...[truncated 3354 chars]
Remediation
View remediation
", "rich==", ] ``` Update versions through a controlled review and testing process. 3. **Use hash-verified dependency locking** - Generate a lock or requirements file containing hashes. - Install with hash enforcement, such as: ```bash python -m pip install --require-hashes -r requirements.lock ``` 4. **Restrict dependency sources** - Configure an explicitly trusted package index. - Avoid untrusted extra indexes and review organization-wide `pip` configuration that could enable dependency confusion. - For higher-assurance environments, mirror reviewed artifacts into an internally controlled repository. 5. **Install in an isolated, least-privileged environment** - Use a dedicated virtual environment or hardened container. - Never run dependency installation as root or with unnecessary host permissions. - Prevent the skill process from accessing unrelated credentials and sensitive files. 6. **Add continuous supply-chain checks** - Scan locked dependencies for known vulnerabilities. - Review dependency ownership and release provenance before upgrades. - Consider signed artifacts or provenance attestations when supported by the distribution channel. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

This finding indicates the skill claims to perform transaction security analysis and produce ALLOW/BLOCK/ESCALATE decisions, but the available content shows no evidence that those security functions exist in the skill itself. In a blockchain safety workflow, a non-functional or overstated security gate is dangerous because agents may rely on it as a protective control and approve risky transactions based on false assurance.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

This finding indicates the skill claims to perform transaction security analysis and produce ALLOW/BLOCK/ESCALATE decisions, but the available content shows no evidence that those security functions exist in the skill itself. In a blockchain safety workflow, a non-functional or overstated security gate is dangerous because agents may rely on it as a protective control and approve risky transactions based on false assurance.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

A transaction-security evaluation skill should not need the ability to install arbitrary Python packages at runtime. In this context, the capability is more dangerous because the skill is positioned as a high-trust security gate for blockchain actions, so compromise of dependency installation could subvert the very control intended to protect transactions.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill invokes shell commands and depends on environment variables, but it declares no tool scope or permissions boundary. In an agent environment, this can cause the platform or user to underestimate the skill's ability to execute commands and access sensitive configuration, increasing the chance of unintended command execution or secret exposure.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module claims to be fail-closed by default, but startup behavior attempts to fetch and install code dynamically before failing. This discrepancy is dangerous because reviewers and operators may trust the documented safety posture while the actual implementation expands the attack surface and weakens operational guarantees.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · evaluate.py (reported line 19)May include surrounding context.

python
0 = ALLOW / ALLOW_WITH_CAP  (only if --confirmed)
    1 = BLOCK
    2 = ESCALATE (deep analysis required)
    3 = Error / SDK unavailable / No confirmation

Options:
    --amount        Required. Transaction amount in USDC

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
98% confidence
Finding

The script automatically invokes pip at runtime to install a package from an external repository. This gives the skill network-enabled code acquisition and execution behavior that is unnecessary for simple transaction evaluation, and if the package source, dependency chain, or environment is compromised, arbitrary code may execute under the agent's privileges.

Content

Scanner excerpt · evaluate.py (reported line 58)May include surrounding context.

python
print("📦 sigui-sdk not found. Installing automatically...", file=sys.stderr)
    try:
        subprocess.check_call(
            [sys.executable, "-m", "pip", "install", "sigui-sdk>=0.3.1", "--quiet"],
            timeout=120,
        )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
90% confidence
Finding

This subprocess executes a fresh Python interpreter after the auto-install step to verify that the imported package works. While the command itself is static, it compounds the risk introduced by runtime package installation by immediately executing code from the newly installed package in a separate process.

Content

Scanner excerpt · evaluate.py (reported line 63)May include surrounding context.

python
timeout=120,
        )
        # Verify import works after install
        result = subprocess.run(
            [sys.executable, "-c", "from sigui import SiguiClient; print('ok')"],
            capture_output=True, text=True, timeout=10,
        )

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The installer automatically runs pip install during skill installation without explicit user confirmation, which executes package download and installation logic from external repositories in the user's environment. Even if the package name appears legitimate, this creates a supply-chain risk and can modify the host environment unexpectedly, especially because the script auto-activates a local virtualenv if present and is intended to run automatically after installation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.