T01 · Skill Instruction Hijacking
- Location
CRITICAL_SETUP.md:108- Finding
Persistent Agent Instruction Hijacking Through Global Session Rules
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s prayer-time lookup is coherent, but its reminder setup pushes persistent agent rules, automatic job recreation without consent, and optional privileged system-wide network changes.
Use this only after carefully reviewing the reminder setup. For manual prayer-time lookups, the core scripts are straightforward. Do not add the supplied AGENTS.md block, do not allow cron jobs to be recreated without confirmation, avoid the Cloudflare WARP sudo commands unless an administrator explicitly approves them, and remove or ignore the GitHub publishing script. Enable reminders only if you accept recurring agent turns, location queries to AlAdhan, token cost, and a clear disable/removal process.
CRITICAL_SETUP.md:108Persistent Agent Instruction Hijacking Through Global Session Rules
CRITICAL_SETUP.md:57Scheduled Agent Jobs Are Automatically Recreated Without User Consent
SKILL.md:185Prayer-Time Connectivity Guidance Installs a System-Wide VPN With Root Privileges
push-to-github.sh:1Bundled Publishing Script Pushes Local Repository Contents to a Hard-Coded GitHub Account
The embedded AGENTS.md text explicitly says to recreate missing cron jobs and run fetch scripts immediately, 'don't ask,' before doing anything else. This is especially dangerous because it attempts to override normal consent boundaries and elevate the skill into an always-on autonomous operator with persistent side effects at session start.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
warp-cli connect
The description promises an automated background reminder system and broad official-method support, but the content itself shows reliance on an external API and manual cron configuration. In context, that mismatch is risky because users may not understand that periodic network fetching and local persistence are separate operational behaviors requiring explicit setup and approval.
The description promises an automated background reminder system and broad official-method support, but the content itself shows reliance on an external API and manual cron configuration. In context, that mismatch is risky because users may not understand that periodic network fetching and local persistence are separate operational behaviors requiring explicit setup and approval.
The description promises an automated background reminder system and broad official-method support, but the content itself shows reliance on an external API and manual cron configuration. In context, that mismatch is risky because users may not understand that periodic network fetching and local persistence are separate operational behaviors requiring explicit setup and approval.
The description promises an automated background reminder system and broad official-method support, but the content itself shows reliance on an external API and manual cron configuration. In context, that mismatch is risky because users may not understand that periodic network fetching and local persistence are separate operational behaviors requiring explicit setup and approval.
Piping curl output directly into sudo gpg combines remote network content with privileged local processing, a classic trust-boundary reduction pattern. Even though this is a common package-setup idiom, it is inappropriate inside an application skill because it normalizes privileged handling of untrusted network data.
Quick fix:
# Install Cloudflare WARP
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Piping an echoed repository line into sudo tee writes system configuration through a shell pipeline, again compressing review and privilege boundaries. In this context, it contributes to unnecessary host reconfiguration for a feature that should remain a simple network query utility.
# Install Cloudflare WARP
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
warp-cli connect
Chaining 'apt update' and package installation in one command encourages opaque, high-impact execution with reduced review opportunities between steps. In a skill context, command chaining can make it easier for users or agents to execute privileged system changes as a single action without validating repository state or necessity.
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list sudo apt update && sudo apt install cloudflare-warp warp-cli register warp-cli connect
The setup guide materially expands the skill from answering prayer-time queries into a persistent autonomous monitoring and maintenance system that runs at every session start and on a 5-minute schedule. That changes the agent’s operational scope without requiring an immediate user request, increasing the chance of background actions, surprise notifications, and unintended system changes.
The document instructs the agent to inspect and modify global cron-job state as routine behavior, including recreating jobs automatically. Autonomous modification of scheduler state is risky because it persists beyond the current request, can interfere with other workloads, and normalizes privileged background changes unrelated to the user’s immediate prompt.
The guide directs routine execution of shell commands and filesystem checks such as listing files and running Python scripts from fixed paths. Even if the commands appear operationally relevant, embedding them as default behavior increases attack surface, creates opportunities for path or environment abuse, and bypasses normal user awareness around local system inspection/execution.
The instructions tell the agent to recreate cron jobs, fetch data, and overwrite prayer_times.json immediately if anything is missing, without warning or confirmation. Silent persistence changes and file overwrites can surprise users, destroy state, or mask misconfiguration while training the agent to take privileged actions without consent.
The README promotes always-on background reminders that appear during unrelated conversations, but it does not clearly warn users about the persistence, frequency, and system behavior of those notifications. This can surprise users, create privacy concerns in shared environments, and cause unintended system-side effects such as ongoing scheduled tasks and unsolicited message injection.
The skill documents internet-dependent prayer-time lookups but does not prominently disclose that user-supplied location data will be sent to the third-party AlAdhan API. Sharing city, country, coordinates, and timing queries with an external service can expose sensitive location or behavioral information without informed consent.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
Solution: If you're running OpenClaw on a VPS/datacenter, you may need Cloudflare WARP VPN:
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp
warp-cli register
The skill advertises and instructs use of network access, local file reads/writes, and background automation, but does not declare any explicit tool scope or permissions boundaries. In an agent environment, missing least-privilege declarations increases the chance the skill is invoked with broader capabilities than users expect, especially given the reminder workflow writes files and contacts external services.
No suspicious patterns detected.