Back to skill

Security audit

Showstart Skills

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent Showstart event-search client, but it sends searches and precise nearby-location coordinates to an external service over unencrypted HTTP.

Review before installing. The skill appears intended for Showstart event lookup and does not show local persistence or credential access, but avoid using precise nearby-location searches unless you are comfortable sending those coordinates and search interests to the external service; the HTTP endpoint should be changed to HTTPS before use.

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/showstart_api.py:13
Finding

Cleartext HTTP Exposes Search Parameters and Precise Location Data

Content
View full analysis

Vulnerability Details

File Location: scripts/showstart_api.py, lines 13 and 31; location data is constructed at lines 188–192
Vulnerability Type: Cleartext transmission of potentially sensitive data
Risk Level: Medium

Vulnerable Code

python
# API configuration
BASE_URL = "http://skill.showstart.com"
python
def _make_request(params: Dict[str, Any]) -> Optional[Dict]:
    """Send an API request."""
    _rate_limit()
    try:
        response = requests.get(BASE_URL, params=params, timeout=10)
        response.raise_for_status()
        return response.json()
    except Exception as e:
        print(f"Error: {e}", file=__import__('sys').stderr)
        return None

Precise coordinates are included in the query string:

python
result = _make_request({
    "loc": f"{longitude},{latitude}",
    "pageNo": page_no,
    "pageSize": page_size
})

Technical Analysis

The client sends requests to http://skill.showstart.com without transport encryption. This differs from references/api_docs.md, which specifies https://skill.showstart.com/.

All request parameters are placed in the URL query string. Depending on the selected operation, these parameters can contain search interests, artist or venue names, city information, and precise longitude and latitude coordinates. Because the initial request uses HTTP, an HTTP-to-HTTPS redirect would not adequately protect it: the initial URL and its query parameters have already crossed the network in cleartext.

An on-path attacker can observe or modify HTTP traffic. The client subsequently trusts the returned JSON and prints fields such as event titles, venue details, and ticket URLs. Although displayed ticket links are not opened automatically, response manipulation could present users with fraudulent information or malicious links.

Attack Path

  1. A user invokes a search function, such as search_nearby(longitude, latitude).
  2. The function places the exact coordinates in ...[truncated 1107 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace the plaintext endpoint with HTTPS:
python
BASE_URL = "https://skill.showstart.com"
  1. Keep TLS certificate verification enabled. Do not set verify=False in requests.
  2. Reject redirects that downgrade the request from HTTPS to HTTP, or explicitly validate the final response URL before processing the response.
  3. Where exact location is unnecessary, reduce coordinate precision or request user consent before transmitting precise coordinates.
  4. Validate the response schema and restrict displayed ticket links to expected HTTPS hosts.
  5. Sanitize or escape untrusted API text before terminal display to reduce terminal-control-sequence risks.
  6. Add automated tests that assert the configured endpoint uses the https scheme.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (8)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill documents functionality that relies on network access to query Showstart APIs, but it does not declare any explicit tool scope or allowed-tools/permissions boundary. Missing capability declarations weaken reviewability and runtime least-privilege controls, which can allow broader-than-intended external access or make unsafe network use harder to detect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill supports nearby-event queries using latitude and longitude but provides no warning about location sensitivity, retention, or consent. Precise coordinates can reveal a user's home, workplace, or movement patterns, so collecting or transmitting them without disclosure increases privacy risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The API docs explicitly require Chinese input for multiple parameters, such as city and category names, via phrases like '城市名称(中文)' and '分类名称(中文)'. This imposes a language/locale constraint in natural language without offering an opt-in or explaining a justified region-specific limitation, which matches the policy-violation criteria.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill sends user-provided search terms and precise location coordinates to an external service over the network without any explicit disclosure or consent flow. This is especially sensitive for the nearby-search feature because latitude/longitude can reveal a user's exact location and activity interests to a third party.

Content

No source excerpt is available for this finding.

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Confidence
75% confidence
Finding

Dynamic import() can load arbitrary modules at runtime, bypassing static analysis and potentially importing malicious code.

Content

Scanner excerpt · scripts/showstart_api.py (reported line 38)May include surrounding context.

python
response.raise_for_status()
        return response.json()
    except Exception as e:
        print(f"Error: {e}", file=__import__('sys').stderr)
        return None

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The manifest description and introductory content are presented only in Chinese, which can amount to a language-policy issue when no user opt-in or locale justification is provided. The file does not indicate that the skill is intentionally limited to Chinese-speaking users or a China-specific compliance context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

Natural-language strings throughout the file, including the module description and command help, are presented in Chinese only. Under the stated policy, forcing a specific language without opt-in or an offered alternative can be a locale/language policy violation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The manifest describes querying show details and searching by city/category/style/artist/nearby, but does not mention listing all artists with upcoming performances. get_all_artists() adds a broader catalog-enumeration function that is not clearly justified by the stated user-facing purpose.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.