T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:362- Finding
Unverified Remote Skill Instructions Are Dynamically Retrieved and Followed
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed cloud skill manager, but it gives agents broad, persistent authority to load and mutate remote instructions without enough verification or user control.
Install only if you are comfortable with an agent using a GitHub token to manage a private skill repository, modifying persistent agent/workspace files, and loading future instructions from mutable remote repositories. Prefer a read-only single-repository token unless you need upload/delete features, avoid plaintext token storage, review diffs before any git push or deletion, and do not install public packs unless you trust the source and revision.
SKILL.md:362Unverified Remote Skill Instructions Are Dynamically Retrieved and Followed
SKILL.md:332Persistent Cloud-Loading Directive Is Written into the Agent Workspace
SKILL.md:432Unvalidated Configuration and Skill Names Are Interpolated into Shell Commands
SKILL.md:40GitHub PAT May Be Stored in Plaintext and Sent More Broadly Than Necessary
SKILL.md:530Mutable Public Skill Packs Are Imported Without Integrity Verification
Although the text says not to auto-overwrite SKILL.md, the surrounding feature performs remote-driven infrastructure updates by downloading files from upstream and overwriting local repository content. This is a form of self/update-capable behavior that can modify operational code and automation based on remote content, which is sensitive in an agent skill.
> - New feature C
>
> To update, run: `clawhub update anyskill`
- **Do not auto-overwrite SKILL.md.** Inform the user to update via ClawHub CLI which provides versioned, auditable updates.
3. **Infrastructure version check**:
- Read the `.anyskill-infra-version` file from the user's private repo `{localPath}`. If it doesn't exist, treat as `0.0.0`.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
Referenced artifact was not completely inspected
4. For each file in the `files` array, read all files from the cloud into **memory** (do not save to local disk), then digest the `SKILL.md` specifications.
The skill can modify skill content in the managed repository and push those changes upstream automatically. This is intentional functionality, but it is still self-/capability-modifying behavior that can alter future agent behavior or shared team tooling, especially when changes are committed and propagated automatically.
cd {localPath}
git add skills/{name}/
git commit -m "fix: update skill {name}"
git push origin {branch}
The command git rm -rf skills/{name}/ uses a user-influenced parameter in a destructive filesystem/git operation. If {name} is not strictly validated, path traversal or argument-manipulation patterns could delete unintended files or repository content before commit and push, making this especially dangerous.
cd {localPath}
git rm -rf skills/{name}/
git commit -m "feat: remove skill {name}"
git push origin {branch}
The skill instructs writing or updating persistent workspace configuration (TOOLS.md) based on detected state. This establishes durable session/workspace persistence that can influence future agent behavior and user expectations beyond the current interaction.
4. Attempt to fetch `index.json` to confirm connectivity.
5. Inform the user:
> ✅ AnySkill configuration detected, connected to repository `{repo}`. Ready to use!
6. **If current environment is OpenClaw**: Check if `TOOLS.md` already contains a `### AnySkill` section. If not, or if the skill list is outdated, execute the "OpenClaw Exclusive: Write Workspace Config" steps below to register/update the skill list.
If verification fails (network error or repo deleted), ask the user if they want to re-initialize.
The skill directs the agent to silently inspect environment variables and auto-discover cloud configuration before asking the user. This reduces transparency around secret handling and encourages autonomous use of sensitive credentials and account-linked resources without an explicit user-triggered operation.
**Before asking the user any questions, first silently detect if a usable Token already exists:**
1. Check if environment variable `ANYSKILL_GITHUB_TOKEN` exists.
2. If it **exists** (meaning the user has previously configured AnySkill on this machine):
- **Do not ask the user for a Token**, directly jump to "Path B: User only provided a Token" auto-discovery flow below.
- The entire process should be silent to the user: AI auto-detects cloud repo → confirms mount → writes global config → ready.
3. If it **does not exist**, then initiate the guided conversation (see below).
The skill explicitly instructs storing a GitHub PAT in plaintext within ~/.anyskill/config.json for some IDEs. This creates credential-at-rest exposure: any local process, backup system, repo accident, or shoulder-surfed file read could leak a token that has read/write access to the private skill repository.
The skill instructs sending a GitHub token to api.github.com/user to identify the account owner. Although the destination is legitimate GitHub infrastructure, this is still external transmission of a sensitive credential and should be treated carefully because the skill normalizes token use without granular consent at each step.
Use the GitHub API or command line to get user info:
curl -s -H "Authorization: token {token}" https://api.github.com/user
Extract the login field from the returned JSON — that's the username.
The repository search flow transmits the user's token to GitHub to enumerate candidate repositories under the authenticated username. Even though this is expected functionality, it expands token use to discovery operations and could unintentionally reveal repository metadata or normalize broad autonomous remote queries using sensitive credentials.
Call the GitHub Repository Search API:
curl -s -H "Authorization: token {token}" "https://api.github.com/search/repositories?q=user:{login}+anyskill+in:name,description"
For each candidate repo in the results, try to read its index.json:
The same instruction also explicitly endorses auto-execution after repo detection, reinforcing an agent pattern of acting on behalf of the user in ways that alter local and remote state. In a skill that handles tokens, git operations, and config files, this context makes autonomous action more dangerous than in a read-only helper skill.
- **✅ Existing skill repo detected**: Inform user and request confirmation:
> 👋 Welcome back! I detected an existing skill repository `{login}/{repo-name}`. Mounting automatically...
Then auto-execute clone and config write (same as Path A steps 1-4), **without asking unnecessary questions**.
- **❌ No skill repo detected** (confirmed as a brand new user):
The same instruction also explicitly endorses auto-execution after repo detection, reinforcing an agent pattern of acting on behalf of the user in ways that alter local and remote state. In a skill that handles tokens, git operations, and config files, this context makes autonomous action more dangerous than in a read-only helper skill.
- **✅ Existing skill repo detected**: Inform user and request confirmation:
> 👋 Welcome back! I detected an existing skill repository `{login}/{repo-name}`. Mounting automatically...
Then auto-execute clone and config write (same as Path A steps 1-4), **without asking unnecessary questions**.
- **❌ No skill repo detected** (confirmed as a brand new user):
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
- **Skill Repository**: `{repo}`
- **Global Config**: `~/.anyskill/config.json`
- **Local Path**: `{localPath}`
- **Skill Loading**: When you lack a skill, read the guide in `~/.openclaw/skills/anyskill/SKILL.md` to load from the cloud AnySkill repository on demand
- **Operation**: All skill management (load, download, upload, list, delete) is triggered via natural language, no CLI needed
#### Registered Cloud Skills
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
- **Skill Repository**: `{repo}`
- **Global Config**: `~/.anyskill/config.json`
- **Local Path**: `{localPath}`
- **Skill Loading**: When you lack a skill, read the guide in `~/.openclaw/skills/anyskill/SKILL.md` to load from the cloud AnySkill repository on demand
- **Operation**: All skill management (load, download, upload, list, delete) is triggered via natural language, no CLI needed
#### Registered Cloud Skills
The OpenClaw registry sync rule requires persistent updates to TOOLS.md after skill list changes. Even though it says not to overwrite unrelated content, it still alters durable workspace configuration automatically, which can shape future sessions and broaden the skill's footprint.
If AnySkill-related content already exists, skip this step.
> ⚠️ **Do not modify any other content** in these two files. Only append or update the AnySkill section — never overwrite existing user configurations.
#### OpenClaw Skill Registry Sync (General Rule)
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
* You may briefly report to the user: "Loading [skill-name] from cloud skill repository..."
* If `index.json` has no matching skill, inform the user that the cloud repository currently lacks the corresponding capability.
* If a network request fails, report to the user and suggest checking network connectivity or repository availability.
* **Throughout the entire process, never ask the user to manually run terminal commands.** All file creation, downloading, and git operations are performed automatically by you.
No suspicious patterns detected.