T03 · Remote Payload Retrieval and Execution
Error
- Location
- SKILL.md:144
- Finding
- Unpinned Remote Code Is Downloaded, Installed, and Executed Automatically## Vulnerability Details **File Location**: `SKILL.md:144-220` **Vulnerability Type**: Mutable remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code ```bash # macOS/Linux mkdir -p ~/projects cd ~/projects git clone https://github.com/xmanrui/OpenClaw-bot-review.git ``` ```bash mkdir -p ~/projects cd ~/projects curl -L https://github.com/xmanrui/OpenClaw-bot-review/archive/refs/heads/main.zip -o openclaw-dashboard.zip unzip openclaw-dashboard.zip mv OpenClaw-bot-review-main OpenClaw-bot-review rm openclaw-dashboard.zip ``` ```bash # macOS/Linux cd ~/projects/OpenClaw-bot-review npm install ``` ```bash # macOS/Linux cd ~/projects/OpenClaw-bot-review npm run dev > /dev/null 2>&1 & ``` The equivalent Windows instructions use `git clone`, `Invoke-WebRequest`, `npm install`, and `npm run dev`, producing the same security exposure. ### Technical Analysis The Skill retrieves the current contents of the unpinned `main` branch of a personal GitHub repository and then executes repository-controlled code. It does not pin an immutable commit or release, verify a cryptographic digest or signature, or include the dashboard source in the audited package. Running `npm install` is itself a code-execution boundary because package lifecycle hooks such as `preinstall`, `install`, and `postinstall` can execute arbitrary commands. Running `npm run dev` then directly executes scripts selected by the downloaded repository. The update instructions at `SKILL.md:87-111` also use `git fetch`, `git pull origin main`, and another `npm install`. Consequently, even a previously inspected installation can silently acquire different executable behavior. `SKILL.md:367` explicitly states that no user confirmation is needed. Although downloading a dashboard is consistent with the declared functionality, retrieving and executing the latest mutable source without integrity controls exce ...[truncated 1611 chars]
- Remediation
- ## Remediation Suggestions 1. Vendor the complete dashboard implementation into the reviewed package, or pin downloads to a specific immutable commit or signed release. 2. Publish and verify a SHA-256 or stronger digest before extracting or executing an archive. 3. Verify release signatures against a documented, trusted signing key. 4. Commit and enforce a lockfile, then use `npm ci` rather than `npm install`. 5. Use `npm ci --ignore-scripts` unless lifecycle scripts are strictly required and individually audited. 6. Require explicit user approval before downloading, updating, installing dependencies, or starting newly downloaded code. 7. Display the source URL, pinned revision, integrity value, and proposed commands in the approval prompt. 8. Execute the dashboard in a restricted account, container, or sandbox with a read-only filesystem and tightly limited network access. 9. Do not automatically track `main`; provide reviewed, versioned upgrades with rollback support. 10. Audit the dashboard repository and its complete dependency graph as part of the Skill release process.
