T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:23- Finding
Mutable Remote Registries Can Provide Executable Installation Payloads
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:23-35,SKILL.md:64-80, andregistry.yaml:2-4
Vulnerability Type: Remote payload retrieval and execution
Risk Level: CriticalVulnerable Code
registry.yaml:2-4:yaml subscriptions: - name: awesome url: https://raw.githubusercontent.com/gavinyao/awesome-skills/main/registry.yamlRelevant installation templates in
SKILL.md:64-80:bash cd <target_skills_dir> && <install_command>bash git clone <install_url> <target_skills_dir>/<skill_name>bash cp -r <resolved_source_path> <target_skills_dir>/<skill_name>Technical Analysis
The Skill recursively loads YAML registries from remote HTTP or HTTPS locations and merges their Skill definitions into the set of installable entries. For entries using the
npxsource type, the registry'sinstallvalue is treated as a command and inserted into a shell command.The configured remote registry is a mutable branch-based GitHub raw URL. Neither the registry nor its recursively referenced subscriptions are pinned to immutable commits. The workflow specifies no signature verification, checksum validation, command allowlist, trusted-host policy, or mandatory presentation of the final resolved command for user approval.
Consequently, the effective executable payload can change after this Skill has been reviewed. Compromise of any registry in the recursive subscription graph can turn a normal installation request into arbitrary command execution.
Attack Path
- An attacker compromises the configured remote registry, gains control of a nested registry, or persuades a user to add an attacker-controlled subscription.
- The attacker publishes a Skill entry whose
installfield contains a malicious command, or adds a nested subscription containing such an entry. - The Skill recursively fetches and p ...[truncated 1075 chars]
- Remediation
View remediation
Remediation Suggestions
- Do not execute registry-provided command strings. Replace
installcommands with a structured schema containing separately validated fields such as repository owner, repository name, Skill name, version, and destination. - Invoke processes through argument-array APIs rather than through a shell.
- Pin every remote registry and install source to an immutable commit, release digest, or cryptographic content hash.
- Require signature or checksum verification before parsing or installing remote content.
- Maintain an explicit allowlist of trusted HTTPS hosts and repository owners.
- Disable recursive remote subscriptions by default, or require explicit approval for every newly encountered registry origin.
- Display the fully resolved source, immutable revision, destination, and operation to the user before installation.
- Download content into an isolated staging directory, inspect it, and require approval before copying it into a global Skill directory.
- Reject registry entries that contain unexpected fields, shell syntax, control characters, redirects, pipelines, or executable command strings.
- Do not execute registry-provided command strings. Replace
