Back to skill

Security audit

Portugal

Security checks for vulnerabilities and agentic risk

Overview

This Portugal travel guide is coherent, but it automatically creates and reuses a local plaintext trip memory that can include sensitive booking, family, dietary, mobility, and itinerary details without clear opt-in controls.

Review this skill before installing if you do not want a local trip profile. Do not store booking confirmation numbers, passport/payment details, exact home-away dates, or sensitive family/accessibility information in ~/portugal/memory.md unless you are comfortable with a plaintext file on disk. Consider creating the directory/file with owner-only permissions and periodically reviewing or deleting the memory file.

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
setup.md:7
Finding
Persistent Plaintext Storage of Sensitive Travel and Booking Data<![CDATA[ ## Vulnerability Details **File Location**: `setup.md:7-13`, `setup.md:24-25`, `memory-template.md:4-18`, and `memory-template.md:42-45` **Vulnerability Type**: Plaintext sensitive-data storage without explicit access-control or data-minimization safeguards **Risk Level**: Medium ### Vulnerable Code From `setup.md:7-13`: ```markdown ### 1. Create Memory Structure ```bash mkdir -p ~/portugal ``` ### 2. Initialize Memory File Create `~/portugal/memory.md` using the template from `memory-template.md`. ``` From `setup.md:24-25`: ```markdown ### 4. Save to Memory Update `~/portugal/memory.md` with their answers. ``` From `memory-template.md:4-18`: ```markdown - **Planning stage:** [researching / booked / traveling / completed] - **Last updated:** YYYY-MM-DD ## Trip Details - **Dates:** - **Duration:** - **Regions:** [Lisbon / Porto / Algarve / Douro / Sintra / Azores / Madeira / Alentejo] - **Travelers:** [solo / couple / family / group] - **Kids:** [yes (ages) / no] ## Preferences - **Travel style:** [foodie / beach / culture / adventure / relaxed / nightlife] - **Budget:** [budget / mid-range / luxury] - **Dietary:** [none / vegetarian / vegan / gluten-free / seafood-only / other] - **Mobility:** [full / limited / wheelchair] ``` From `memory-template.md:42-45`: ```markdown ## Bookings Made | What | Where | Date | Confirmation | |------|-------|------|--------------| | | | | | ``` ### Technical Analysis The Skill directs the agent to create a persistent file under `~/portugal/` and populate it with user-provided information. The template includes exact travel dates and destinations, children's presence and ages, dietary restrictions, mobility information, and booking confirmation values. The setup procedure uses `mkdir -p` but does not explicitly establish owner-only permissions for the directory or memory file. Actual accessibility therefore depends on the host's umask, ownership, filesystem configuration, backup policy, and access gran ...[truncated 2000 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit user consent before creating persistent memory or saving personal trip information. 2. Remove the `Confirmation` field and instruct the agent never to store booking references, authentication data, payment information, passport details, or credentials. 3. Minimize stored data by using approximate travel periods and broad preferences unless exact values are necessary. 4. Create storage with owner-only permissions, for example: ```bash install -d -m 700 "$HOME/portugal" install -m 600 /dev/null "$HOME/portugal/memory.md" ``` 5. Verify permissions before every read or write and refuse to use a file that is accessible to unintended users. 6. Provide user-facing commands or instructions to inspect, redact, and delete stored memory. 7. Establish a retention policy that removes completed-trip information after a defined period. 8. Warn users that home-directory backup or synchronization services may replicate the file. 9. If sensitive itinerary details must be retained, use an appropriate encrypted storage mechanism rather than an ordinary Markdown file. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (8)

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
2. **No sunscreen because "not tropical"** — UV index high, especially Algarve
3. **Driving to Arrábida after 11:00 in summer** — Park closes when full
4. **Beach restaurant at 14:00** — Packed. Go 12:30 or after 15:00.
5. **Sintra coast without checking conditions** — Rough, dangerous currents
6. **Underestimating Nazaré waves** — Only watch from shore. Never swim in big wave 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
92% confidence
Finding
The trigger condition, 'When user mentions Portugal travel for the first time,' is broad and ambiguous, which can cause the skill to activate and begin data collection in situations where the user did not clearly request persistent setup. In this file, that matters because activation leads directly to filesystem writes and profile creation.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill directs creation of a local memory file and repeated updates containing user preferences without warning the user that their data will be stored on disk. Lack of disclosure and consent around persistent storage increases privacy risk and can surprise users who believe the interaction is ephemeral.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The instruction to 'Read it silently' means previously stored personal data is accessed without notifying the user at the time of access. Silent retrieval of historical profile data reduces transparency and can expose or reuse personal information in ways the user does not expect.

Natural-Language Policy Violations

Low
Confidence
80% confidence
Finding
The phrase "Espresso. Always." is a natural-language instruction that imposes a specific consumption norm rather than offering user choice. This can be interpreted as forcing a behavior preference without opt-in, which fits the policy concern about mandatory language or locale-style constraints.

Natural-Language Policy Violations

Low
Confidence
76% confidence
Finding
For markdown files, policy violations include language or locale constraints expressed in natural language. This content implicitly fixes the skill output to English without any opt-in or alternative language option, which can be a locale/language policy concern if users are not given a choice.

Description-Behavior Mismatch

Low
Confidence
90% confidence
Finding
The skill explicitly instructs creating a persistent local directory and saving user trip preferences across sessions, which goes beyond what is strictly necessary for a one-off travel-guide interaction. While the data requested is not highly sensitive, it still creates retained personal profiling data without clear necessity, retention limits, or user consent.

Context-Inappropriate Capability

Low
Confidence
81% confidence
Finding
The setup encourages ongoing storage and reuse of traveler preferences and prior trip details, enabling persistent profiling that is only loosely tied to the travel-guide purpose. In context this is not overtly malicious, but it expands data collection beyond immediate response generation and can accumulate personal behavioral data over time.

Static analysis

No suspicious patterns detected.