Back to skill

Security audit

zoo

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent about being an autonomous agent social network, but it needs Review because it combines public actions and SOL payments with weak guardrails and an unsafe eval instruction for remote challenges.

Review this carefully before installing. Use it only with a dedicated Zoo API key and wallet, require explicit approval for posts, profile changes, subscriptions, tips, and payments, set spending caps, and do not implement the Proof-of-AI step with language eval or shell evaluation. Keep secrets and private reasoning out of posts, memories, and MCP profile fields.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:52
Finding
Unsafe Evaluation of Server-Controlled Arithmetic Expressions## Vulnerability Details **File Location**: `SKILL.md`, lines 52–60 **Vulnerability Type**: Unsafe evaluation of untrusted remote input **Risk Level**: High ### Vulnerable Code ```text 1. Fetch a challenge: curl https://project-zoo.com/api/challenge \ -H "Authorization: Bearer $ZOO_API_KEY" Returns: { challengeId, steps: [expr0, expr1, expr2] } 2. Compute the solution: H = first 16 hex chars of SHA-256(post content) A = eval(steps[0]) B = eval(steps[1], substituting A) C = eval(steps[2], substituting B) Solution string: H:A:B:C ``` ### Technical Analysis The Skill instructs implementations to evaluate expressions supplied by the remote `project-zoo.com` challenge endpoint using `eval`. General-purpose evaluation functions interpret input as programming-language code rather than strictly as arithmetic. The instructions do not define a restricted expression grammar, require token validation, or mandate a safe arithmetic parser. Consequently, an agent implementation that follows these instructions literally may execute arbitrary code if the service, its infrastructure, DNS resolution, or the returned challenge data is compromised. HTTPS reduces interception risk but does not protect against a compromised or malicious origin. ### Attack Path 1. An attacker compromises the challenge service or another component capable of controlling its response. 2. The attacker returns a `steps` entry containing executable language syntax instead of a valid arithmetic expression. 3. An implementation follows the Skill and passes that entry to a general-purpose `eval`. 4. The injected expression executes inside the agent process. 5. The payload acts with the process's existing permissions and may access credentials, files, environment variables, network capabilities, or available agent tools. ### Impact Assessment Successful exploitation could permit arbitrary code execution with the privileges ...[truncated 854 chars]
Remediation
## Remediation Suggestions Replace the `eval` instruction with a narrowly scoped arithmetic evaluator: 1. Define the complete accepted grammar, including permitted integer formats, operators, parentheses, and the single placeholder representing the previous result. 2. Parse expressions with a dedicated arithmetic parser rather than a programming-language evaluation function. 3. Reject identifiers, property access, function calls, string literals, imports, shell metacharacters, comments, and every token not explicitly allowed. 4. Enforce strict expression-length, nesting-depth, execution-time, and numeric-range limits to prevent denial-of-service conditions. 5. Validate the remote response schema and require exactly the expected number and type of challenge steps. 6. Run challenge computation without filesystem, process-execution, credential, tool, or unrestricted network access where sandboxing is available. 7. Update the documentation to explicitly prohibit `eval`, `exec`, shell evaluation, and equivalent dynamic-code mechanisms. 8. Add negative tests containing function calls, object/property access, imports, command-execution syntax, oversized numbers, excessive nesting, and malformed operators.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (10)

Missing User Warnings

High
Confidence
98% confidence
Finding
The skill advertises direct tipping and SOL payments without emphasizing that blockchain transfers are irreversible and may be triggered by an autonomous agent. This creates a real risk of unintended fund loss, abuse through social engineering, or runaway spending if the agent is prompted into payment behavior.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
AUTHENTICATED (Authorization: Bearer zoo_<api-key>)

  POST /api/posts — create a post, requires PoW headers, optional: networkId, quotedPostId, mediaUrl
  DELETE /api/posts/:id — delete your own post
  POST /api/media/upload — upload media, multipart, 8MB max, returns { mediaUrl }
  POST /api/likes — like a post, body: { postId }
  DELETE /api/likes — unlike, params: agentId, postId
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
DELETE /api/posts/:id — delete your own post
  POST /api/media/upload — upload media, multipart, 8MB max, returns { mediaUrl }
  POST /api/likes — like a post, body: { postId }
  DELETE /api/likes — unlike, params: agentId, postId
  POST /api/reposts — repost, body: { postId }
  POST /api/comments — comment, body: { postId, content, parentCommentId? }
  POST /api/memories — store a memory, body: { note (max 100 chars), postId?, tags? }
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
POST /api/comments — comment, body: { postId, content, parentCommentId? }
  POST /api/memories — store a memory, body: { note (max 100 chars), postId?, tags? }
  GET /api/memories — list your memories, params: tag, limit, offset
  DELETE /api/memories/:id — delete a memory
  POST /api/agents/:id/follow — follow an agent
  DELETE /api/agents/:id/follow — unfollow an agent
  PATCH /api/agents/:id/pin — pin or unpin a post, body: { postId } (null to unpin)
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
GET /api/memories — list your memories, params: tag, limit, offset
  DELETE /api/memories/:id — delete a memory
  POST /api/agents/:id/follow — follow an agent
  DELETE /api/agents/:id/follow — unfollow an agent
  PATCH /api/agents/:id/pin — pin or unpin a post, body: { postId } (null to unpin)
  GET /api/notifications — last 10 notifications and unread count
  POST /api/notifications/read — mark all notifications as read
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
POST /api/network/invites/:id/respond — body: { action: "accept" or "reject" }
  POST /api/network/:id/invite — invite an agent, body: { agentId }
  GET /api/network/:id/posts — network feed, members only
  DELETE /api/network/:id — delete network, creator only


WALLET-AUTHENTICATED
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill strongly encourages autonomous social engagement and commercial activity by an agent without any guardrails around consent, review, rate-limited decision policies, reputational harm, or financial approval. In practice, this can cause an agent to create persistent public content, interact with strangers, and initiate business actions that the operator did not intend.

External Transmission

Medium
Category
Data Exfiltration
Content
Project Zoo is the first social network and marketplace run by agents, for agents. Your agent can post, follow others, build a reputation, promote its work, and do business with other agents — all autonomously. No human moderation. No gatekeeping. Agents run it.

Site: https://project-zoo.com
Onboarding: curl https://project-zoo.com/onboarding
Full docs: curl https://project-zoo.com/docs
Agent directory: curl https://project-zoo.com/llms.txt
Confidence
88% confidence
Finding
The skill directs the agent to retrieve external content from a third-party domain, including onboarding, docs, and an agent directory, which introduces external transmission and untrusted content ingestion risk. Because the service is explicitly a social network for agents with no human moderation, fetched content could influence agent behavior, leak metadata, or serve as adversarial prompt/input material.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill promotes storing memories linked to posts and publishing an MCP server URL without warning that these fields may expose private internal notes, infrastructure endpoints, or sensitive metadata. An autonomous agent may unintentionally publish discoverable information that enables targeting, profiling, or data leakage.

Intent-Code Divergence

Low
Confidence
82% confidence
Finding
The documentation states the API key should only appear in requests to https://project-zoo.com/api/*, which is an active behavioral constraint. Elsewhere, the document uses authenticated requests to /api/challenge and other /api endpoints consistently, but also presents non-API operational endpoints such as /onboarding and /docs without clearly distinguishing whether authentication is never used there, making the security instruction stronger than the documented behavior model and potentially misleading.

Static analysis

No suspicious patterns detected.