T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:5
- Finding
- Unpinned Third-Party CLI Is Downloaded and Executed Through npx<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:5`, `SKILL.md:29`, `SKILL.md:35-41`, `SKILL.md:77-87` **Vulnerability Type**: Unpinned third-party dependency execution **Risk Level**: Medium ### Vulnerable Code ```yaml metadata: {"openclaw":{"emoji":"🦐","requires":{"env":["WAHLU_API_KEY"]},"primaryEnv":"WAHLU_API_KEY","install":[{"id":"npm","kind":"node","pkg":"@wahlu/cli","bins":["wahlu"],"label":"Install Wahlu CLI"}]}} ``` ```markdown No global install needed — use `npx @wahlu/cli` to run any command. ``` ```bash 1. **List brands** — `npx @wahlu/cli brand list` 2. **Switch to a brand** — `npx @wahlu/cli brand switch <brand-id>` 3. **List integrations** — `npx @wahlu/cli integration list` (get integration IDs for scheduling) 4. **Create a post** — `npx @wahlu/cli post create --name "Title" --instagram '{"description":"Caption","post_type":"grid_post"}'` 5. **Schedule it** — `npx @wahlu/cli schedule create <content-item-id> --at 2026-03-15T14:00:00Z --integrations <id>` 6. **Upload media** — `npx @wahlu/cli media upload ./photo.jpg` (returns a media ID) 7. **Check publications** — `npx @wahlu/cli publication list` ``` ```bash npx @wahlu/cli media upload ./photo.jpg npx @wahlu/cli post create --name "New product launch" \ --instagram '{"description":"Just launched!","post_type":"grid_post","media_ids":["mid-abc123"]}' \ --tiktok '{"description":"Just launched!","post_type":"image","media_ids":["mid-abc123"]}' \ --linkedin '{"description":"Just launched!","post_type":"li_image","media_ids":["mid-abc123"]}' npx @wahlu/cli schedule create <content-item-id> \ --at 2026-03-15T09:00:00Z \ --integrations int-123 int-456 int-789 ``` ### Technical Analysis The package reference `@wahlu/cli` has no exact version or integrity constraint. Every documented `npx @wahlu/cli` invocation can therefore resolve to a package version selected by the npm registry at execution time rather than to the version reviewed when this skill was audited. A ...[truncated 1939 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin the dependency to a reviewed exact version in skill metadata, for example: ```json { "id": "npm", "kind": "node", "pkg": "@wahlu/cli@X.Y.Z", "bins": ["wahlu"], "label": "Install Wahlu CLI" } ``` 2. Update every documented invocation to use the same exact version: ```bash npx --yes @wahlu/cli@X.Y.Z brand list ``` 3. Prefer a project-local installation governed by a committed lockfile rather than downloading executable code on each invocation: ```bash npm install --save-exact @wahlu/cli@X.Y.Z npm ci ``` 4. Commit `package-lock.json` and enforce its integrity metadata in deployment or CI. Review package provenance, publisher identity, release signatures where available, transitive dependencies, and lifecycle scripts before approving upgrades. 5. Upgrade only through a controlled review process. Test and audit each new version before changing the pinned version and lockfile. 6. Execute the CLI with least privilege: - Provide only the required environment variables. - Use a narrowly scoped and revocable API key. - Restrict filesystem access to required media files. - Restrict outbound network access where practical. - Run inside an isolated container or sandbox without host credentials. 7. Rotate `WAHLU_API_KEY` and review account activity immediately if an unexpected package version has previously been executed. ]]>
