Back to skill

Security audit

SEEK

Security checks for vulnerabilities and agentic risk

Overview

This skill has a coherent purpose, but it needs Review because its setup instructions can expose an API key and it persistently changes OpenClaw configuration.

Install only if you are comfortable routing OpenClaw requests through OpenRouter and allowing this skill to rewrite OpenClaw model configuration. Do not run `echo $OPENROUTER_API_KEY`; use a presence-only check instead, avoid storing keys in files that may be shared, and prefer a pinned installer/dependency set with a backup of `~/.openclaw/openclaw.json` before running config-changing commands.

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

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:16
Finding

API Key Disclosure Through Terminal Output

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:16 Vulnerability Type: Sensitive credential exposure through command output Risk Level: Medium

Vulnerable Code

markdown
1. **OPENROUTER_API_KEY is set.** Check with `echo $OPENROUTER_API_KEY`. If empty, the user must get a free key at https://openrouter.ai/keys and set it:

Technical Analysis

The Skill instructs the Agent to run echo $OPENROUTER_API_KEY to determine whether the OpenRouter credential is configured. This prints the complete secret to standard output.

Command output may be captured in Agent conversation history, execution logs, terminal scrollback, telemetry, screenshots, or debugging records. Checking whether an environment variable exists does not require revealing its value, so this behavior exceeds the minimum disclosure necessary for the declared functionality.

The implementation itself sends the key only to OpenRouter API endpoints as a bearer credential. The vulnerability is specifically the instruction to expose the complete key locally through terminal output.

Attack Path

  1. A user or Agent follows the prerequisite instructions in SKILL.md.
  2. The command echo $OPENROUTER_API_KEY is executed.
  3. The shell expands the variable and writes the complete API key to standard output.
  4. The output is retained in an Agent transcript, execution log, telemetry record, terminal history capture, or screenshot.
  5. An attacker with access to that retained output extracts the key.
  6. The attacker uses the credential to authenticate to OpenRouter within the permissions and limits assigned to the key.

Impact Assessment

Disclosure grants the attacker the same OpenRouter API access as the exposed key. The attacker may consume associated quota, invoke models, generate usage attributable to the victim, or access other API functionality authorized for that credential.

This does not directly grant local operating-system priv ...[truncated 189 chars]

Remediation
View remediation

Remediation Suggestions

Replace the value-printing command with a presence-only test:

bash
if test -n "${OPENROUTER_API_KEY:-}"; then
    echo "OPENROUTER_API_KEY is set"
else
    echo "OPENROUTER_API_KEY is not set"
fi

Additional hardening measures:

  • Never print, log, or include the complete credential in Agent responses.
  • If a key identifier must be displayed, use a short masked representation and avoid exposing enough characters to aid recovery.
  • Recommend revoking and rotating any key that has already appeared in transcripts or logs.
  • Document that command output and Agent transcripts should be treated as potentially persistent records.
  • Prefer environment-based secret injection or a dedicated secret manager over plaintext storage in ~/.openclaw/openclaw.json.

T08 · Insecure Dependencies

Warning
Location
README.md:52
Finding

Mutable Third-Party Installer Executed Through an Unpinned npx Package

Content
View full analysis

Vulnerability Details

File Locations: README.md:52 and skill.json:40 Vulnerability Type: Unpinned executable dependency and inconsistent package identifier Risk Level: Medium

Vulnerable Code

README.md:52:

bash
npx clawhub@latest install free-ride

skill.json:40:

json
"install": "npx clawhub@latest install freeride && cd ~/.openclaw/workspace/skills/free-ride && pip install -e ."

Technical Analysis

The installation procedure uses npx clawhub@latest, causing the package registry to resolve, download, and execute whichever release is tagged latest at installation time. The executed code is therefore mutable and may differ from the version reviewed during this audit.

No exact package version or integrity hash is specified. Consequently, compromise of the package publisher, registry account, dependency chain, or a future malicious release could turn the documented installation step into arbitrary code execution.

The Skill identifier is also inconsistent: the README installs free-ride, while skill.json installs freeride. This discrepancy can cause installation failure or resolution of a different artifact, depending on the installer’s naming and alias rules.

This is not evidence that the currently referenced package is malicious. It is a supply-chain weakness because the effective installer payload can change after review.

Attack Path

  1. An attacker compromises the clawhub publisher account, release pipeline, registry artifact, or one of its executable dependencies.
  2. The attacker publishes a malicious release and assigns it the latest distribution tag.
  3. A user follows the documented FreeRide installation command.
  4. npx resolves and downloads the attacker-controlled release.
  5. The package CLI or applicable lifecycle code executes with the installing user’s privileges.
  6. The malicious release can access files, environment variabl ...[truncated 808 chars]
Remediation
View remediation

Remediation Suggestions

  • Replace @latest with an exact, reviewed version:

    bash
    npx clawhub@<reviewed-version> install free-ride
    
  • Use package-manager integrity verification or a published cryptographic checksum where supported.

  • Standardize the Skill identifier across README.md, skill.json, _meta.json, and installation paths. Based on the audited metadata, resolve whether the canonical identifier is free-ride or freeride.

  • Document the expected package version and verify it before execution.

  • Avoid running installation commands with sudo or another elevated account.

  • Pin Python dependencies to reviewed versions and use hashes or a lockfile for reproducible installation.

  • Periodically review pinned versions and update them through an explicit security review rather than a mutable distribution tag.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
Findings (21)

Tainted flow: 'headers' from os.environ.get (line 68, credential/environment) → requests.get (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · main.py (reported line 74)May include surrounding context.

python
}

    try:
        response = requests.get(OPENROUTER_API_URL, headers=headers, timeout=30)
        response.raise_for_status()
        data = response.json()
        return data.get("data", [])

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 5)May include surrounding context.

md
### Stop paying for AI. Start riding free.

[![ClawHub Downloads](https://api.clawhub-badge.xyz/badge/free-ride/downloads.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Current Installs](https://api.clawhub-badge.xyz/badge/free-ride/installs-current.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Stars](https://api.clawhub-badge.xyz/badge/free-ride/stars.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Version](https://api.clawhub-badge.xyz/badge/free-ride/version.svg)](https://clawhub.ai/skills/free-ride)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 6)May include surrounding context.

md
### Stop paying for AI. Start riding free.

[![ClawHub Downloads](https://api.clawhub-badge.xyz/badge/free-ride/downloads.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Current Installs](https://api.clawhub-badge.xyz/badge/free-ride/installs-current.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Stars](https://api.clawhub-badge.xyz/badge/free-ride/stars.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Version](https://api.clawhub-badge.xyz/badge/free-ride/version.svg)](https://clawhub.ai/skills/free-ride)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 7)May include surrounding context.

md
### Stop paying for AI. Start riding free.

[![ClawHub Downloads](https://api.clawhub-badge.xyz/badge/free-ride/downloads.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Current Installs](https://api.clawhub-badge.xyz/badge/free-ride/installs-current.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Stars](https://api.clawhub-badge.xyz/badge/free-ride/stars.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Version](https://api.clawhub-badge.xyz/badge/free-ride/version.svg)](https://clawhub.ai/skills/free-ride)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 8)May include surrounding context.

md
### Stop paying for AI. Start riding free.

[![ClawHub Downloads](https://api.clawhub-badge.xyz/badge/free-ride/downloads.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Current Installs](https://api.clawhub-badge.xyz/badge/free-ride/installs-current.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Stars](https://api.clawhub-badge.xyz/badge/free-ride/stars.svg)](https://clawhub.ai/skills/free-ride)
[![ClawHub Version](https://api.clawhub-badge.xyz/badge/free-ride/version.svg)](https://clawhub.ai/skills/free-ride)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The README advertises automatic configuration changes, fallback reconfiguration, and a watcher daemon that continuously monitors and rotates models, but it does not clearly warn users that local configuration files will be modified and that a background process may persist. In a developer-tooling context, silent config mutation and daemonization can lead to unintended persistence, operational confusion, and reduced ability to detect abusive behavior.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The README instructs users to execute npx clawhub@latest install free-ride, which pulls and runs the latest package version at install time without pinning to a known-good release. This creates a supply-chain risk: a compromised or malicious future release of clawhub could execute arbitrary code on the user's machine during installation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README suggests storing OPENROUTER_API_KEY directly in OpenClaw config without discussing credential sensitivity, file permissions, or safer secret storage. If that config is readable by other local users, checked into source control, or exposed via tooling, the API key could be stolen and abused.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill instructs access to environment variables, network services, and local file/config modification, but it does not declare any explicit tool scope or permission boundaries. That makes the skill harder to review and increases the chance an agent will perform sensitive actions implicitly, including reading secrets and changing persistent configuration without clear authorization constraints.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger language is broad enough to activate on common requests about AI cost reduction, model switching, or rate limits, even when the user did not intend to reconfigure OpenClaw. In this skill, overbroad activation is more dangerous because the prescribed workflow performs persistent config changes and service restarts, so accidental invocation can have real operational impact.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill directs modification of ~/.openclaw/openclaw.json and a gateway restart as part of the normal workflow, but it does not require an explicit warning or confirmation about persistent system changes, possible service interruption, or model-routing effects. This can surprise users, disrupt active sessions, and overwrite expected behavior in a shared or production-like environment.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manifest describes ranking free OpenRouter models, configuring fallbacks, and updating openclaw.json. This code additionally searches for credentials in process environment variables and in the OpenClaw config's env section, which is a credential-access capability not explicitly justified by the stated purpose.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The optional setup_auth path modifies authentication/profile configuration in addition to model selection, expanding the scope of changes this skill can make to the user's OpenClaw environment. That is not overtly malicious, but it can silently alter how future requests authenticate and may create persistent account-related state the user did not fully intend.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill writes directly to the user's OpenClaw configuration file, changing primary and fallback models without backup, locking, or interactive confirmation. In skill context this is more dangerous because the core purpose is to rewrite a trusted local config, so mistakes or maliciously influenced model choices can persistently alter user behavior and availability.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest requires an OPENROUTER_API_KEY for a third-party service but does not provide a clear user-facing warning that prompts and related data will be transmitted externally. In this skill's context, the tool actively routes AI requests to OpenRouter models and edits OpenClaw configuration, so users may unknowingly send sensitive workspace content to an external provider under fallback or auto-switch behavior.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The install command invokes npx clawhub@latest, which fetches and executes the latest published package version at install time rather than a reviewed, fixed release. This creates a supply-chain risk: if the package is compromised or a breaking/malicious update is published, users installing the skill may execute attacker-controlled code automatically.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · watcher.py (reported line 98)May include surrounding context.

python
}

    try:
        response = requests.post(
            OPENROUTER_CHAT_URL,
            headers=headers,
            json=payload,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code writes updated model settings to the OpenClaw configuration automatically after testing and selecting a replacement model. Although there are console status messages, there is no explicit user confirmation before changing persistent configuration, and the module docstring does not clearly warn that the watcher will modify config state on its own.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The code sends the user's OpenRouter API key over the network as part of normal API use, but this file provides no explicit warning at the point of action that the credential will be transmitted to OpenRouter. In this skill's context the destination is expected, so the danger is limited, but lack of explicit notice can still reduce informed consent for credential use.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency is specified as requests>=2.31.0, which allows any future version and does not guarantee reproducible or reviewed installs. This creates supply-chain risk because different environments may resolve to different releases, including versions with regressions or newly introduced vulnerabilities.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
requests>=2.31.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
89% confidence
Finding

Because requests is not pinned, it is impossible to verify from this manifest whether the installed version is affected by known advisories. In a skill that may make network requests to OpenRouter or related services, using an implicitly resolved vulnerable version could expose credentials, request data, or transport security expectations depending on the resolved release.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.