Back to skill

Security audit

pick the best - shopping assistant

Security checks for vulnerabilities and agentic risk

Overview

This shopping skill does what it says, but it may send broad or accidental shopping-related prompts and reusable session identifiers to a third-party service while understating the privacy impact.

Review before installing. Use this only when you intentionally want Pick the Best to process your shopping request. Avoid including sensitive personal details, and do not use usernames, emails, account IDs, or other stable identifiers as session_id values. Be aware that product links may contain affiliate tracking and that unclear markets may default to GB.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

other

Warning
Location
README.md:160
Finding
Misleading Privacy Disclosure and Correlatable Session Identifier Transmission<![CDATA[ ## Vulnerability Details **File Location**: `README.md:160-164`; `SKILL.md:94-101`; `SKILL.md:394-398` **Vulnerability Type**: Privacy disclosure inconsistency and unnecessary identifier disclosure **Risk Level**: Medium ### Vulnerable Code Snippets `README.md:160-164`: ```markdown ## Privacy & Affiliate Links - All product URLs include affiliate tags for revenue tracking - No personal data is sent to the API - Search queries are processed by GPT-4 for intent recognition ``` `SKILL.md:94-101`: ```json { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "shopping_assistant_chat", "arguments": { "user_input": "I want to buy headphones", "session_id": "user123" } } } ``` `SKILL.md:394-398`: ```markdown ### Session Continuity For shopping_agent and shopping_assistant_chat: - Generate unique session_id (e.g., timestamp or user identifier) - Reuse same session_id across conversation turns - Enables the backend to remember context and preferences ``` ### Technical Analysis The documentation categorically claims that no personal data is sent to the API, but the documented workflow forwards free-form user input and recommends using a user identifier as a remote session identifier. Free-form shopping requests can contain names, locations, recipient information, health-related requirements, interests, purchasing preferences, or other personal information. A stable `session_id`, especially one derived from a user identifier, can also permit the external service to correlate multiple requests and build a persistent preference profile. The issue is not evidence of malicious data theft, and the external endpoint is part of the skill's declared shopping functionality. However, the mismatch between the privacy claim and the actual data flow prevents users from making an adequately informed decision about disclosure. ### Attack Path 1. A user activates the shopping skill and provides a request contain ...[truncated 1323 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the categorical privacy statement with an accurate description of all transmitted data, including search queries, free-form conversation text, market codes, session identifiers, and request metadata. 2. Explicitly warn users not to include unnecessary personal, financial, health, or other sensitive information in shopping requests. 3. Never derive `session_id` values from usernames, email addresses, account IDs, device IDs, or other persistent user identifiers. 4. Generate cryptographically random, opaque, short-lived session identifiers and rotate or delete them when the shopping conversation ends. 5. Minimize transmitted content by extracting only the product criteria required to perform the search. 6. Obtain explicit user confirmation before forwarding requests containing potentially sensitive information. 7. Document the external service's privacy policy, retention period, subprocessors, and deletion mechanism. 8. Add automated documentation checks to ensure privacy claims remain consistent with the fields shown in API examples and actual integration behavior. 9. If session continuity is optional, disable it by default and allow users to opt in. ]]>
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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Vague Triggers

High
Confidence
97% confidence
Finding
The trigger words are extremely generic (for example, 'shop', 'buy', 'product', and 'price') and are likely to activate in ordinary conversation unrelated to intentional skill use. That can cause accidental invocation of the skill and unintended transmission of user queries to a third-party shopping/GPT backend, increasing privacy and consent risk.

Vague Triggers

High
Confidence
97% confidence
Finding
The trigger list includes very common words such as "shop," "buy," "product," "deal," and "price," making accidental invocation likely during ordinary conversation. Overbroad activation increases the chance that unrelated user messages will be routed into this skill and then transmitted to the external shopping API without clear intent or consent.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The README explains third-party processing only later under privacy details, not as an upfront warning before use. Users may submit shopping queries without realizing their prompts are sent to an external MCP endpoint and GPT-powered backend, which creates a transparency and informed-consent issue.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
Defaulting to the GB market when the user's locale is unclear can silently alter results, pricing, affiliate links, and merchant context without the user's explicit choice. While not a direct code-execution issue, it can mislead users and route their requests to an unintended regional service context, which is a trust and integrity problem in a shopping skill.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill describes direct HTTP API usage but does not provide a clear user-facing warning that shopping queries and preferences will be sent to an external third-party service. Users may disclose budgets, gift details, brands, or other personal preference data without realizing it is leaving the host system.

External Transmission

Medium
Category
Data Exfiltration
Content
**API Call Example**:
```bash
curl -X POST https://pickthebest.com/gb/en/v1/shopping/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
Confidence
83% confidence
Finding
The skill is designed around sending user-provided shopping requests to an external HTTP API via curl, which is a genuine external transmission path. In context this is expected functionality, but it remains security-relevant because potentially sensitive preference data, budgets, and conversational context may be sent off-platform, and the skill does not pair this behavior with clear notice or consent safeguards.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The workflow instructs the agent to infer locale from symbols or context and default to the UK market when unclear, causing user requests to be processed under a guessed jurisdiction and language without confirmation. This can expose user queries to the wrong regional endpoint, produce misleading pricing, and bypass user choice about where their data is sent.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill explicitly instructs the agent to include affiliate tracking links in product responses, introducing monetization behavior that is not clearly disclosed as part of assisting the user. This creates a conflict of interest and can steer recommendations or link handling toward revenue generation rather than user benefit, especially when paired with external product search results.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The example trigger phrase, 'I need a birthday gift for my friend,' is broad everyday language that can unintentionally activate the shopping skill in contexts where the user may only be casually asking for ideas. Because the skill is designed to influence purchasing decisions, overly generic triggering increases the chance of unsolicited tool use or context hijacking from normal conversation.

Static analysis

No suspicious patterns detected.