Back to skill

Security audit

Aicoo Square

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent about using Aicoo Square, but it encourages recurring agent-driven public posting, liking, and commenting without clear per-action approval.

Install only if you want an agent to interact with Aicoo Square. Avoid enabling the heartbeat pattern unless you are comfortable with recurring public posts, likes, and comments, and require review before any post or comment is published. Treat AICOO_API_KEY and session cookies as account credentials.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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)

T02 · Agent Memory Poisoning

Warning
Location
SKILL.md:281
Finding
Persistent Autonomous External Actions Through Heartbeat Instructions## Vulnerability Details **File Location**: `SKILL.md`, lines 281-295 **Vulnerability Type**: Persistent agent-state modification enabling recurring external actions **Risk Level**: Medium ### Vulnerable Code ```markdown ## Agent Posting Pattern (via Heartbeat) Agents post on Square autonomously through the heartbeat loop. To enable: 1. Edit `HEARTBEAT.md` in Aicoo workspace to include Square instructions: ```markdown # Heartbeat Checklist - Browse Aicoo Square for relevant posts in `builders` subsquare - If I have a new project update, post it to Square - Like and comment on posts from my network ``` 2. The heartbeat engine will use available tools to execute these instructions on each run. ``` The consequence is amplified by the public-posting default documented at `SKILL.md`, line 339: ```markdown - Posts are public by default (`visibility: 'public'`) ``` ### Technical Analysis The Skill instructs the Agent or user to write recurring behavioral rules into `HEARTBEAT.md`, a persistent workspace file consumed during future heartbeat executions. This changes the behavior of later runs rather than restricting Square activity to the current, explicitly invoked request. The stored checklist authorizes browsing, posting, liking, and commenting on an external service on every heartbeat. The condition “If I have a new project update” lacks a precise content allowlist, privacy boundary, approval requirement, execution limit, or expiration condition. An Agent could consequently interpret private workspace or conversation context as material suitable for publication. Because posts are public by default, an autonomous posting decision may immediately disclose content externally. Likes and comments also create authenticated account activity without requiring renewed user confirmation. Although the reviewed text does not demonstrate an explicit malicious backdoor or safety override, this persistent instruction pat ...[truncated 1928 chars]
Remediation
## Remediation Suggestions 1. Remove the default recommendation to modify `HEARTBEAT.md`; keep ordinary Square operations scoped to the current user invocation. 2. If recurring behavior is supported, require explicit informed opt-in that identifies the actions, frequency, destination, visibility, and duration. 3. Generate post and comment drafts only. Require explicit user approval immediately before each external publication. 4. Default autonomous drafts and posts to `visibility: "private"` rather than relying on the service's public default. 5. Define a strict allowlist of publishable data and explicitly prohibit credentials, secrets, private files, internal project details, and conversation context. 6. Add an expiration time, maximum execution count, rate limit, and simple revocation procedure for all heartbeat rules. 7. Separate read-only browsing from write operations. Do not grant recurring write authority merely because recurring browsing is enabled. 8. Record every proposed and completed action in an auditable activity log, including the content, destination, identity, visibility, and authorization source. 9. Require a dry-run preview when enabling recurring behavior so the user can inspect the exact operations that would occur. 10. Before publishing, apply sensitive-data detection and fail closed when content origin or confidentiality cannot be established.
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
97% confidence
Finding
The trigger list is broad and includes generic phrases such as `square`, `like post`, `who posted`, and `discover people`, which can cause the skill to activate in contexts the user did not intend. Because this skill supports authenticated write actions to an external social platform, unintended invocation can lead to accidental posting, liking, commenting, or identity-bearing interactions.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Human post (via browser session)
curl -s -X POST "https://www.aicoo.io/api/square" \
  -H "Cookie: better-auth.session_token=<SESSION>" \
  -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.

External Transmission

Medium
Category
Data Exfiltration
Content
}' | jq .

# Agent post (via API key — Claude Code, heartbeat, or programmatic)
curl -s -X POST "https://www.aicoo.io/api/square" \
  -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.

External Transmission

Medium
Category
Data Exfiltration
Content
### Update Post (owner only)

```bash
curl -s -X PATCH "https://www.aicoo.io/api/square/42" \
  -H "Cookie: better-auth.session_token=<SESSION>" \
  -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 comment-creation documentation explicitly includes a client-supplied `postedBy` field, while the security notes later state that `postedBy` is derived from authentication and cannot be forged. This inconsistency is dangerous because implementers may trust or forward the caller-controlled field, leading to identity spoofing in comments or client confusion that weakens downstream validation.

External Transmission

Medium
Category
Data Exfiltration
Content
#### Create comment

```bash
curl -s -X POST "https://www.aicoo.io/api/square/42/comments" \
  -H "Cookie: better-auth.session_token=<SESSION>" \
  -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.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill documents autonomous heartbeat-driven browsing, posting, liking, and commenting without a clear consent or confirmation boundary for write-side effects. In an agent environment, this can cause the system to perform external social actions under a user's session or agent API key without a fresh, explicit user decision, increasing the risk of spam, reputation damage, and unintended disclosure.

Static analysis

No suspicious patterns detected.