T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:78- Finding
Unpinned Remote Shell Script Download and Execution
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 78-79 and 290-291
Vulnerability Type: Remote payload retrieval through a mutable external source
Risk Level: HighVulnerable Code
Lines 78-79:
bash curl -sSL https://raw.githubusercontent.com/puppetcat-fire/skill-publish-adapter/main/skill-publish-adapter.sh -o skill-publish-adapter.sh chmod +x skill-publish-adapter.shLines 290-291:
bash curl -sSL https://raw.githubusercontent.com/puppetcat-fire/skill-publish-adapter/main/skill-publish-adapter.sh -o adapter.sh chmod +x adapter.shThe documentation subsequently instructs users and CI jobs to execute the downloaded script, including commands such as:
bash ./skill-publish-adapter.sh validate ./my-skilland:
bash ./adapter.sh publish . \ --slug ${{ github.event.repository.name }} \ --name "${{ github.event.repository.name }}" \ --version ${GITHUB_REF#refs/tags/v}Technical Analysis
The installation instructions download a shell script from the mutable
mainbranch of a personal GitHub repository. The command follows redirects and neither pins the content to an immutable commit nor verifies a checksum or cryptographic signature. Marking the result executable and subsequently invoking it creates a remote code-execution channel whose effective payload may change after this skill has been reviewed.The downloaded adapter is not included in the audited project, so its behavior cannot be verified from the supplied artifact. It is also not required for the local validation operations implemented by the packaged
skill-validator*.shfiles. Directing users to this external component therefore expands the trust boundary beyond the minimum needed for the declared validation functionality.This finding establishes a supply-chain and remote-payload risk. It does not establish that the currently hosted external script is malicious.
Attack Path
- An attacker compromises the upstream repository, it ...[truncated 1255 chars]
- Remediation
View remediation
Remediation Suggestions
- Bundle the reviewed adapter within the skill package so its contents are covered by the same audit and release process.
- If remote retrieval is unavoidable, use a URL pinned to an immutable commit rather than the mutable
mainbranch. - Publish a trusted SHA-256 digest through an independent, authenticated release channel and verify it before granting execution permission:
bash curl --fail --show-error --location \ "https://raw.githubusercontent.com/puppetcat-fire/skill-publish-adapter/COMMIT_HASH/skill-publish-adapter.sh" \ --output skill-publish-adapter.sh echo "EXPECTED_SHA256 skill-publish-adapter.sh" | sha256sum --check --strict - chmod 0755 skill-publish-adapter.sh- Prefer cryptographically signed release artifacts and verify the signature against a documented maintainer key.
- Configure CI jobs with least-privilege tokens, avoid exposing unrelated secrets, and restrict network and filesystem permissions where practical.
- Fail closed on download or verification errors. Avoid silent operation and explicitly constrain redirect behavior to trusted destinations.
- Clearly disclose that the adapter is an external executable with a separate trust boundary and security review lifecycle.
