Back to skill

Security audit

Valencia

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Valencia guide, but it asks users to store sensitive personal and government details in a persistent plaintext profile without privacy safeguards.

Before installing, treat this as a local Markdown reference, not authoritative legal or tax advice. Do not put full NIE, SIP, Social Security numbers, exact address, third-party contacts, or detailed immigration and income information into ~/valencia/profile.md; use coarse statuses or masked values, restrict file permissions, and verify visa, tax, healthcare, school, and business requirements with official sources or qualified local professionals.

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:8
Finding
Persistent Plaintext Storage of Sensitive Personal and Government Information<![CDATA[ ## Vulnerability Details **File Location**: `setup.md:21`; `memory-template.md:8-31, 58-64, 108-114, 144-147` **Vulnerability Type**: Plaintext sensitive-data storage without data minimization or access-control guidance **Risk Level**: Medium ### Vulnerable Code `setup.md:21`: ```markdown Copy `memory-template.md` to `~/valencia/profile.md` and fill in: ``` `memory-template.md:8-31`: ```markdown ### Legal Status - **Nationality**: [Your country] - **EU citizen**: [Yes | No] - **Visa type**: [Tourist | Digital Nomad | Work | Student | Non-lucrative | Other] - **Visa status**: [Applied | Approved | Need to apply | N/A (EU)] - **NIE status**: [Have | Applied | Need] - **Empadronamiento**: [Done | Pending | N/A] ### Work Situation - **Employment type**: [Remote | Local job | Self-employed | Student | Retired | Looking] - **Employer location**: [Country if remote] - **Industry**: [Your field] - **Income range**: [For cost planning] ### Family - **Household**: [Solo | Couple | Family with kids] - **Children ages**: [If applicable] - **School needs**: [Public | International | Homeschool | N/A] - **Pets**: [Yes/No and type] ``` `memory-template.md:58-64`: ```markdown ### Current Status - **Housing found**: [Yes | Searching | Not started] - **Address**: [If found] - **Neighborhood**: [If found] - **Contract until**: [If found] ``` `memory-template.md:108-114`: ```markdown ### Contacts | Name | Role | Contact | |------|------|---------| | | Gestoría | | | | Doctor | | | | Landlord | | | | | | ``` `memory-template.md:144-147`: ```markdown ### Documents - NIE number: ___ - SIP number: ___ - Social Security: ___ ``` ### Technical Analysis The setup guide directs users to create a persistent profile at `~/valencia/profile.md`. The supplied template encourages that file to contain sensitive information, including: - Full government-issued identifiers - Healthcare and Social Security identifiers - Residential address - Income range and employment de ...[truncated 2734 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Remove unnecessary identifiers** - Delete fields requesting full NIE, SIP, and Social Security numbers. - Track only workflow status, such as `NIE obtained: Yes`, rather than the identifier itself. - If partial identification is genuinely necessary, retain only a masked suffix such as `***1234`. 2. **Minimize personal information** - Replace the exact address with a neighborhood or district. - Avoid storing children's exact ages, third-party contact details, and precise income unless essential. - Clearly label every sensitive field as optional. 3. **Add explicit privacy warnings** - Warn users not to enter passwords, authentication tokens, payment-card details, full government identifiers, medical records, or document scans. - Explain that other local applications and Agents may be able to read plaintext files. 4. **Use a private storage location and restrictive permissions** - Store profiles in an application-specific private data directory rather than a general-purpose folder. - On POSIX systems, create the directory with mode `0700` and profile files with mode `0600`. - Provide equivalent access-control instructions for Windows. - Verify existing permissions rather than assuming the environment uses a secure `umask`. 5. **Protect data at rest** - Offer encrypted storage for any information that must persist. - Do not embed encryption keys beside the encrypted profile. - Avoid automatic synchronization to third-party cloud services unless the user knowingly opts in. 6. **Define retention and deletion behavior** - Document how users can securely remove the profile when it is no longer needed. - Recommend periodic review and deletion of obsolete addresses, contacts, and legal-status information. 7. **Restrict subsequent access** - Require explicit user consent before another Skill or Agent reads the profile. - Read only fields necessary for the current request r ...[truncated 55 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (19)

Ae1

High
Category
analysis-evasion
Content
| Overview & dining scene | `food-overview.md` |
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
| Horarios, tipping, reservations | `food-practical.md` |
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Hidden Instructions

High
Category
Prompt Injection
Content
# Valencia — Personal Profile

## Status
<!-- Current stage of your Valencia journey -->
- **Stage**: [Researching | Planning | Moving | Settled]
- **Arrival date**: [Date or planned date]
- **Expected duration**: [Visit | 1-2 years | Long-term | Permanent]
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The skill activates on essentially any Valencia-related request, which is overly broad and can cause unintended invocation on generic queries about the city. While this is not a direct code-execution issue, it can route users into the skill when a narrower or more appropriate capability should handle the request, increasing the chance of irrelevant guidance or context leakage across tasks.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The section explicitly frames learning Spanish as the expected path for integration and later tells readers not to 'only speak English' and to learn basic Spanish. This is a natural-language locale preference presented as a normative requirement rather than an optional choice, with no user opt-in or accommodation for language preference.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The homeschooling section presents a legally sensitive topic as a practical option while describing it as 'tolerated' and a 'gray area,' but it does not clearly instruct readers to verify current law or obtain official/legal advice before acting. In a relocation/education guidance skill, users may rely on this as actionable compliance guidance and could expose themselves to truancy, child welfare, or administrative consequences if the information is outdated or incomplete.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The template explicitly solicits sensitive personal and immigration-related data such as nationality, visa status, NIE status, employment details, income range, and family information without any privacy notice, minimization guidance, or safe-handling warning. In an agent memory context, this increases the risk of unnecessary collection, retention, and downstream exposure of personally identifiable and legally sensitive data.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
Later sections of the template request contacts, exact address, emergency references, and document identifiers including NIE, SIP, and Social Security numbers, again without warning users about privacy implications. If persisted in memory or logs, these fields could enable identity theft, stalking, profiling, or unauthorized access to personal accounts and services.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
This file gives detailed immigration, visa, residency, and tax guidance with specific thresholds, timelines, and eligibility statements, but it does not warn users that these rules can change, vary by consulate, and depend on individual circumstances. A user could rely on outdated or oversimplified information and make costly legal, travel, or tax decisions, especially because the skill presents the material as authoritative and actionable.

Missing User Warnings

Low
Confidence
96% confidence
Finding
This file provides specific legal, tax, payroll, and compliance guidance, including rates, thresholds, deadlines, and procedural steps, without a prominent warning that these rules can change and may vary by circumstance. Users may reasonably rely on outdated or oversimplified information when forming a business, hiring staff, or filing taxes, which can lead to noncompliance, penalties, or liability.

Natural-Language Policy Violations

Low
Confidence
81% confidence
Finding
The phrase 'Valencia's biggest draw for northern Europeans' frames the guidance around a specific audience perspective rather than neutrally presenting climate information. This is a natural-language locale/audience preference that is not offered as an opt-in or user choice.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The dedicated heading 'For Northern Europeans' gives preferential treatment to one regional audience and may conflict with language/locale neutrality expectations. While other regions are mentioned later, this sectioning still imposes a specific locale framing rather than inviting user selection.

Natural-Language Policy Violations

Low
Confidence
75% confidence
Finding
Lines L039-L040 state that Valencians eat paella at lunch 'never dinner' and that it is 'not served individually,' presenting cultural preferences as hard rules. This is a natural-language policy concern because it dictates behavior in a rigid way rather than offering user choice or clarifying that these are traditional norms.

Natural-Language Policy Violations

Low
Confidence
80% confidence
Finding
Lines L103-L115 provide a fixed Spanish phrase set for dietary requests, and similar sections elsewhere assume Spanish usage as the default interaction language. Because the file does not offer an explicit language choice or opt-in, this can be interpreted as a locale/language preference being imposed rather than optional guidance.

Natural-Language Policy Violations

Low
Confidence
80% confidence
Finding
The guide highlights 'English-speaking available' as a recommendation, which can embed an implicit language preference rather than offering neutral multilingual options. Under the policy rule, natural-language content that pushes a specific language without user opt-in can be a locale-policy concern.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
The guidance tells users to "Learn basic Spanish" for emergencies, which imposes a language expectation without any explicit opt-in or alternative language support. Under the stated policy, locale or language constraints should either be optional or clearly justified with user choice.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
Line L299 states 'Not learning Spanish' as a common mistake, which frames use of a specific language as a normative requirement. This can be read as a language-policy preference without user opt-in or acknowledgement of alternatives.

Natural-Language Policy Violations

Low
Confidence
80% confidence
Finding
Line L185 states 'LinkedIn profile in English' as a standalone tip, which can be read as a prescriptive language preference rather than an optional suggestion. The policy requires flagging language or locale guidance that forces a specific language without user opt-in, and this line does not offer a choice or explain when another language may be appropriate.

Natural-Language Policy Violations

Low
Confidence
79% confidence
Finding
The file contains natural-language guidance about language use and presents Spanish as universally spoken in a way that removes nuance and user choice. Under the policy, locale or language constraints should either offer user opt-in or be clearly justified; this phrasing is overly absolute.

Static analysis

No suspicious patterns detected.