Back to skill

Security audit

Aicoo Heartbeat

Security checks for vulnerabilities and agentic risk

Overview

This skill is purpose-built for an autonomous Aicoo heartbeat feature, but it asks users to enable recurring access to private workspace data and has unclear boundaries around write-capable tools in a supposedly read-only mode.

Review this carefully before installing. It appears to be a legitimate Aicoo heartbeat-control skill, but only use it if you are comfortable granting recurring access to email, calendar, notes, todos, and memory. Keep the policy in MESSAGES unless the service clearly enforces read-only behavior, and avoid enabling ACTIONS until you understand exactly which writes can happen and how to review or undo them.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:285
Finding
Default Read-Only Tier Exposes State-Changing Tools and Excessive Sensitive-Data Access## Vulnerability Details **File Location**: `SKILL.md`, lines 21, 102, 274, 285–287, 362, and 369 **Vulnerability Type**: Least-privilege violation and inconsistent authorization boundary **Risk Level**: Medium The skill describes the default `MESSAGES` tier as read-only, but its documented heartbeat tool set includes capabilities that can create todos, create notes, and modify durable memory. The documentation does not state that these tools are restricted to the `ACTIONS` tier. ### Vulnerable Code Snippets `SKILL.md`, line 21: ```markdown | Tier | `MESSAGES` (default) = read-only checks + summary. `ACTIONS` = can take write actions (future). | ``` `SKILL.md`, line 102: ```markdown - `MESSAGES` — read-only checks, delivers summary message (default) ``` `SKILL.md`, line 274: ```markdown 3. **Memory context**: loads user's long-term memory for personalization ``` `SKILL.md`, lines 285–287: ```markdown - `search_todos` / `create_todo` — task management - `search_notes` / `create_note` — workspace notes - `memory_write` — save durable facts (rate-limited: 1 write per 60min, max 4 daily entries) ``` `SKILL.md`, line 362: ```markdown - **context-sync**: Heartbeat's `memory_write` tool keeps long-term memory updated ``` `SKILL.md`, line 369: ```markdown - Heartbeat excluded tools prevent unintended write actions in MESSAGES tier ``` ### Technical Analysis A read-only authorization tier should expose only operations that cannot modify user or system state. However, the documented tool set includes `create_todo`, `create_note`, and `memory_write`, all of which perform persistent writes. The claim that only “write-heavy” tools are excluded does not establish a reliable authorization boundary. No documented server-side or tool-dispatch restriction ensures that these three write operations are unavailable under `MESSAGES`. Rate limiting `memory_write` reduces frequency but does not make th ...[truncated 2132 chars]
Remediation
## Remediation Suggestions 1. Implement a server-side, deny-by-default tool allowlist for each policy tier. Under `MESSAGES`, expose only explicitly approved search and read operations. 2. Remove `create_todo`, `create_note`, and `memory_write` from the `MESSAGES` tool registry. Do not rely solely on prompt instructions to prevent their use. 3. Permit persistent writes only under `ACTIONS`, after explicit user opt-in. For sensitive or externally visible changes, require per-action confirmation. 4. Validate the active tier again at the tool-execution boundary so that a model-generated call cannot bypass policy checks. 5. Treat email, notes, memory, and other retrieved content as untrusted data. Clearly separate retrieved content from system instructions and reject embedded requests to invoke tools or alter policy. 6. Apply minimum necessary data scopes, such as limited time windows, result counts, and selected mailboxes or folders. 7. Record the tier, requested tool, authorization decision, sanitized arguments, and result for every tool call. Surface denied write attempts in run details. 8. Provide a review and rollback mechanism for todos, notes, and memory entries created by autonomous runs. 9. Add automated authorization tests proving that every state-changing tool is rejected while the active tier is `MESSAGES`. 10. Update `SKILL.md` so its tier descriptions and security claims exactly match the enforced implementation.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger list contains broad phrases like 'heartbeat', 'agent background', and 'agent autonomy', which can cause the skill to activate in ambiguous contexts. For a skill that can run autonomous loops, inspect workspace data, and potentially switch to ACTIONS mode, overbroad invocation increases the chance of accidental activation and unintended privileged operations.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The skill states that the MESSAGES tier is read-only, but its documented available tools include write-capable operations such as create_todo, create_note, and memory_write. This mismatch can mislead users and integrators into granting autonomy under the assumption of no side effects, creating a risk of unauthorized data modification or durable memory changes during supposedly read-only runs.

External Transmission

Medium
Category
Data Exfiltration
Content
### Run Heartbeat (manual trigger)

```bash
curl -s -X POST "https://www.aicoo.io/api/v1/heartbeat/run" \
  -H "Authorization: Bearer $AICOO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}' | jq .
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
### Set Heartbeat Policy

```bash
curl -s -X POST "https://www.aicoo.io/api/v1/heartbeat/policy" \
  -H "Authorization: Bearer $AICOO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "tier": "ACTIONS" }' | jq .
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill describes ACTIONS as allowing write actions like sending emails and creating todos but does not provide a prominent safety warning or consent requirement before enabling it. Because the feature is an autonomous loop, users may not appreciate that enabling ACTIONS grants recurring background write authority, which can lead to unintended outbound communication or data changes.

External Transmission

Medium
Category
Data Exfiltration
Content
### Edit HEARTBEAT.md Instructions

```bash
curl -s -X PUT "https://www.aicoo.io/api/v1/heartbeat/instructions" \
  -H "Authorization: Bearer $AICOO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The internal workflow says write-heavy tools are excluded, yet the listed heartbeat tools still include multiple write operations. In an autonomous loop that consumes user-editable instructions, exposing write tools expands the blast radius from passive monitoring to state-changing behavior, especially if prompts or instructions drift into action-taking.

Static analysis

No suspicious patterns detected.