Back to skill

Security audit

Free Ride

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed OpenClaw/OpenRouter configuration helper, with some operational risks users should opt into knowingly.

Before installing, understand that FreeRide will modify your OpenClaw model configuration and use your OpenRouter API key to fetch and probe models. Only run the background watcher if you want continuous monitoring and automatic config rotation, and consider using pinned installer/dependency versions in security-sensitive environments.

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
skill.json:47
Finding
Unpinned Executable Dependencies Make Installation Non-Reproducible<![CDATA[ ## Vulnerability Details **File Location**: `skill.json:47`; supporting declarations in `README.md:48-52`, `SKILL.md:37-40`, `setup.py:9-11`, and `requirements.txt:1` **Vulnerability Type**: Unpinned third-party dependencies and use of a mutable `latest` package version **Risk Level**: Medium ### Vulnerable Code `skill.json:47`: ```json "install": "npx clawhub@latest install free-ride && cd ~/.openclaw/workspace/skills/free-ride && pip install -e ." ``` `README.md:48-52`: ```bash npx clawhub@latest install free-ride cd ~/.openclaw/workspace/skills/free-ride pip install -e . ``` `SKILL.md:37-40`: ```bash cd ~/.openclaw/workspace/skills/free-ride pip install -e . ``` `setup.py:9-11`: ```python install_requires=[ "requests>=2.31.0", ], ``` `requirements.txt:1`: ```text requests>=2.31.0 ``` ### Technical Analysis The documented installation process invokes `npx clawhub@latest`, which resolves and executes the release currently associated with the mutable `latest` tag. Consequently, the code executed during installation can change after this Skill version has been audited. The Python dependency specification also uses the open-ended constraint `requests>=2.31.0`. It permits any future compatible or incompatible release above the minimum version rather than limiting installation to a reviewed artifact. No lock file, exact version, or package hash is provided. These practices do not prove that the current dependencies are malicious. However, they create a supply-chain trust boundary in which future, unaudited package versions can be selected and executed or imported. Installation is therefore not reproducible from the audited project contents alone. ### Attack Path 1. An attacker compromises an upstream package publisher, registry account, distribution channel, or mutable release tag. 2. The attacker publishes a malicious future release that satisfies `clawhub@latest` or `requests>=2.31.0`. 3. A user follows the Skill's documented install ...[truncated 1330 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the mutable npm version with an exact, reviewed version: ```bash npx clawhub@<exact-version> install free-ride ``` 2. Pin Python dependencies to exact reviewed versions in both dependency declarations: ```python install_requires=[ "requests==<reviewed-version>", ] ``` ```text requests==<reviewed-version> ``` 3. Generate and publish a lock file containing transitive dependency versions. 4. Use hash verification for Python packages, such as a hash-locked requirements file installed with: ```bash pip install --require-hashes -r requirements.txt ``` 5. Document the expected package registry and index URLs to reduce dependency-confusion and registry-substitution risks. 6. Use automated dependency review to test and approve version updates before changing pins. 7. Where practical, distribute signed or checksummed release artifacts and verify their integrity before installation. ]]>
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
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
Findings (20)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding
The advertised description frames the skill as a simple model-selection/config updater, but the content also introduces a persistent watcher daemon with continuous probes, state files, logging, and autonomous recovery behavior. This mismatch is dangerous because users or orchestration systems may invoke the skill expecting a one-shot configuration change, while it can establish long-running background activity and ongoing network/file operations.

Memory Manipulation

High
Category
Memory Poisoning
Content
def _atomic_write(path: Path, content: str):
    """Write atomically via tmp + rename so a crash mid-write can't corrupt state."""
    path.parent.mkdir(parents=True, exist_ok=True)
    tmp = path.with_suffix(path.suffix + ".tmp")
    tmp.write_text(content)
Confidence
90% confidence
Finding
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

External Transmission

Medium
Category
Data Exfiltration
Content
### 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)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
### 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)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
### 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)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
### 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)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

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 remote package version at install time without pinning to a known-good release. This creates a supply-chain risk: if the upstream package is compromised or a breaking/malicious version is published, users may execute attacker-controlled code during installation.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The README tells users to place API keys in environment variables or application config but does not warn about secret-handling risks such as shell history leakage, world-readable config files, accidental check-in, or exposure via process inspection depending on platform/setup. Because these credentials enable use of external AI services, leakage could allow unauthorized API use and account abuse.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The README promotes a long-running watcher that automatically rotates models and rewrites local configuration, including running persistently via `nohup`, but does not clearly foreground that the tool will continue modifying `~/.openclaw/openclaw.json` in the background. Persistent autonomous config mutation can surprise users, interfere with other tooling, and make incident response or rollback harder if behavior becomes unsafe or incorrect.

Session Persistence

Medium
Category
Rogue Agent
Content
freeride-watcher

# Background, persistent across logout
nohup freeride-watcher > ~/.openclaw/freeride-watcher.log 2>&1 &

# One-off check (no loop)
freeride-watcher --once
Confidence
65% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill declares access to environment secrets, network, and file writes, but does not define an explicit tool/permission scope to constrain how those capabilities may be used. In practice this increases the blast radius of misuse or prompt-triggered abuse, especially because the skill instructs checking and persisting an API key and modifying OpenClaw configuration.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger phrases are broad enough to match common discussions about AI costs, model switching, or rate limits, which can cause the skill to activate outside its narrow intended use. Because the skill can write config, restart services, and potentially lead to background process setup, accidental activation can result in unintended configuration changes or service disruption.

Session Persistence

Medium
Category
Rogue Agent
Content
freeride-watcher

# Persistent background
nohup freeride-watcher > ~/.openclaw/freeride-watcher.log 2>&1 &

# One-shot check (no loop)
freeride-watcher --once
Confidence
90% confidence
Finding
The documented use of nohup to run a persistent background watcher creates session persistence outside the immediate user interaction. Even if intended for reliability, persistence is security-relevant because it enables continued network access, config manipulation, and log/state file creation after the initiating session ends.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
This code performs persistent file writes to the user's OpenClaw config via save_openclaw_config after modifying model and fallback settings. Although there are status prints, there is no confirmation step before overwriting the existing configuration, which is a safety-relevant change to user system state.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The manifest describes ranking free OpenRouter models, configuring fallbacks, and updating openclaw.json. In addition to that, the code actively sends test prompts to models via /chat/completions and rotates configuration based on probe results, which is a broader operational behavior than simple ranking/configuration management.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding
The install command invokes `npx clawhub@latest`, which fetches and executes the latest published package at install time rather than a pinned, audited version. This creates a supply-chain risk: if the package is compromised or a malicious update is published, arbitrary code could run during installation with the user's privileges. The skill context increases the danger because the installer also changes directories into the skill workspace and then performs `pip install -e .`, meaning a compromised bootstrap step could tamper with local files or alter what gets installed next.

Intent-Code Divergence

Low
Confidence
95% confidence
Finding
The top-level documentation makes a strong claim about providing 'unlimited free AI access'. The implementation clearly depends on OpenRouter API keys, handles 401/429 failures, and can exhaust all keys or find no working models, so the documentation contradicts the actual behavior and guarantees of the code.

Missing User Warnings

Low
Confidence
77% confidence
Finding
The function persists API-derived model metadata to ~/.openclaw/.freeride-cache.json. While cache refresh commands later print cache-related messages, the write path itself has no direct warning or inline comment telling users that data will be stored locally.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
Confidence
97% confidence
Finding
The dependency is specified as `requests>=2.31.0`, which allows any future release and does not guarantee a reproducible or reviewed install. This weakens supply-chain control and can unintentionally pull in vulnerable or breaking versions, especially in an automation skill that may be installed repeatedly across environments.

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
93% confidence
Finding
Because `requests` is not pinned, it is impossible to verify from this manifest whether the installed version includes fixes for known advisories. In a skill that manages AI provider configuration and may make network requests to external services, an affected `requests` version could expose credentials or weaken transport security depending on which release gets installed.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
main.py:102

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
README.md:71