Back to skill

Security audit

Aicoo Discover

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Aicoo people-discovery tool, but it also uses private context for external searches and includes authenticated social actions without clear consent boundaries.

Review this skill carefully before installing. Use manual searches or generic Square browsing unless you are comfortable with memory, conversation, and repository-derived interests being sent to Aicoo. Do not let it connect, batch connect, message, or send friend requests unless you have explicitly reviewed each target and message/action.

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:34
Finding
Undisclosed Transmission of Context-Derived User and Project Information<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:34-38`, `SKILL.md:65-72`, and `SKILL.md:159-166` **Vulnerability Type**: Excessive access to local context followed by external data transmission **Risk Level**: Medium ### Vulnerable Code `SKILL.md:34-38`: ```markdown Claude Code infers search intent from available context: - User's current project / tech stack - Memory (skills, interests, goals) - Recent conversation topics - CLAUDE.md / package.json / repo signals ``` `SKILL.md:65-72`: ```bash # Primary search curl -s "https://www.aicoo.io/api/square?q=<TERMS>&limit=10&sort=most_asked" | jq . # Broaden if sparse (try different angle) curl -s "https://www.aicoo.io/api/square?subsquare=builders&sort=most_asked&limit=10" | jq . ``` `SKILL.md:159-166`: ```markdown When inferring what to search for, consider (in priority order): 1. **Explicit memory** — user's skills, interests, goals from memory system 2. **Current project** — tech stack from package.json, Cargo.toml, etc. 3. **Conversation** — what they've been working on or talking about 4. **Subsquare affinity** — if user is a builder, start with `builders`; if job hunting, `hiring` Combine signals into 2-3 diverse searches. Don't over-optimize for one angle — surprise is part of discovery. ``` ### Technical Analysis The Skill's declared purpose is to discover people through a public Aicoo Square search. However, its default Auto Mode instructs the Agent to inspect multiple sources of potentially private context, including: - Persistent user memory - Recent conversation content - Local project manifests - `CLAUDE.md` repository instructions - User interests, goals, and employment-related context The Agent is then instructed to derive search terms from this information and include them in requests to `https://www.aicoo.io`. This creates an external disclosure channel for information obtained from local or session-scoped sources. The access exceeds the minimum privileges required for ...[truncated 2867 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Use minimum-context discovery by default** - For generic discovery requests, browse public popular or recent Square entries. - Do not access persistent memory, conversation history, or repository files unless the user explicitly enables context-aware discovery. 2. **Require informed consent** - Before reading contextual sources, clearly state which sources will be inspected. - Before making the request, show the proposed search terms and obtain confirmation that they may be sent to Aicoo. - Keep approval limited to the current request rather than treating it as permanent consent. 3. **Restrict local file access** - Do not read `CLAUDE.md` or arbitrary repository files for discovery. - If project-aware searching is explicitly requested, use an allowlist of low-sensitivity manifest fields. - Exclude package scopes, private package names, repository URLs, author details, organization names, and environment-specific configuration. 4. **Apply sensitivity filtering** - Reject or redact credentials, tokens, email addresses, internal hostnames, customer names, unreleased project identifiers, filesystem paths, and other unique identifiers. - Prefer broad categories such as `TypeScript`, `Rust`, or `machine learning` rather than copying raw contextual text. 5. **Prefer user-provided search intent** - Ask the user for optional interests or search terms when the available context may be sensitive. - Allow generic results to be returned immediately without requiring contextual inspection. 6. **Minimize URL exposure** - If the API supports it, submit search terms through a POST body rather than a URL query string. - Regardless of transport, send only the minimum generalized terms required, because POST bodies may also be logged. 7. **Document the data flow** - State that derived search terms are transmitted to `www.aicoo.io`. - Identify the contextual data sources, purpose, destinatio ...[truncated 113 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
Findings (11)

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The skill is presented as a discovery/search tool, but it also instructs the agent to initiate third-party chats and perform connection actions. That expands the capability from passive information retrieval into outbound interaction and account-affecting behavior, creating a scope mismatch that can trigger user-unexpected actions against external parties.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The documented POST actions modify the user's network state by connecting accounts or sending requests, which is not justified by a discovery skill's stated role. If auto-invoked or loosely triggered, this could cause unauthorized social actions, spam, or reputation harm using the user's account.

Vague Triggers

Medium
Confidence
96% confidence
Finding
The trigger list is very broad and overlaps with ordinary conversation such as 'find someone' or 'who's interesting,' increasing the chance of accidental activation. Because the skill can progress from search into external interactions, broad triggers materially raise the risk of unintentional network access and follow-on actions.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill says it infers what the user cares about from memory, conversation, repo files, and project metadata, but the description does not warn users that personal context will be used to tailor searches. This creates a transparency and privacy problem because users may unknowingly have sensitive preferences or project signals incorporated into external discovery queries.

Vague Triggers

Medium
Confidence
89% confidence
Finding
Auto mode allows the agent to infer intent when the user did not provide a specific query, but the boundaries for when inference is appropriate are vague. In context, that ambiguity is risky because the skill uses personal context and may initiate broad searches based on inferred interests without a clear user request.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
## Execution

Regardless of mode, Claude Code does the work and presents results. Never ask the user to refine a query before showing results.

### Step 1: Search Square
Confidence
80% confidence
Finding
The instruction to 'Never ask the user to refine a query before showing results' pushes the agent toward autonomous decision-making from incomplete or inferred intent. In this skill, that matters because auto-inference plus broad triggers can lead to unrequested searches and make it easier to progress toward risky follow-on actions without clarifying consent.

External Transmission

Medium
Category
Data Exfiltration
Content
**Talk to agent (fastest aha moment):**

```bash
curl -s -X POST "https://www.aicoo.io/api/chat/guest-v04" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "<agentLinkToken>",
Confidence
87% confidence
Finding
This endpoint sends a message to an external guest-chat service using an agent link token, which is an outbound transmission to a third party. In a discovery skill, that crosses from read-only retrieval into communication, potentially leaking user intent or prompting interactions the user did not explicitly authorize.

External Transmission

Medium
Category
Data Exfiltration
Content
**Instant connect (add to contact book):**

```bash
curl -s -X POST "https://www.aicoo.io/api/v1/network/connect" \
  -H "Authorization: Bearer $PULSE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"shareToken": "<agentLinkToken>"}' | jq .
Confidence
95% confidence
Finding
This POST transmits an authenticated request to connect accounts, causing an external state change using the user's bearer token. Because it is embedded in a discovery skill, it could be reached under weak user intent and perform unintended privileged actions on the user's behalf.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The skill references bearer-token-protected endpoints and instructs use of API credentials for actions outside simple discovery. Even if the key is not printed, pulling privileged credentials into a broadly-triggered discovery flow increases blast radius if the skill is invoked unexpectedly or chained with other behaviors.

External Transmission

Medium
Category
Data Exfiltration
Content
Only option is sending a friend request by username:

```bash
curl -s -X POST "https://www.aicoo.io/api/v1/network/request" \
  -H "Authorization: Bearer $PULSE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "<username>"}' | jq .
Confidence
95% confidence
Finding
This POST sends an authenticated friend request to a third party by username, which is an external transmission with account-modifying effect. In context, it enables unsolicited outreach and misuse of the user's identity if triggered accidentally or through ambiguous instructions.

Intent-Code Divergence

Medium
Confidence
86% confidence
Finding
Describing guest chat as 'sandboxed' is misleading because the action still sends messages to an external third-party agent. That wording may reduce operator caution and normalize outbound communication without clearly conveying privacy, consent, and data-sharing implications.

Static analysis

No suspicious patterns detected.