Back to skill

Security audit

OpenAPI to CLI

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-aligned but should be reviewed because it encourages unpinned runtime package execution and generated API clients that can perform real authenticated writes.

Install only if you are comfortable with agents generating and running API clients. Pin and verify uv/openapi2cli versions where possible, inspect generated Python files before execution, test against sandbox endpoints first, use dry-run for new commands, and provide only short-lived least-privilege API credentials.

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.md:9
Finding

Unpinned Third-Party Packages Are Downloaded and Executed at Runtime

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:9-18, with runtime invocation examples at SKILL.md:30, SKILL.md:52-58, and SKILL.md:73
Vulnerability Type: Unpinned and unverified third-party dependencies
Risk Level: Medium

Vulnerable Code

yaml
metadata:
  {
    "openclaw":
      {
        "emoji": "🔧",
        "requires": { "bins": ["uvx"] },
        "install":
          [
            {
              "id": "uv",
              "kind": "pip",
              "package": "uv",
              "bins": ["uvx"],
              "label": "Install uv (for uvx)",
            },
          ],
      },
  }

The unpinned package is then resolved and executed through commands such as:

bash
# generate a CLI from any OpenAPI spec
uvx openapi2cli generate https://api.example.com/openapi.json --output my-api

# use the generated CLI
python my-api.py users list
python my-api.py users get --id 123
python my-api.py posts create --title "Hello" --body "World"

Additional affected examples include:

bash
uvx openapi2cli generate https://api.example.com/openapi.json -o my-cli
uvx openapi2cli generate ./spec.yaml -o my-cli
uvx openapi2cli generate ./spec.json -o my-cli --base-url https://api.prod.com
bash
uvx openapi2cli generate https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json -o github-cli

Technical Analysis

The installation metadata declares the uv package without an exact version, hash, signature, or trusted-source restriction. The documented uvx openapi2cli commands likewise resolve and execute openapi2cli without pinning a reviewed version.

Runtime package resolution means the code executed by the Skill can change after the Skill itself has been audited. The effective behavior therefore depends on the package version and transitive dependencies available from the c ...[truncated 2190 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin uv and openapi2cli to exact, reviewed versions rather than resolving their latest available releases.
  2. Use a lock file or equivalent dependency manifest that also fixes all transitive dependency versions.
  3. Require cryptographic hashes or verified signatures for downloaded package artifacts.
  4. Restrict package resolution to a controlled, trusted index or internal mirror with package allowlisting.
  5. Configure uvx invocations to request the explicitly approved openapi2cli version.
  6. Review dependency updates before changing pinned versions, including the release diff and transitive dependency changes.
  7. Generate clients inside an isolated container or sandbox with no secrets, minimal filesystem access, and restricted network connectivity.
  8. Inspect or statically analyze generated Python files before executing them.
  9. Keep API credentials out of command-line arguments where possible, because process arguments may be exposed through process listings or logs. Supply secrets through a protected secret manager or narrowly scoped environment variables.
  10. Use short-lived, least-privileged API credentials when testing generated clients.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (8)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The quick-start section shows generated commands capable of live reads and writes, including posts create, but provides no warning about side effects, authorization scope, or the need to verify endpoints before execution. In an AI-agent context, omission of such safeguards is risky because agents may execute commands non-interactively against real services.

Content

No source excerpt is available for this finding.

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 · SKILL.md (reported line 33)May include surrounding context.

bash
# generate a CLI from any OpenAPI spec
uvx openapi2cli generate https://api.example.com/openapi.json --output my-api

# use the generated CLI
python my-api.py users list

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 · SKILL.md (reported line 53)May include surrounding context.

bash
# generate a CLI from any OpenAPI spec
uvx openapi2cli generate https://api.example.com/openapi.json --output my-api

# use the generated CLI
python my-api.py users list

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The skill instructs users to run uvx openapi2cli without pinning a specific package version, which creates a supply-chain risk because future or compromised releases could be fetched and executed implicitly. In an agent-oriented skill, this is more dangerous because the workflow encourages automated installation/execution with little review.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

This command again references uvx openapi2cli without a pinned version, allowing execution of whatever package version is current at runtime. That exposes users and agents to upstream compromise, typosquatting/replacement risk, or breaking changes that alter behavior unexpectedly.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The local-file example still invokes an unpinned uvx openapi2cli, so the same supply-chain exposure applies even when the OpenAPI spec is local. The danger remains meaningful because the package itself is fetched/executed dynamically by a tool intended for automation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

This example combines an unpinned package invocation with a base URL override for production use, increasing risk because an unexpected package update could affect requests against real systems. In context, the skill is explicitly meant to create operational API tooling, so unattended use amplifies impact.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The GitHub API example also uses uvx openapi2cli without version pinning, which normalizes unsafe installation practice across the skill. Because users may copy-paste examples directly, this materially increases exposure to malicious or unreviewed upstream package changes.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.