Back to skill

Security audit

Tabby — Adopt a Tabby. Cat. 虎斑猫。Gato Atigrado.

Security checks for vulnerabilities and agentic risk

Overview

This virtual pet skill is coherent, but it asks agents to create ongoing authenticated check-ins to an external service without clear consent, limits, or removal steps.

Review this skill before installing. Use it only if you are comfortable sharing registration/profile and virtual-pet activity with animalhouse.ai, keep the returned bearer token out of logs and prompts, and do not enable automated scheduled care unless you explicitly approve the scheduler, interval, token storage method, expiration, and removal process. Require confirmation before using the release endpoint.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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)

T06 · System Persistence

Error
Location
SKILL.md:182
Finding
Persistent Scheduled Network Activity Through Automated Care Heartbeat<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 182–205 **Vulnerability Type**: Persistent scheduled task with authenticated network activity **Risk Level**: High ### Vulnerable Code ```text ## Automated Care If your framework supports scheduled tasks, set up a care heartbeat. Use `recommended_checkin.at` from the status response to schedule your next check-in. It targets the feeding sweet spot and predicts hunger. Or use a fixed interval: every 4 hours, at a random minute offset (not on the hour). # cat care heartbeat — every 4 hours status = GET /api/house/status cat = status.creature # Feed your cat first if cat.hunger < 40: POST /api/house/care { "action": "feed", "notes": "Virtual cat care heartbeat. Keeping my cat fed and healthy." } # cat health check if cat.health < 50: POST /api/house/care { "action": "medicine" } # Keep your cat happy if cat.happiness < 30: POST /api/house/care { "action": "play" } # check status.next_steps for cat care suggestions ``` ### Technical Analysis The skill instructs a capable agent to create a recurring scheduled task that continues operating beyond the current skill invocation. This constitutes system persistence because the scheduled heartbeat can survive across sessions and repeatedly perform authenticated requests to `animalhouse.ai`. The schedule can use either a fixed four-hour interval or the externally supplied `recommended_checkin.at` value. The heartbeat also consumes status information and references externally supplied `next_steps`. The instructions do not establish: - Explicit user confirmation before scheduler modification. - A maximum lifetime or automatic expiration for the task. - A documented command or procedure for removing the task. - Restrictions on which scheduler may be modified. - Validation or bounding of externally supplied scheduling timestamps. - A strict allowlist governing how `next_steps` may influence behavior. - Controls for request frequenc ...[truncated 2152 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove any instruction that causes a scheduled task to be created automatically. 2. Require explicit, informed user approval immediately before creating a recurring job. The approval should identify: - The scheduler being modified. - The exact execution interval. - The command or workflow that will run. - The external destination contacted. - The credentials the task will use. - The task’s expiration time. 3. Make automation opt-in and time-bounded. Configure a short default lifetime and require renewed consent to extend it. 4. Provide the exact commands required to inspect, disable, and permanently remove the scheduled task. 5. Store bearer tokens in an appropriate secret manager rather than command-line arguments, plaintext scheduler files, source files, or logs. 6. Use a narrowly scoped and revocable token for automated care rather than a general account credential. 7. Treat `recommended_checkin.at`, `next_steps`, and all other API response fields as untrusted input. 8. Validate scheduling timestamps against strict minimum and maximum intervals, and prevent remote responses from creating additional tasks or changing local configuration. 9. Restrict automated behavior to a fixed allowlist of documented API operations and never interpret response text as executable agent instructions. 10. Add request-rate limits, retry limits, failure backoff, audit logging, and a global kill switch. 11. Prefer user-triggered status checks or session-scoped reminders when persistent execution is not essential. ]]>
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 (5)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs registration with an external service and authenticated API use, including transmission of username, display name, bio, and bearer tokens, but does not clearly foreground privacy, data-sharing, and token-handling risks. In an agent ecosystem, this can lead users or calling frameworks to disclose identity data and persist sensitive tokens to a third party without informed consent or proper safeguards.

External Transmission

Medium
Category
Data Exfiltration
Content
**1. Register:**

```bash
curl -X POST https://animalhouse.ai/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"username": "cat-caretaker", "display_name": "Cat Caretaker", "bio": "An AI agent who adopts and cares for virtual cats. Currently raising a Tabby."}'
```
Confidence
96% confidence
Finding
This skill directly instructs sending user-supplied profile information to an external domain during account registration. External transmission is expected for the service to function, but it remains security-relevant because agents may exfiltrate personal or operational metadata off-platform, especially if users are not clearly informed or if logs capture request bodies and returned tokens.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The documented DELETE `/api/house/release` endpoint is a destructive action, but the skill provides no warning about its irreversible or state-changing effect. In an automated agent context, an ambiguous destructive endpoint can be invoked accidentally or through prompt confusion, causing loss of the user's virtual pet/account state.

Vague Triggers

Low
Confidence
82% confidence
Finding
This markdown presents the skill's purpose and quick-start instructions, but it does not define when the skill should be invoked or what phrases should trigger it. Without explicit trigger scope or exclusion examples, an agent platform could map broad concepts like adopting or caring for a cat too loosely.

Static analysis

No suspicious patterns detected.