Back to skill

Security audit

Cove Ops

Security checks for vulnerabilities and agentic risk

Overview

This skill is a legitimate Cove operations reference, but it gives agents broad live admin powers with weak safety boundaries.

Install only for trusted Cove administrators. Use least-privileged bot tokens, avoid administrator permissions unless required, treat cove.md and channel files as untrusted input, confirm all deletes and role/permission changes with a human, keep webhook URLs secret, and do not run the local plugin deployment steps unless you intentionally want to replace local OpenClaw plugin code and restart the gateway.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:19
Finding
Persistent Instruction Hijacking Through Bot-Writable Channel Context## Vulnerability Details **File Location**: `SKILL.md`, lines 19–25 and 158–159 **Vulnerability Type**: Untrusted persistent content injected as agent instructions **Risk Level**: High ### Vulnerable Code Snippet ```markdown - **cove.md** — Every channel has a persistent context file called `cove.md`. It is automatically injected into the bot's context every turn. Bots can read and write it. **Channel-level rules, conventions, and state belong here, not in personal memory.** This is a platform-level guarantee. - **Channel files** — Each channel has its own file storage (text-based, max 100KB/file). `cove.md` is the convention file, but you can store other files too. - **Cross-channel communication** — Channels communicate via webhooks. It's one-way push only — no auto-return, to prevent echo loops. Each channel processes what it receives independently. - **Channel as Service** — Each channel has its own role (dev, product, review, etc.). The platform orchestrates everything. Different channels, different responsibilities. - **Roles & Permissions** — Discord-compatible RBAC. Guild has roles with permission bits. Members are assigned roles. Role hierarchy (position) determines what you can manage. > **Tip:** Record these platform concepts in your persistent config (e.g., `TOOLS.md`) so you naturally recall them on every startup. ``` The automatic injection and write behavior is reiterated at lines 158–159: ```markdown - **Auto-injected**: plugin dispatch reads it and injects into bot context every turn - **Bot-readable and writable**: bots can GET/PUT to evolve channel rules ``` ### Technical Analysis The Skill defines `cove.md` as both writable through the Cove channel-file API and automatically injected into the agent's context on every turn. It treats the file as a location for channel-level “rules” without establishing a trust boundary between externally stored content and authoritative agent instructions. ...[truncated 2997 chars]
Remediation
## Remediation Suggestions 1. **Treat channel files as untrusted data** - Do not inject `cove.md` as authoritative instructions. - Wrap its contents in an explicit untrusted-data boundary. - State that channel content cannot override system policies, safety rules, user intent, or approval requirements. 2. **Separate data from governing policy** - Store operational notes and channel state separately from agent policy. - Keep authoritative instructions in a locally controlled, read-only configuration. - Parse remote state through a constrained schema rather than accepting unrestricted Markdown instructions. 3. **Apply strict write authorization** - Restrict `cove.md` updates to a dedicated, least-privileged administrative role. - Prevent ordinary bots, webhooks, and channel participants from modifying instruction-bearing content. - Use separate read-only and write-capable credentials where supported. 4. **Add provenance and integrity controls** - Require authenticated authorship for rule changes. - Sign or hash approved versions of instruction-bearing files. - Reject unsigned, stale, or unexpectedly modified content. - Maintain an immutable audit log containing the author, timestamp, and previous value. 5. **Require confirmation for sensitive actions** - Require explicit trusted-user approval before changing roles, permissions, channels, webhooks, or persistent files. - Do not allow injected channel content alone to authorize destructive or privileged API requests. 6. **Prevent persistent-memory contamination** - Remove the recommendation to copy remotely sourced content into `TOOLS.md` or other persistent configuration. - Prohibit agents from promoting channel content into long-term memory without explicit review and approval. - Provide a mechanism to inspect and remove previously persisted channel-derived instructions. 7. **Limit blast radius** - Grant ...[truncated 569 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (7)

Memory Manipulation

High
Category
Memory Poisoning
Content
```

Requires: MANAGE_ROLES. New role permissions must be a subset of caller's permissions.
New role is created at position 1 (bottom, above @everyone).

### Update Role
Confidence
80% confidence
Finding
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Session Persistence

Medium
Category
Rogue Agent
Content
Core concepts:

- **cove.md** — Every channel has a persistent context file called `cove.md`. It is automatically injected into the bot's context every turn. Bots can read and write it. **Channel-level rules, conventions, and state belong here, not in personal memory.** This is a platform-level guarantee.
- **Channel files** — Each channel has its own file storage (text-based, max 100KB/file). `cove.md` is the convention file, but you can store other files too.
- **Cross-channel communication** — Channels communicate via webhooks. It's one-way push only — no auto-return, to prevent echo loops. Each channel processes what it receives independently.
- **Channel as Service** — Each channel has its own role (dev, product, review, etc.). The platform orchestrates everything. Different channels, different responsibilities.
Confidence
88% confidence
Finding
The skill explicitly states that cove.md is auto-injected into the bot's context every turn and is writable by bots, making it a persistent prompt/input channel. That creates a durable prompt-injection and policy-poisoning surface: malicious or compromised channel content can steer future agent behavior across sessions unless treated as untrusted.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs reading a bot token from local config and uses webhook tokens directly in URLs, but provides no warnings about secret handling, logging, shell history, or accidental disclosure. These credentials grant platform access and may leak through process lists, terminal history, copied commands, or logs.

External Transmission

Medium
Category
Data Exfiltration
Content
### List Roles

```bash
curl -s "$COVE_BASE/api/v10/guilds/$COVE_GUILD/roles" \
  -H "Authorization: Bot $COVE_TOKEN"
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Session Persistence

Medium
Category
Rogue Agent
Content
Returns: `[{id, name, position, permissions, color, hoist, managed, mentionable}, ...]`

### Create Role

```bash
curl -s -X POST "$COVE_BASE/api/v10/guilds/$COVE_GUILD/roles" \
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill documents destructive operations like deleting files, channels, and messages without guardrails such as confirmation prompts, scope checks, or rollback guidance. In an agent setting, this materially increases the chance of accidental or prompt-induced destructive actions against live collaboration data.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill includes instructions to build, replace, and restart a local plugin outside the stated scope of normal Cove platform operations. That expands the capability from remote API usage into local code deployment, creating a path for unreviewed code changes, persistence, or supply-chain abuse if an agent follows these steps automatically.

Static analysis

No suspicious patterns detected.