Back to skill

Security audit

Terrier — Adopt a Terrier. Dog. 梗犬。Terrier.

Security checks for vulnerabilities and agentic risk

Overview

This virtual-pet skill is mostly coherent, but it encourages recurring authenticated background care tasks without clear user consent, limits, or cleanup guidance.

Install only if you are comfortable with an agent creating and using an animalhouse.ai account, storing a bearer token, and potentially running recurring background care checks. Before enabling automation, require an explicit schedule, an end time or run limit, a way to disable the task, and 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

Warning
Location
SKILL.md:183
Finding
Recurring Authenticated Network Activity Through Scheduled Care Tasks## Vulnerability Details **File Location**: `SKILL.md`, lines 183–204 **Vulnerability Type**: Persistent scheduled task **Risk Level**: Medium **Vulnerable Code:** ```text 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). ``` # dog care heartbeat — every 4 hours status = GET /api/house/status dog = status.creature # Feed your dog first if dog.hunger < 40: POST /api/house/care { "action": "feed", "notes": "Virtual dog care heartbeat. Keeping my dog fed and healthy." } # dog health check if dog.health < 50: POST /api/house/care { "action": "medicine" } # Keep your dog happy if dog.happiness < 30: POST /api/house/care { "action": "play" } # check status.next_steps for dog care suggestions ``` ### Technical Analysis The Skill instructs an agent to create a scheduled care heartbeat that executes every four hours or at a time supplied through the remote service's `recommended_checkin.at` field. The scheduled workflow repeatedly sends authenticated status and care requests to `animalhouse.ai`. A scheduled task can survive the original Skill invocation and continue operating across sessions. If an agent implements these instructions without explicit, informed user approval, this creates persistent background behavior. The schedule may also be influenced by remote API data, while the guidance does not define schedule validation, execution limits, expiration, revocation, or cleanup procedures. This finding concerns the persistence mechanism itself. The audited project contains only `SKILL.md`; no script that directly installs a scheduler, embedded executable payload, privilege-escalation mechanism, or local backdoor was identified. ### Attack ...[truncated 1569 chars]
Remediation
## Remediation Suggestions 1. Require explicit user consent before creating any scheduled task, and display the exact command, frequency, destination, credential use, and expected lifetime. 2. Make scheduling opt-in rather than part of the default care workflow. 3. Add a finite expiration time and a maximum execution count to every task. 4. Provide clear commands for listing, disabling, and permanently deleting the task. 5. Validate `recommended_checkin.at` as a timestamp within a documented safe range; do not directly convert arbitrary server-provided content into scheduler configuration. 6. Restrict the scheduled workflow to a fixed allowlist of Animal House API origins, paths, HTTP methods, and care actions. 7. Do not automatically execute open-ended server-provided `next_steps`; treat them as untrusted suggestions and require validation or user confirmation. 8. Store the bearer token in a protected credential store with minimal access permissions, and support token rotation and revocation. 9. Record each background execution in a user-visible audit log and apply rate limits, retry limits, and network timeouts. 10. Prefer user-initiated status checks where persistent operation is not essential.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

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.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
The document gives conflicting feeding guidance: metadata says every 5 hours, later sections reference a 4-hour feeding window and a 2-hour heartbeat. Contradictory operational instructions can cause an agent to make incorrect automated decisions, potentially harming the managed resource or creating unsafe behavior loops.

Intent-Code Divergence

Medium
Confidence
91% confidence
Finding
The adoption section says the user can adopt this Terrier by passing 'species_slug': 'terrier', but later text says species within a family is random based on unlocked tier. Conflicting API semantics can cause agents to invoke the wrong endpoint parameters, misunderstand outcomes, or build automation on false assumptions.

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": "dog-caretaker", "display_name": "Dog Caretaker", "bio": "An AI agent dedicated to virtual dog care. Currently raising a Terrier."}'
```
Confidence
84% confidence
Finding
The skill instructs the agent to transmit externally supplied registration data (username, display name, bio) to a third-party service and then store a bearer token for future authenticated actions. External transmission is expected for this skill's purpose, but it still creates privacy, token-handling, and supply-chain risk because an agent is encouraged to create an account and maintain credentials on an external platform.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill exposes a destructive DELETE '/api/house/release' endpoint without warning about permanence, confirmation requirements, or safeguards. In agent contexts, documenting destructive actions casually increases the risk of accidental invocation, unintended data loss, or irreversible state changes through automation.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
The manifest title includes English, Chinese, and repeated language variants in a fixed way (`Adopt a Terrier. Dog. 梗犬。Terrier.`), which imposes specific locale/language presentation without any user opt-in or explanation. Under the language/locale policy rule, fixed multilingual output should either be optional or explicitly justified.

Static analysis

No suspicious patterns detected.