T03 · Remote Payload Retrieval and Execution
Error
- Location
- README.md:57
- Finding
- Mutable Remote Installation Script Is Executed Directly by a Shell<![CDATA[ ## Vulnerability Details **File Location**: `README.md:57-60`, `README.md:89-92`, `README_CN.md:57-60`, `README_CN.md:89-92`, and `install.sh:1-3` **Vulnerability Type**: Remote payload retrieval and immediate execution **Risk Level**: Critical ### Vulnerable Code ```bash # Install curl -sSL https://raw.githubusercontent.com/NissonCX/offercatcher/main/install.sh | bash ``` The same installation pattern is repeated in the English and Chinese documentation. The installer itself advertises the same command: ```bash #!/bin/bash # OfferCatcher one-click installation script # Usage: curl -sSL https://raw.githubusercontent.com/NissonCX/offercatcher/main/install.sh | bash ``` ### Technical Analysis The installation instructions download a shell script from the mutable `main` branch of a remote GitHub repository and pass the response directly to `bash`. The downloaded content is not: - Pinned to an immutable commit or release. - Authenticated using a release signature. - Checked against a published cryptographic hash. - Saved locally for inspection before execution. - Restricted to the behavior of the version reviewed during this audit. The bundled version of `install.sh` performs ordinary repository installation and configuration. However, that does not make the documented command safe: the effective script executed by a future user is whatever the remote `main` branch returns at installation time. This behavior is not necessary for the Skill's email-to-reminder functionality. A package-manager installation, versioned archive, or locally reviewed installer would provide the same functionality without directly executing mutable network content. ### Attack Path 1. An attacker compromises the GitHub account, repository, branch, maintainer credentials, or another component capable of modifying the remote installer. 2. The attacker replaces `install.sh` on the `main` branch with a malicious shell payload. 3. A user follows the documented one-line insta ...[truncated 1098 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Remove all `curl | bash` installation instructions. 2. Publish immutable, versioned release archives. 3. Provide a SHA-256 checksum and a detached cryptographic signature for each release. 4. Instruct users to download, verify, inspect, and then execute the installer: ```bash curl --fail --show-error --location \ --output offercatcher-install.sh \ https://example.invalid/releases/v0.1.0/install.sh printf '%s %s\n' '<EXPECTED_SHA256>' offercatcher-install.sh | shasum -a 256 --check less offercatcher-install.sh bash offercatcher-install.sh ``` 5. Prefer the documented ClawHub installation mechanism if it verifies package identity and integrity. 6. Pin documentation to a specific release rather than the mutable `main` branch. 7. Protect release publication with signed tags, branch protection, mandatory review, and multi-factor authentication. ]]>
