T08 · Insecure Dependencies
- 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 atSKILL.md:30,SKILL.md:52-58, andSKILL.md:73
Vulnerability Type: Unpinned and unverified third-party dependencies
Risk Level: MediumVulnerable 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.combash uvx openapi2cli generate https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json -o github-cliTechnical Analysis
The installation metadata declares the
uvpackage without an exact version, hash, signature, or trusted-source restriction. The documenteduvx openapi2clicommands likewise resolve and executeopenapi2cliwithout 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
- Pin
uvandopenapi2clito exact, reviewed versions rather than resolving their latest available releases. - Use a lock file or equivalent dependency manifest that also fixes all transitive dependency versions.
- Require cryptographic hashes or verified signatures for downloaded package artifacts.
- Restrict package resolution to a controlled, trusted index or internal mirror with package allowlisting.
- Configure
uvxinvocations to request the explicitly approvedopenapi2cliversion. - Review dependency updates before changing pinned versions, including the release diff and transitive dependency changes.
- Generate clients inside an isolated container or sandbox with no secrets, minimal filesystem access, and restricted network connectivity.
- Inspect or statically analyze generated Python files before executing them.
- 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.
- Use short-lived, least-privileged API credentials when testing generated clients.
- Pin
