T03 · Remote Payload Retrieval and Execution
Error
- Location
- readme.md:48
- Finding
- Mutable Remote Installer Is Downloaded and Executed Without Verification<![CDATA[ ## Vulnerability Details **File Locations**: - `readme.md:42,48,65` - `readme.en.md:42,48,65` - `platforms/README.md:41,46` - `platforms/aider/CONVENTIONS-snippet.md:29,32-33` - `platforms/cline/english-memory-method.md:28,31-32` - `platforms/copilot/copilot-instructions-snippet.md:30,33-34` - `platforms/cursor/english-memory-method.mdc:30,33-34` - `platforms/gemini/GEMINI.md:29,32-33` - `platforms/qoder/english-memory-method.md:27,30-31` - `platforms/roo/english-memory-method.md:27,30-31` - `install.sh:4-5` - `install.ps1:6-8` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code The Unix installation instructions download a script from the mutable `main` branch and pipe it directly into a shell: ```sh curl -fsSL https://raw.githubusercontent.com/yxdwind/english-memory-method/main/install.sh | bash ``` The Windows installation instructions perform the equivalent operation through PowerShell: ```powershell irm https://raw.githubusercontent.com/yxdwind/english-memory-method/main/install.ps1 | iex ``` The primary README files also recommend equivalent commands through jsDelivr: ```powershell irm https://cdn.jsdelivr.net/gh/yxdwind/english-memory-method@main/install.ps1 | iex ``` ```sh curl -fsSL https://cdn.jsdelivr.net/gh/yxdwind/english-memory-method@main/install.sh | bash ``` ### Technical Analysis These commands combine remote retrieval and immediate execution without creating an inspection or verification boundary. The effective payload is obtained from the mutable `main` branch, so the code executed by a user can differ from the version reviewed during this audit. Neither installation method pins the script to an immutable commit, verifies a cryptographic signature, nor compares the downloaded content against a published checksum. The jsDelivr variant mirrors the same mutable repository and therefore does not provide an independent trust boundary. The repository’s currently reviewed ...[truncated 2143 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Remove every `curl | bash` and `irm | iex` instruction from README files, platform adapters, and installer comments. 2. Separate retrieval, inspection, verification, and execution. For example: - Download the installer to a local file. - Verify its checksum or signature. - Allow the user to inspect it. - Execute the verified local file explicitly. 3. Pin downloads to an immutable release tag or, preferably, a full commit identifier rather than `main`. 4. Publish SHA-256 checksums through a separately protected release channel and require installers to fail closed on a mismatch. 5. Consider signing release artifacts with Sigstore, GPG, or another appropriate code-signing mechanism. 6. Prefer the packaged npm installer because the reviewed `bin/install.mjs` copies files bundled in the installed package and does not retrieve Skill content at runtime. 7. Document a manual installation method for users who do not wish to execute installer code. 8. If CDN mirrors remain available, verify the downloaded artifact against the same immutable, independently published checksum before execution. ]]>
