Back to skill

Security audit

New Zealand

Security checks for vulnerabilities and agentic risk

Overview

This is a normal New Zealand travel guide, but it needs review because it automatically saves and silently reuses plaintext trip details that may include sensitive booking, family, dietary, or mobility information.

Review this before installing if you do not want a local trip-memory file. If you use it, avoid storing passport numbers, payment details, ticket barcodes, full booking confirmation codes, or exact sensitive family/accessibility details in ~/new-zealand/memory.md, and delete or edit that file when the trip is done.

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

Warning
Location
memory-template.md:9
Finding
Persistent Plaintext Storage of Personal Travel and Booking Data<![CDATA[ ## Vulnerability Details **File Location**: `setup.md:5-11, 23-38`; `memory-template.md:9-42` **Vulnerability Type**: Plaintext storage of personal and booking information without explicit consent, access-control hardening, or retention controls **Risk Level**: Medium ### Vulnerable Code `setup.md:5-11`: ```markdown ## 1. Create Memory ```bash mkdir -p ~/new-zealand ``` Create `~/new-zealand/memory.md` from `memory-template.md`. ``` `setup.md:23-38`: ```markdown ## 3. Save the Important Friction Points Track: - arrival city and departure city - ferry needs - tolerance for long drives - weather-sensitive priorities - already-booked anchors ## 4. Returning Users If `~/new-zealand/memory.md` exists: 1. Read it silently 2. Reuse known route and style preferences 3. Ask what changed since last plan 4. Update memory with new constraints ``` `memory-template.md:9-27, 39-42`: ```markdown ## Trip Details - **Dates:** - **Duration:** - **Island focus:** [North / South / Both] - **Entry/exit cities:** - **Travelers:** [solo / couple / family / group] - **Kids:** [yes (ages) / no] ## Preferences - **Travel style:** [foodie / outdoors / road-trip / family / luxury / mixed] - **Budget:** [budget / mid-range / luxury] - **Dietary:** [none / vegetarian / vegan / gluten-free / other] - **Mobility:** [full / limited / wheelchair] - **Transport:** [rental car / campervan / domestic flights / mixed] ## Constraints - **Drive tolerance:** [short only / moderate / long days OK] - **Weather sensitivity:** - **Hiking level:** [light walks / day hikes / serious tramping] - **Already booked:** - **Must-do items:** ## Bookings Made | What | Where | Date | Confirmation | |------|-------|------|--------------| | | | | | ``` ### Technical Analysis The skill creates a persistent directory and memory file under the user's home directory, then records trip dates, entry and exit locations, children's ages, mobility limitations, dietary requirements, existing bookings, a ...[truncated 2629 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Require explicit persistence consent** - Ask whether the user wants trip details saved before creating or updating `memory.md`. - Provide a session-only mode that does not write to disk. 2. **Minimize retained data** - Do not store children's exact ages by default. - Replace mobility and dietary details with a minimal planning flag unless the user explicitly requests persistence. - Store generalized travel windows rather than exact dates where exact values are unnecessary. 3. **Exclude sensitive reservation values** - Remove the `Confirmation` column from the default template. - If booking tracking is needed, store a non-sensitive label such as `booked: yes` rather than the complete confirmation code. - Warn users not to store payment details, passport information, account credentials, ticket barcodes, or authentication codes. 4. **Enforce restrictive filesystem permissions** - Create the directory with permissions limited to its owner, for example: ```bash install -d -m 700 "$HOME/new-zealand" ``` - Create or harden the memory file with owner-only permissions: ```bash touch "$HOME/new-zealand/memory.md" chmod 600 "$HOME/new-zealand/memory.md" ``` - Avoid relying solely on the environment's inherited `umask`. 5. **Add retention and deletion controls** - Document how users can inspect, edit, clear, or delete stored memory. - Offer automatic deletion after the trip or after a defined inactivity period. - Ask whether completed-trip details should be retained before moving the status to `completed`. 6. **Make reuse transparent** - Inform the user when saved memory is loaded rather than requiring it to be read silently. - Summarize which stored fields will be reused and allow the user to exclude individual fields. 7. **Protect writes** - Use atomic file replacement with restrictive permissions to reduce accidental disclosure or corruption. - Validate that the target ...[truncated 93 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- Treating all beaches as relaxed Mediterranean swimming beaches.
- Taking children into exposed surf zones because locals are nearby.
- Planning Cathedral Cove-type stops without checking current access conditions.
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- Treating all beaches as relaxed Mediterranean swimming beaches.
- Taking children into exposed surf zones because locals are nearby.
- Planning Cathedral Cove-type stops without checking current access conditions.
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The phrase "When the user first brings up New Zealand travel" is an ambiguous activation condition for a markdown skill. It does not define clear trigger phrases, scope boundaries, or exclusion cases, so ordinary conversation about New Zealand travel could unintentionally invoke the setup behavior.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill instructs the agent to create persistent local storage for trip details without telling the user that their information will be saved. This creates a privacy risk because itinerary, dates, constraints, and preferences can be retained across sessions without informed consent or clear retention boundaries.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The instruction to read previously saved memory 'silently' means the skill accesses stored user information without notifying the user at the time of access. Even if the data is only reused for convenience, undisclosed retrieval of prior personal preferences and travel history undermines transparency and can violate user expectations around privacy.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
This skill content is written only in English and does not indicate that users can opt into another language or locale. Under the stated policy, forcing a specific language without user choice can be a natural-language policy violation unless the locale constraint is explicitly documented and justified.

Missing User Warnings

Low
Confidence
79% confidence
Finding
This markdown template includes a 'Bookings Made' section with a 'Confirmation' field, which invites users to record reservation identifiers or other potentially sensitive travel data. The file does not include any warning or guidance about avoiding sensitive personal or booking information, despite collecting data that could affect user privacy.

Static analysis

No suspicious patterns detected.