T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:36- Finding
Mutable Unix installer is downloaded and executed directly by a shell
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 36-51; duplicated at lines 385-400
Vulnerability Type: Remote payload retrieval and execution throughcurl | bash
Risk Level: HighVulnerable Code
bash curl -fsSL https://raw.githubusercontent.com/nodetool-ai/nodetool/refs/heads/main/install.sh | bashbash curl -fsSL https://raw.githubusercontent.com/nodetool-ai/nodetool/refs/heads/main/install.sh | bash --prefix ~/.nodetoolbash # Linux/macOS - use -y curl -fsSL https://raw.githubusercontent.com/nodetool-ai/nodetool/refs/heads/main/install.sh | bash -yThe same installation instructions are repeated at lines 385-400.
Technical Analysis
These commands retrieve a shell script from an external URL and send it directly to Bash without saving it for inspection or verifying its contents. The URL references the mutable
mainbranch rather than an immutable commit or release artifact. Consequently, the code executed by a user can differ from the content that existed when this skill was audited.HTTPS protects the connection in transit, but it does not protect against compromise of the upstream repository, maintainer account, branch, release process, or hosting infrastructure. No cryptographic checksum or signature is provided. The
-yvariation additionally suppresses installer confirmation prompts, reducing the opportunity to detect unexpected operations.This behavior is not required at this privilege level for the skill's declared documentation and CLI-usage functionality. Installation can be performed through a pinned, inspectable artifact under ordinary user privileges. Piping an unpinned remote script into a shell unnecessarily gives the current upstream content general code-execution capability.
The project documentation states that the installer creates a NodeTool environment, installs Python packages, and creates wrapper scripts. However, because the remote sc ...[truncated 1912 chars]
- Remediation
View remediation
Remediation Suggestions
- Remove all direct
curl | bashinstallation patterns, including the duplicated section. - Link to a versioned release artifact or pin the installer to an immutable Git commit instead of
refs/heads/main. - Require users to download the installer before execution:
bash curl -fL -o install.sh https://raw.githubusercontent.com/nodetool-ai/nodetool/PINNED_COMMIT/install.sh - Publish a SHA-256 checksum through a separately protected release channel and verify it before execution:
bash echo "EXPECTED_SHA256 install.sh" | sha256sum -c - - Prefer cryptographic release signatures with documented key verification over checksums alone.
- Instruct users to inspect the downloaded script before running it:
bash less install.sh bash install.sh --prefix "$HOME/.nodetool" - Keep installation user-local by default and explicitly warn against running the installer with
sudoor as root. - Avoid recommending non-interactive installation unless necessary for CI. For CI, pin every artifact and dependency and use an isolated, least-privileged runner.
- Document the exact files, packages, network endpoints, and environment changes made by the installer.
- Remove the duplicated installation section to prevent insecure instructions from surviving future partial edits.
- Remove all direct
