T03 · Remote Payload Retrieval and Execution
Error
- Location
- SKILL.md:35
- Finding
- Unpinned Remote Scripts Are Downloaded and Executed Directly<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:35`, `SKILL.md:106-107`, `SKILL.md:112-113`, and `SKILL.md:143` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: High ### Vulnerable Code ```bash bash <(curl -s https://raw.githubusercontent.com/hummingbot/skills/main/skills/hummingbot-deploy/scripts/check_env.sh) ``` ```bash bash <(curl -s https://raw.githubusercontent.com/hummingbot/skills/main/skills/hummingbot-deploy/scripts/install_mcp.sh) \ --agent <YOUR_CLI> --user <API_USER> --pass <API_PASS> ``` ```bash bash <(curl -s https://raw.githubusercontent.com/hummingbot/skills/main/skills/hummingbot-deploy/scripts/install_mcp.sh) \ --agent claude --user admin --pass admin ``` ```bash bash <(curl -s https://raw.githubusercontent.com/hummingbot/skills/main/skills/hummingbot-deploy/scripts/verify.sh) ``` ### Technical Analysis The instructions stream shell scripts from the mutable `main` branch of a remote GitHub repository directly into Bash. No immutable commit reference, checksum, signature, or local review is required before execution. Consequently, the effective code executed by the Skill can change after this package has been reviewed. The project already contains local copies of these scripts, so remote retrieval is not necessary for the declared deployment functionality. The MCP installation command is especially sensitive because API credentials are supplied as arguments to code retrieved from the network. If the upstream repository, account, branch, DNS path, or delivery infrastructure is compromised, the replacement script could read those arguments and execute arbitrary commands. ### Attack Path 1. An attacker compromises the upstream repository, maintainer account, or mutable `main` branch. 2. The attacker replaces one of the referenced scripts with a malicious payload. 3. A user or AI agent follows the instructions in `SKILL.md`. 4. `curl` retrieves the changed payload and process substitution ...[truncated 871 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions - Execute the scripts bundled with the Skill instead of downloading mutable copies: ```bash bash scripts/check_env.sh bash scripts/install_mcp.sh --agent codex --user "$API_USER" --pass "$API_PASS" bash scripts/verify.sh ``` - If remote retrieval is unavoidable, pin the URL to an immutable reviewed commit. - Download the script to a regular file before execution. - Verify a published cryptographic checksum or trusted signature. - Fail closed if verification does not succeed. - Display or review the downloaded content before running it. - Never provide credentials to code that has not been authenticated and verified. - Use `curl --fail --show-error --silent` so HTTP failures do not silently produce unexpected shell input. ]]>
