Back to skill

Security audit

Ecommerce Assistant

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to be an unfinished ecommerce demo that can query arbitrary store URLs and present mock product and price data as real research results.

Review this skill carefully before installing. Do not rely on its Amazon search or price alerts for business decisions unless the mock/demo behavior is removed or clearly labeled, and only analyze Shopify URLs you trust until URL validation is added. Expect local files under ~/.ecommerce-assistant and optional report/output files when running the scripts.

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
scripts/shopify_analyzer.py:15
Finding

Server-Side Request Forgery Through Unrestricted Shopify Store URLs

Content
View full analysis
bool: """Check if URL is a Shopify store.""" try: parsed = urlparse(url) domain = parsed.netloc or parsed.path # Direct Shopify domain if '.myshopify.com' in domain: return True # Check for Shopify indicators req = urllib.request.Request( f"https://{domain}", headers={'User-Agent': 'Mozilla/5.0 (compatible; Analyzer/1.0)'} ) try: with urllib.request.urlopen(req, timeout=10) as response: content = response.read().decode('utf-8', errors='ignore').lower() return 'shopify' in content or 'cdn.shopify.com' in content except: return False except: return False def get_shopify_products(store_url: str, limit: int = 250) -> List[Dict]: """ Fetch products from Shopify store using public API. """ parsed = urlparse(store_url) domain = parsed.netloc or parsed.path if not domain.startswith('http'): domain = f"https://{domain}" products_url = f"{domain}/products.json?limit={limit}" try: req = urllib.request.Request( products_url, headers={'User-Agent': 'Mozilla/5.0 (compatible; Analyzer/1.0)'} ) with urllib.request.urlopen(req, timeout=15) as response: data = json.loads(response.read().decode('utf-8')) return data.get('products', []) ``` ### Technical Analysis The analyzer accepts a store URL from the command line and uses its parsed host directly in outbound `urllib.request.urlopen` calls. It does not restrict requests to approved Shopify domains and does not reject loopback, private, link-l ...[truncated 2875 chars]
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 (14)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

A second, more specific description-behavior mismatch indicates the skill may present mocked or random price checks and a narrow local workflow as if it were broad multi-platform intelligence. This can mislead downstream consumers, especially if agents use the outputs for autonomous reporting, purchasing, or competitor tracking decisions.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

A second, more specific description-behavior mismatch indicates the skill may present mocked or random price checks and a narrow local workflow as if it were broad multi-platform intelligence. This can mislead downstream consumers, especially if agents use the outputs for autonomous reporting, purchasing, or competitor tracking decisions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file advertises analyzing Shopify stores' inventory and pricing and tracking prices with alerts, but it does not include any user-facing warning about how data is collected, whether third-party sites are queried, or any rate-limit/privacy considerations. Under the markdown-specific SQP-2 criteria, behavior that may affect privacy or system integrity should be disclosed in the skill description.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
79% confidence
Finding

The skill advertises executable scripts with network, file read, and file write behavior but does not declare any tool scope or permission boundaries. In an agent environment, this can lead to overbroad invocation and execution with more capability than users or orchestrators expect, increasing the chance of unintended external requests or local file modifications.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The description is broad enough to match many generic research, analysis, and reporting requests, which can cause the skill to be selected in contexts the user did not intend. Because the skill also suggests network and file operations, overbroad routing increases the risk of unnecessary data exposure, unexpected external access, or execution of irrelevant scripts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The examples show operations that may write output files and send data externally, including generating files and emailing reports, without prominently warning users. This reduces informed consent and may cause accidental data egress or filesystem changes when the skill is invoked by an agent or copied by a user.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script presents itself as performing Amazon product search, but in the no-key path it silently returns fabricated product data and in the keyed path there is no implementation at all. In an e-commerce research and price-monitoring skill, this can mislead users or downstream automation into treating synthetic listings, prices, ratings, and margins as real market intelligence, causing bad business decisions and corrupted reports.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The function presents itself as checking live product prices, but it generates random mock values instead of retrieving real marketplace data. This can mislead users into acting on fabricated alerts or reports, undermining trust and potentially causing financial or operational decisions based on false information.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill metadata advertises Amazon/Shopify price monitoring and product research, but this implementation only produces synthetic local data and reports derived from those synthetic values. In the context of an e-commerce assistant, this mismatch is more dangerous because users are likely to rely on the tool for business decisions, making the deceptive behavior materially harmful even without classic code-execution risk.

Content

No source excerpt is available for this finding.

Dynamic Request Target

Medium
Category
Server-Side Request Forgery
Confidence
96% confidence
Finding

The code constructs outbound HTTP requests directly from a user-supplied URL/domain in both the Shopify detection logic and later product fetch flow, with no allowlist, IP/range validation, or redirect protections. An attacker can provide internal hostnames, localhost, cloud metadata endpoints, or other unintended targets and cause the tool to make network requests on their behalf, which is a classic SSRF pattern.

Content

Scanner excerpt · scripts/shopify_analyzer.py (reported line 27)May include surrounding context.

python
return True
        
        # Check for Shopify indicators
        req = urllib.request.Request(
            f"https://{domain}",
            headers={'User-Agent': 'Mozilla/5.0 (compatible; Analyzer/1.0)'}
        )

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file is primarily written in Chinese and presents the skill’s promotion and execution plan in that language, with no indication that users can choose their preferred language or locale. The policy requires flagging language or locale constraints when they are imposed without opt-in or clear justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The content is segmented into English and Chinese community posts, which suggests locale-specific messaging, but there is no explicit statement that language is selected based on audience or user preference. Because SQP-3 covers language/locale policy concerns, fixed-language presentation without opt-in can be a minor policy issue when not documented.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file contains user-facing promotional text in English while the surrounding document is written in Chinese, suggesting a forced language choice for outward-facing content. The policy only permits this when the skill offers language/locale choice or clearly documents a justified locale constraint, which is not present here.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This markdown file describes using multiple third-party services such as RapidAPI, Keepa, and Google Shopping API, but it does not include any user-facing warning that requests, identifiers, or usage metadata may be sent to external providers. Because markdown files should warn about behaviors that could affect user data or privacy, the omission is a quality/safety issue.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.