T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:123
- Finding
- Runtime Use of a Mutable Remote OpenAPI Schema## Vulnerability Details **File Location**: `SKILL.md:123-127` **Additional Location**: `references/usage-patterns.md:5-9` **Vulnerability Type**: Supply-chain risk from an unpinned remote schema **Risk Level**: Medium **Vulnerable Code**: ```markdown 1. Use the fixed link command by default: - `command -v slack-openapi-cli` - If missing, create it: `uxc link slack-openapi-cli https://slack.com/api --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/slack-openapi-skill/references/slack-web.openapi.json` - `slack-openapi-cli -h` ``` The corresponding usage example is: ```bash command -v slack-openapi-cli uxc link slack-openapi-cli https://slack.com/api \ --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/slack-openapi-skill/references/slack-web.openapi.json slack-openapi-cli -h ``` ### Technical Analysis The project includes a local, auditable OpenAPI schema, but the documented setup retrieves the effective schema from the mutable `main` branch of a GitHub repository. The URL is neither pinned to an immutable commit nor protected by a documented integrity digest. The schema defines the available API paths, methods, request parameters, server configuration, and bearer authentication requirements. Consequently, the behavior used at runtime can change after this version of the Skill has been reviewed. Compromise of the upstream repository, its maintainer account, or its publishing workflow could cause users to receive a schema that differs from the audited local file. This does not directly retrieve and execute native code, so it is best classified as an insecure dependency rather than remote payload execution. Whether a malicious schema could redirect bearer credentials depends on UXC's independent enforcement of the command's Slack base URL and authentication binding. That enforcement is not implemented or verifiable within this project, so credential ...[truncated 1681 chars]
- Remediation
- ## Remediation Suggestions 1. Use the bundled `references/slack-web.openapi.json` file as the default schema source. 2. If remote retrieval is necessary, pin the URL to an immutable Git commit rather than the `main` branch. 3. Publish and verify a SHA-256 digest before accepting the downloaded schema. 4. Configure UXC to enforce `https://slack.com/api` independently of any `servers` value contained in the schema. 5. Prevent schemas from changing credential hosts, authentication bindings, or transport destinations. 6. Validate the exact permitted operation allowlist after retrieval: - `/auth.test` - `/conversations.list` - `/conversations.info` - `/conversations.history` - `/conversations.replies` - `/chat.postMessage` - `/reactions.add` 7. Fail closed when the schema digest, server origin, security definition, or operation allowlist differs from the reviewed version.
