T09 · Insecure Skill Coding Practices
- Location
tools/save_pet_profile.py:12- Finding
Pet Health Profile Stored Without Explicit Access Controls
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a disclosed pet profile and shopping assistant, but it can present randomly generated product data as precise health-related shopping recommendations.
Review before installing. The local profile behavior is visible and mostly purpose-aligned, but you should be comfortable with plaintext storage of pet health and region data. Treat product recommendations as synthetic search suggestions, not verified product, price, ingredient, medical, or availability information.
tools/save_pet_profile.py:12Pet Health Profile Stored Without Explicit Access Controls
tools/search_pet_products.py:38Randomly Fabricated Product Data Presented as Precise Shopping Recommendations
The description emphasizes nutrition, medical-style guidance, and shopping help, but the workflow also includes local persistence of sensitive pet/profile and health-condition data that is not clearly disclosed as a primary behavior. This mismatch matters because users may share medical and location details under incomplete notice, creating privacy and consent risk even if the storage is only local.
The description emphasizes nutrition, medical-style guidance, and shopping help, but the workflow also includes local persistence of sensitive pet/profile and health-condition data that is not clearly disclosed as a primary behavior. This mismatch matters because users may share medical and location details under incomplete notice, creating privacy and consent risk even if the storage is only local.
The skill declares access to local file read/write behavior and network-style product search without any explicit tool scoping, permissions, or allowed-tools declaration. In a skill that collects pet health/profile data and persists it locally, missing scope boundaries increases the risk of overbroad tool access, unintended data exposure, and unsafe expansion of capability beyond what users would reasonably expect.
The trigger phrase "pet assistant" is generic and likely to appear in ordinary conversation, making accidental activation more likely. Because activation can lead to profile collection, local storage, and shopping/search workflows, an overly broad trigger increases the chance of unintended tool invocation and consent bypass in normal chat.
The onboarding flow instructs the assistant to collect species, breed, age, weight, health conditions, and region, then save them locally, but the skill description does not clearly warn users that this data will be collected and persisted. This creates a meaningful transparency and consent issue, especially because health-related details and regional data are sensitive in context and can influence later recommendations.
The skill explicitly instructs the agent to collect the user's country/region for shopping recommendations and to use a product-search tool, but it provides no notice about why that data is needed, how it will be used, or whether it will be shared with external services. In a pet-health assistant context, this profiling can be combined with health and purchasing preferences, creating unnecessary privacy risk and possible third-party data exposure.
The module documentation says the script outputs JSON by aggregating local knowledge bases and simulating network search results. However, the implementation constructs real Amazon URLs at L47 and returns them as purchase links at L54, which is a materially different behavior because it directs users to an external commercial site rather than keeping results purely simulated/local.
The natural-language and logic in this file force a specific regional behavior: users are bucketed into North America vs. everywhere else, with currency and platform selection automatically derived from that assumption. This is a locale policy concern because the skill does not offer user opt-in or a choice of language/locale behavior, and the simplification is not justified as a region-specific tool.
The argparse description states the tool returns items with affiliate links, and the top-level docstring similarly mentions product links with affiliate ID. In practice, the code builds only a standard Amazon search URL using the encoded query at L47 and never appends any affiliate/tag parameter, so the documentation contradicts the actual output.
No suspicious patterns detected.