T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:22- Finding
Mutable Remote Installer Is Piped Directly into a Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill has a coherent Go linting purpose, but its install steps can run unverified internet code and write into system-wide locations.
Review this skill before installing. Prefer manually installed, version-pinned Go and golangci-lint packages with checksum or signature verification, and avoid running the provided curl-to-sh or /usr/local extraction commands in developer machines or CI without explicit review.
SKILL.md:22Mutable Remote Installer Is Piped Directly into a Shell
SKILL.md:16Unverified Go Archive Is Extracted into a System-Wide Directory
SKILL.md:40Unpinned Latest Version Creates a Non-Reproducible Dependency Installation
The metadata install command downloads a tarball and extracts it directly into /usr/local, a privileged system location, without any warning or integrity verification. If the download source is tampered with or the command is run with elevated privileges, it could overwrite system files or install malicious binaries globally.
The skill instructs users to pipe a remotely fetched script directly into a shell, which executes unreviewed code from the network immediately. If the upstream script, hosting account, or transport path is compromised, users could run arbitrary code on their systems without an opportunity to inspect it first.
The skill metadata includes automatic installation via a remote script piped into sh, which creates a supply-chain risk because external code is executed immediately. Since this appears in metadata, it may be run more implicitly by the agent/tooling, increasing the chance that users execute it without scrutiny.
{
"id": "golangci",
"kind": "script",
"script": "curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1",
"bins": ["golangci-lint"],
"label": "Install golangci-lint",
},
The documentation recommends fetching and executing an external install script in one command, which prevents users from reviewing the script before execution. This is a common supply-chain hazard and is more dangerous in a skill because users may treat the guidance as trusted operational advice.
Or use the official installation script:
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1
The CI example executes a remotely fetched script during automated builds, so a compromise of the upstream script could turn CI runners into an execution vector and potentially expose repository secrets or modify build outputs. Automated environments amplify the blast radius because the command may run repeatedly and without human review.
- name: Install golangci-lint
run: |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1
- name: Lint
run: golangci-lint run --config .golangci.yml ./...
No suspicious patterns detected.