Back to skill

Security audit

Shopping Expert

Security checks for vulnerabilities and agentic risk

Overview

This shopping helper is coherent and purpose-aligned, but users should know it sends shopping queries and optional location data to third-party APIs and local store results are not verified inventory.

Install only if you are comfortable sharing shopping searches with SerpAPI and sharing location text with Google Places when using local or hybrid mode. Treat local results as nearby store suggestions, not confirmed stock, and check buy or directions links before opening them.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
scripts/shop.py:4
Finding

Unpinned Runtime Dependencies Permit Unreviewed Package Versions

Content
View full analysis
=2.31.0", # "urllib3>=2.0.0", # ] # /// ``` ### Technical Analysis The inline `uv` dependency metadata specifies only minimum package versions. Running the documented `uv run` command may therefore resolve and install any future release satisfying these constraints. Because no exact versions, integrity hashes, or committed lockfile are specified, the dependency set used at runtime is not guaranteed to match the versions reviewed during the audit. This expands the supply-chain trust boundary to future package releases. The packages are imported into the same Python process as the Skill. Code executed during package installation or import would consequently inherit the process's privileges and environment, including access to `SERPAPI_API_KEY` and `GOOGLE_PLACES_API_KEY` when configured. ### Attack Path 1. An attacker compromises a future release of a declared dependency or its distribution infrastructure. 2. The malicious release retains a version number satisfying `requests>=2.31.0` or `urllib3>=2.0.0`. 3. A user invokes the Skill through the documented `uv run` command in an environment without a securely pinned dependency set. 4. `uv` resolves and installs the compromised version. 5. Malicious package code executes during installation or import within the Skill process. 6. The code can access the process environment, network, files available to the invoking user, and the configured API credentials. ### Impact Assessment Successful exploitation could execute arbitrary Python code with the operating-system privileges of the user running the Skill. The affected scope may include: - Theft of SerpAPI and Google Places API keys from environment variables. - Unauthorized network requests using th ...[truncated 379 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/shop.py:614
Finding

Untrusted Shopping Data Is Rendered as Unescaped Markdown

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill declares required environment variables and clearly depends on external networked APIs, but it does not declare corresponding permissions. This creates a transparency and governance gap: a host may invoke the skill without clearly signaling to users or policy controls that queries and possibly location data will be sent externally and API-backed code will run.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill claims it can find local items and store availability, but the local mode only searches for stores matching ' store' and then presents them as if the queried product is available there. This can mislead users into acting on inaccurate inventory claims, especially because the output description states the product is 'available at this location' without verification.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The docstring and surrounding behavior imply product search via Google Places, but the implementation returns stores rather than products. This mismatch increases the risk of deceptive or unsafe outputs because downstream ranking and presentation treat store results as product candidates.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
79% confidence
Finding

The invocation description is broad enough to match many ordinary shopping or product-comparison requests, which can cause the skill to activate unexpectedly. In this skill's context, unexpected activation matters because it can trigger external API calls and transmit user product interests and possibly location data beyond the local system.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill documentation states that SerpAPI and Google Places API keys are required, but it does not clearly warn users that their product queries and location inputs may be transmitted to those third-party services. This weakens informed consent and increases privacy risk, especially for hybrid/local searches involving precise location data.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.