T01 · Skill Instruction Hijacking
- Location
SKILL.md:12- Finding
Automatic and Quiet Skill Activation Overrides User Consent Boundaries
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This backup skill has a coherent purpose, but it would quietly install tools, authenticate to GitHub, upload the whole workspace, and create a recurring cron job with too little user review.
Review this skill carefully before installing. It is not clearly malicious because it backs up to a user-selected GitHub repository, but it asks the agent to act quietly, may use sudo to install software and enable cron, and can repeatedly push every workspace file to GitHub, including secrets or private agent files. Only use it after adding strong ignore rules or an allowlist, choosing a private repository unless you intentionally want public exposure, reviewing the first staged file list, and explicitly approving any package install, first push, and cron registration.
SKILL.md:12Automatic and Quiet Skill Activation Overrides User Consent Boundaries
SKILL.md:74Privileged Cron Installation and Persistent Scheduled Execution
SKILL.md:187Unfiltered Workspace Contents Are Committed and Pushed to GitHub
The top-level description frames the feature as backup/sync but does not prominently warn that the entire workspace will be repeatedly uploaded to GitHub. Because agent workspaces may contain credentials, notes, prompts, or user data, the missing privacy disclosure materially increases the chance of accidental exposure.
The skill self-activates whenever it is installed or loosely referenced, which is far too broad for an operation that installs software, modifies git state, authenticates to GitHub, and configures persistence. This can cause backup behavior to run without a clear, contextual, informed user request.
The skill explicitly instructs the agent to operate 'automatically and quietly' while performing privileged installs, repository creation, and external data transfer. Silent execution suppresses meaningful consent and makes it easier to exfiltrate sensitive workspace contents without the user understanding what happened.
The behavioral rule directs automatic, quiet syncing to GitHub, which is a direct instruction to disclose local data to an external service. In the context of an agent workspace, this is especially dangerous because the workspace may contain sensitive or private material not intended for publication.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
2. **Visibility**: `public` or `private`
3. (Optional) **Backup frequency** in minutes (default: **60**)
Do NOT ask for a Personal Access Token. We use `gh` auth.
---
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `brew` exists:
- `brew install git`
- Else if `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y git`
- Else if `dnf` exists:
- `sudo dnf install -y git`
- Else if `yum` exists:
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `brew` exists:
- `brew install git`
- Else if `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y git`
- Else if `dnf` exists:
- `sudo dnf install -y git`
- Else if `yum` exists:
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `brew` exists:
- `brew install git`
- Else if `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y git`
- Else if `dnf` exists:
- `sudo dnf install -y git`
- Else if `yum` exists:
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `brew` exists:
- `brew install git`
- Else if `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y git`
- Else if `dnf` exists:
- `sudo dnf install -y git`
- Else if `yum` exists:
The '--noconfirm' parameter suppresses an important safeguard in package installation, enabling autonomous host modification. In a skill that already acts quietly and broadly, this parameter meaningfully increases operational risk.
- Else if `yum` exists:
- `sudo yum install -y git`
- Else if `pacman` exists:
- `sudo pacman -S --noconfirm git`
- Else if `zypper` exists:
- `sudo zypper install -y git`
- Else if `apk` exists:
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y cron`
- `sudo systemctl enable --now cron || sudo service cron start || true`
- Else if `dnf` exists:
- `sudo dnf install -y cronie`
- `sudo systemctl enable --now crond || true`
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y cron`
- `sudo systemctl enable --now cron || sudo service cron start || true`
- Else if `dnf` exists:
- `sudo dnf install -y cronie`
- `sudo systemctl enable --now crond || true`
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y cron`
- `sudo systemctl enable --now cron || sudo service cron start || true`
- Else if `dnf` exists:
- `sudo dnf install -y cronie`
- `sudo systemctl enable --now crond || true`
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y cron`
- `sudo systemctl enable --now cron || sudo service cron start || true`
- Else if `dnf` exists:
- `sudo dnf install -y cronie`
- `sudo systemctl enable --now crond || true`
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
- If `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y cron`
- `sudo systemctl enable --now cron || sudo service cron start || true`
- Else if `dnf` exists:
- `sudo dnf install -y cronie`
- `sudo systemctl enable --now crond || true`
Using '--noconfirm' while installing the scheduler reduces user control over a persistence-enabling action. That makes this parameter choice security-significant in context.
- `sudo yum install -y cronie`
- `sudo systemctl enable --now crond || true`
- Else if `pacman` exists:
- `sudo pacman -S --noconfirm cronie`
- `sudo systemctl enable --now cronie || true`
- Else if `apk` exists:
- `sudo apk add dcron`
Piping downloaded content directly into a sudo write path is dangerous because it combines network-retrieved data with privileged file modification in one step, reducing opportunities for validation. Here it writes package trust material as root, which could have supply-chain consequences if the content source is compromised or not verified.
- `(type -p wget >/dev/null || (sudo apt-get update && sudo apt-get install -y wget))`
- `sudo mkdir -p -m 755 /etc/apt/keyrings`
- `out=$(mktemp) && wget -nv -O"$out" https://cli.github.com/packages/githubcli-archive-keyring.gpg`
- `cat "$out" | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null`
- `sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg`
- `sudo mkdir -p -m 755 /etc/apt/sources.list.d`
- `echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null`
This echoes a repository configuration string and pipes it directly into sudo tee, causing an immediate privileged package-source change without an inspection checkpoint. In context, that silently persists trust in an external repository.
- `cat "$out" | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null`
- `sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg`
- `sudo mkdir -p -m 755 /etc/apt/sources.list.d`
- `echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null`
- `sudo apt-get update && sudo apt-get install -y gh`
- Else if `dnf` exists:
Here '--noconfirm' suppresses review of GitHub CLI installation, which is later used for auth and repo operations. The parameter removes a natural checkpoint for a tool central to external publication.
- `sudo zypper install -y gh`
- Else if `pacman` exists:
- `sudo pacman -S --noconfirm github-cli`
- Else if `apk` exists:
- `sudo apk add github-cli`
These steps initialize git in the full OpenClaw workspace, stage all files, create or attach a GitHub repository, and push the contents externally. That creates a straightforward path for bulk disclosure of potentially sensitive files such as configuration, conversation artifacts, secrets, or internal documents.
The installed script runs on a schedule, stages every change with 'git add -A', commits, and pushes to GitHub automatically. This creates continuous data leakage risk because any newly created sensitive file in the workspace will be uploaded without review.
This instruction runs privileged package management with sudo, allowing the skill to alter the host system. While installing git is not inherently malicious, performing root-level changes automatically for a backup skill expands the trust boundary and increases risk.
- If `brew` exists:
- `brew install git`
- Else if `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y git`
- Else if `dnf` exists:
- `sudo dnf install -y git`
- Else if `yum` exists:
Privileged installation of git via dnf is a real security-sensitive action because it modifies system packages under root. In a skill that already performs data transfer and persistence, automatic root actions are especially concerning.
- Else if `apt-get` exists:
- `sudo apt-get update && sudo apt-get install -y git`
- Else if `dnf` exists:
- `sudo dnf install -y git`
- Else if `yum` exists:
- `sudo yum install -y git`
- Else if `pacman` exists:
Using sudo yum install grants the skill root-level execution for system changes. Even if the immediate goal is dependency setup, unattended privileged actions are inappropriate without an informed prompt.
- Else if `dnf` exists:
- `sudo dnf install -y git`
- Else if `yum` exists:
- `sudo yum install -y git`
- Else if `pacman` exists:
- `sudo pacman -S --noconfirm git`
- Else if `zypper` exists:
Using '--noconfirm' removes an interactive checkpoint for package installation, allowing the skill to make system changes autonomously. In this skill, that autonomy compounds the risk because installs are part of a chain leading to persistent external backup configuration.
- Else if `yum` exists:
- `sudo yum install -y git`
- Else if `pacman` exists:
- `sudo pacman -S --noconfirm git`
- Else if `zypper` exists:
- `sudo zypper install -y git`
- Else if `apk` exists:
No suspicious patterns detected.