Back to skill

Security audit

crypto-signals-router

Security checks for vulnerabilities and agentic risk

Overview

The skill’s crypto-signal automation purpose is clear, but it asks users to enable persistent automated execution with wallet and Telegram credentials through unreviewed scripts and optional root-level systemd setup.

Install only after reviewing the actual scripts and systemd unit files, using a low-balance dedicated wallet, limiting spend caps, protecting secrets with restrictive permissions or a secret manager, and avoiding the sudo systemd path unless you fully understand and trust the service contents. Prefer a user-level scheduler and keep Telegram publishing and payments disabled until manually tested.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T06 · System Persistence

Error
Location
SKILL.md:77
Finding

Privileged Persistent Execution Through Cron, Agent Schedulers, and systemd

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 77-100
Vulnerability Type: Persistent scheduled execution of unreviewed plugin components
Risk Level: High

Vulnerable Code

markdown
## Runtime Support

### OpenClaw
Plugin is linked to `~/.openclaw/plugins/crypto-signals-plugin`. Scheduling is done via **system cron**:
```cron
*/30 * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh
*/5  * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/watchdog.sh
0 9  * * 1    ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh weekly-summary

Hermes Agent

Plugin is linked to ~/.hermes/skills/crypto-signals-plugin. Scheduling is done via Hermes built-in scheduler:

bash
hermes schedule add --name crypto-signals-cycle  --cron "*/30 * * * *" --skill crypto-signals-plugin/crypto-signals-router
hermes schedule add --name crypto-signals-watchdog --cron "*/5 * * * *" --skill crypto-signals-plugin/watchdog
hermes schedule add --name crypto-signals-weekly   --cron "0 9 * * 1"  --skill crypto-signals-plugin/channel-captain

Persistent Linux Service (optional, either runtime)

bash
# Install systemd timer for watchdog (more reliable than cron)
sudo cp ~/.gemini/config/plugins/crypto-signals-plugin/config/crypto-signals-watchdog.{service,timer} /etc/systemd/system/
sudo systemctl enable --now crypto-signals-watchdog.timer
text

### Technical Analysis

The Skill directs users to register multiple cross-session scheduled tasks. It also offers an installation path that copies service definitions from a user-controlled plugin directory into `/etc/systemd/system/` with `sudo` and immediately enables the timer.

Persistent scheduling is consistent with the declared goal of continuous operation, but the system-wide systemd installation exceeds the minimum privileges needed for periodic user-level processing. A user-level syst
...[truncated 2681 chars]
Remediation
View remediation

Remediation Suggestions

  1. Do not install system-wide services by default. Use the existing runtime scheduler or a user-level systemd timer under ~/.config/systemd/user/.
  2. Include all referenced scripts and unit definitions in the audited package so their commands, environment, permissions, and network behavior can be reviewed before registration.
  3. Require explicit, informed operator consent before creating any persistent task. Display the complete timer and service contents before installation.
  4. Separate installation from activation. Do not combine copying a unit with immediate enable --now behavior.
  5. If a system service is strictly necessary, configure an explicit dedicated unprivileged account using User= and Group=.
  6. Apply systemd hardening controls such as NoNewPrivileges=true, PrivateTmp=true, ProtectSystem=strict, ProtectHome=true, restricted writable paths, and narrowly scoped network access.
  7. Ensure scheduled scripts and parent directories are not writable by less-trusted users. Validate ownership and restrictive permissions before every activation.
  8. Use absolute, immutable executable paths and verify package integrity or signatures before registration.
  9. Keep wallet keys and Telegram tokens out of service files and command lines. Load them from a restricted secret manager or a file owned by the service account with mode 0600.
  10. Document complete removal procedures for cron entries, Hermes schedules, timers, service files, and daemon reloads.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · SKILL.md (reported line 83)May include surrounding context.

OpenClaw

Plugin is linked to ~/.openclaw/plugins/crypto-signals-plugin. Scheduling is done via system cron:

cron
*/30 * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh
*/5  * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/watchdog.sh
0 9  * * 1    ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh weekly-summary

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · SKILL.md (reported line 84)May include surrounding context.

OpenClaw

Plugin is linked to ~/.openclaw/plugins/crypto-signals-plugin. Scheduling is done via system cron:

cron
*/30 * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh
*/5  * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/watchdog.sh
0 9  * * 1    ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh weekly-summary

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · SKILL.md (reported line 85)May include surrounding context.

OpenClaw

Plugin is linked to ~/.openclaw/plugins/crypto-signals-plugin. Scheduling is done via system cron:

cron
*/30 * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh
*/5  * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/watchdog.sh
0 9  * * 1    ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh weekly-summary

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · SKILL.md (reported line 129)May include surrounding context.

OpenClaw

Plugin is linked to ~/.openclaw/plugins/crypto-signals-plugin. Scheduling is done via system cron:

cron
*/30 * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh
*/5  * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/watchdog.sh
0 9  * * 1    ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh weekly-summary

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Content

Scanner excerpt · SKILL.md (reported line 135)May include surrounding context.

OpenClaw

Plugin is linked to ~/.openclaw/plugins/crypto-signals-plugin. Scheduling is done via system cron:

cron
*/30 * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh
*/5  * * * *  ~/.gemini/config/plugins/crypto-signals-plugin/scripts/watchdog.sh
0 9  * * 1    ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh weekly-summary

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

This line combines access to the agent config directory with a privileged copy into /etc/systemd/system, creating a trust boundary crossing from user-controlled plugin files to root-managed service definitions. If plugin contents are modified or replaced, operators could install persistent privileged services from an untrusted location.

Content

Scanner excerpt · SKILL.md (reported line 99)May include surrounding context.

Persistent Linux Service (optional, either runtime)

bash
# Install systemd timer for watchdog (more reliable than cron)
sudo cp ~/.gemini/config/plugins/crypto-signals-plugin/config/crypto-signals-watchdog.{service,timer} /etc/systemd/system/
sudo systemctl enable --now crypto-signals-watchdog.timer

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
91% confidence
Finding

This line instructs editing a .env file inside the plugin directory that stores highly sensitive material, including a wallet private key and Telegram credentials. In context, encouraging plaintext secret storage under a plugin path increases risk of accidental exposure to other tools, backups, or agents with filesystem access.

Content

Scanner excerpt · SKILL.md (reported line 132)May include surrounding context.

md
bash ~/.gemini/config/plugins/crypto-signals-plugin/scripts/install.sh

# 2. Fill in your credentials
nano ~/.gemini/config/plugins/crypto-signals-plugin/.env

# 3. Test the first cycle manually
bash ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh

Credential Access

High
Category
Privilege Escalation
Confidence
97% confidence
Finding

The documentation explicitly directs the operator to place credentials in a .env file, and the required variables include a wallet private key plus Telegram tokens. In this skill's context, compromise of that file would allow financial theft, unauthorized messaging, and takeover of the automated signals operation.

Content

Scanner excerpt · SKILL.md (reported line 132)May include surrounding context.

md
bash ~/.gemini/config/plugins/crypto-signals-plugin/scripts/install.sh

# 2. Fill in your credentials
nano ~/.gemini/config/plugins/crypto-signals-plugin/.env

# 3. Test the first cycle manually
bash ~/.gemini/config/plugins/crypto-signals-plugin/scripts/run-cycle.sh

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The router trigger scope is intentionally broad enough to capture nearly any crypto-related request, which can cause over-delegation into automation-oriented subagents instead of keeping benign informational requests in the main thread. In this skill, that matters because delegated agents are tied to external actions such as payments, data acquisition, scheduling, and Telegram publishing, increasing the chance of unintended side effects from ambiguous prompts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill advertises continuous 24/7 execution and automated Telegram publishing without a prominent safety boundary or user-consent warning. In context, this can lead operators or higher-level agents to enable recurring external posting and market-signal dissemination without realizing the system is designed to act continuously and publicly.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
94% confidence
Finding

The skill instructs users to run sudo to copy service files from a user-space plugin directory into a root-controlled systemd location. This is dangerous because it elevates trust in plugin-provided files and can turn tampered content into privileged persistent execution.

Content

Scanner excerpt · SKILL.md (reported line 99)May include surrounding context.

Persistent Linux Service (optional, either runtime)

bash
# Install systemd timer for watchdog (more reliable than cron)
sudo cp ~/.gemini/config/plugins/crypto-signals-plugin/config/crypto-signals-watchdog.{service,timer} /etc/systemd/system/
sudo systemctl enable --now crypto-signals-watchdog.timer

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
95% confidence
Finding

Using sudo systemctl enable --now creates immediate privileged activation and persistence of the watchdog service. In context, that means a potentially unreviewed automation component gains recurring execution with system-level trust, magnifying any future compromise of the plugin or its scripts.

Content

Scanner excerpt · SKILL.md (reported line 100)May include surrounding context.

bash
# Install systemd timer for watchdog (more reliable than cron)
sudo cp ~/.gemini/config/plugins/crypto-signals-plugin/config/crypto-signals-watchdog.{service,timer} /etc/systemd/system/
sudo systemctl enable --now crypto-signals-watchdog.timer

Session Persistence

Medium
Category
Rogue Agent
Confidence
93% confidence
Finding

The systemctl enable --now instruction establishes persistence for the watchdog, causing the skill's automation to survive beyond the initiating session. Given this plugin also performs external checks, payment-related monitoring, and alerting, persistence increases the blast radius of misconfiguration or abuse.

Content

Scanner excerpt · SKILL.md (reported line 100)May include surrounding context.

bash
# Install systemd timer for watchdog (more reliable than cron)
sudo cp ~/.gemini/config/plugins/crypto-signals-plugin/config/crypto-signals-watchdog.{service,timer} /etc/systemd/system/
sudo systemctl enable --now crypto-signals-watchdog.timer

Static analysis

No suspicious patterns detected.