Back to skill

Security audit

amazon-sorftime-research-MCP-skill

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its advertised Amazon analysis purpose, but it needs review because it documents unsafe API-key handling and exposes broader mutable Sorftime capabilities than the core workflow requires.

Review before installing. Use this only if you are comfortable sending ASINs, product queries, reviews, and derived competitive analysis to Sorftime and saving reports locally. Keep .mcp.json out of source control, prefer environment-variable or header-based secret handling if the service supports it, use a least-privilege API key, and avoid invoking TikTok, 1688, or keyword-library mutation tools unless you explicitly need those actions.

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
README.md:153
Finding

API Credential Exposed in URL Query Strings and Persistent Configuration

Content
View full analysis

Vulnerability Details

File Location: README.md:141-143, README.md:153-164; SKILL.md:23-25, SKILL.md:68-70, SKILL.md:84-86; references/api-tools-reference.md:6-8, references/api-tools-reference.md:17-63, references/api-tools-reference.md:105-107; references/sorftime-mcp-api.md:5-7
Vulnerability Type: API credential exposure through URL query parameters and plaintext configuration
Risk Level: Medium

Vulnerable Code

README.md:141-143:

bash
curl -X POST "https://mcp.sorftime.com?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{...}}'

README.md:153-164:

json
{
  "mcpServers": {
    "sorftime": {
      "type": "streamableHttp",
      "url": "https://mcp.sorftime.com?key=YOUR_API_KEY",
      "name": "Sorftime MCP",
      "description": "Sorftime cross-border e-commerce platform data service"
    }
  }
}

SKILL.md:23-25:

bash
curl -s -X POST "https://mcp.sorftime.com?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":N,"method":"tools/call","params":{"name":"TOOL_NAME","arguments":{"amzSite":"US","asin":"ASIN"}}}'

references/sorftime-mcp-api.md:5-7:

bash
curl -s -X POST "https://mcp.sorftime.com?key={API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":N,"method":"tools/call","params":{"name":"TOOL_NAME","arguments":{...}}}'

Technical Analysis

The documented authentication scheme places the Sorftime API key in the URL query string. Although HTTPS encrypts the request while it is in transit, URLs may still be recorded outside the encrypted transport channel in shell history, process command lines, debugging output, application logs, reverse-proxy logs, monitoring systems, crash reports, and support diagnostics.

The README also instructs users to persist the complete credenti ...[truncated 2110 chars]

Remediation
View remediation

Remediation Suggestions

  1. Use header-based authentication

    • Prefer a standard authorization header such as Authorization: Bearer ....
    • If Sorftime supports a dedicated API-key header, use that mechanism instead of a query parameter.
  2. Load credentials at runtime

    • Retrieve the API key from a protected environment variable or secret manager.
    • Do not place the literal key in documentation examples, shell commands, or project configuration files.
    bash
    curl -s -X POST "https://mcp.sorftime.com" \
      -H "Authorization: Bearer ${SORFTIME_API_KEY}" \
      -H "Content-Type: application/json" \
      -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{...}}'
    
  3. Protect local configuration

    • Add .mcp.json and any credential-bearing local override files to .gitignore.
    • Provide a sanitized .mcp.json.example containing placeholders only.
    • Restrict credential-file permissions to the owning user, for example with mode 0600.
  4. Reduce command-line exposure

    • Avoid passing secrets as literal command-line arguments.
    • Where query authentication is unavoidable, construct the authenticated request inside a protected runtime wrapper and prevent command tracing and URL logging.
  5. Introduce operational safeguards

    • Document key rotation and revocation procedures.
    • Redact query parameters in proxy, application, diagnostic, and monitoring logs.
    • Use scoped, least-privilege credentials and apply quota or anomaly alerts.
    • Rotate any real key previously stored in source control, shell history, logs, backups, or shared configuration.
Vulnerability Patterns
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (20)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The README content is overwhelmingly written in Chinese, which effectively forces a specific language for users of the skill. The policy allows locale constraints when user choice or clear justification is provided, but this file does not offer an opt-in language choice or explain that the skill is intentionally Chinese-only.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The README documents sending data to an external Sorftime MCP endpoint using an API key in the URL query string. External transmission of product queries, analysis inputs, and potentially report-related content can expose sensitive business intelligence to a third party, and placing secrets in URLs increases leakage risk through logs, histories, and intermediaries.

Content

Scanner excerpt · README.md (reported line 141)May include surrounding context.

Sorftime MCP API

bash
curl -X POST "https://mcp.sorftime.com?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{...}}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill states that it will automatically save analysis reports to the local reports/ directory without clearly warning the user or obtaining explicit consent for file creation. Automatic local writes can surprise users, leak sensitive analysis data to disk, create retention/compliance issues, and overwrite or accumulate files without visibility.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

The skill instructs sending user-supplied product identifiers and related analysis requests to an external Sorftime MCP endpoint via HTTP POST. Any external transmission is security-relevant because it moves user request data outside the local environment, and the inclusion of an API key in the URL query string raises additional exposure risk through logs, proxies, and telemetry.

Content

Scanner excerpt · SKILL.md (reported line 23)May include surrounding context.

调用格式:

bash
curl -s -X POST "https://mcp.sorftime.com?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":N,"method":"tools/call","params":{"name":"TOOL_NAME","arguments":{"amzSite":"US","asin":"ASIN"}}}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The documentation reinforces that all data retrieval occurs through external curl POST requests and notes that large responses may be written to temporary files. In combination, this creates both outbound data-sharing risk and local data-residue risk, especially if the temporary file handling is not disclosed, controlled, or cleaned up.

Content

Scanner excerpt · SKILL.md (reported line 53)May include surrounding context.

md
| `category_tree` | 类目结构 |

**重要提示**:
- 所有数据需通过 curl POST 请求获取
- 返回格式为 SSE (event: message + data: JSON)
- 中文内容使用 Unicode 转义,需要解码
- 大数据量会保存到临时文件

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill manifest and primary description scope this capability to Amazon competitor listing analysis, but the documentation later expands behavior to TikTok research and 1688 supply-chain analysis. That scope creep can cause the agent to access additional external services and collect or transmit more data than a user would reasonably expect, increasing privacy, compliance, and authorization risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

The file instructs operators to send product and account-linked requests to an external third-party endpoint, which is an external data transmission behavior. In this skill context, that behavior is expected for the integration, but it still carries security risk because ASIN queries, derived business intelligence, and especially credentials may leave the local environment and be exposed to a remote service outside the user's control.

Content

Scanner excerpt · references/api-tools-reference.md (reported line 1)May include surrounding context.

md
# Sorftime MCP 工具参考 (curl 调用格式)

**注意**:Sorftime MCP 使用 SSE 协议,所有工具调用格式如下:

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The examples place the API key in the URL query string, which is commonly exposed through shell history, logs, proxy records, monitoring systems, and error messages. In a skill that automates competitor analysis and may be used by non-security-focused operators, this documentation pattern increases the chance that real credentials will be copied into unsafe command lines and leaked.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The document explicitly instructs the agent/user to persist generated analysis reports to disk under a predictable path, but provides no warning or controls for handling potentially sensitive business data, scraped content, account-linked data, or proprietary competitive analysis. In this skill’s context, automatic report generation and storage increases the chance of unintended long-term retention, accidental sharing, or inclusion of secrets/PII if upstream analysis content is not sanitized before writing.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The documented request sends data and authentication material to an external service endpoint, and the credential is embedded directly in the URL. In the context of an agent skill that performs automated analysis and report generation, this is more dangerous because users may unknowingly operationalize the example at scale, causing API keys and queried business data to be transmitted to third-party infrastructure and potentially retained in logs.

Content

Scanner excerpt · references/sorftime-mcp-api.md (reported line 5)May include surrounding context.

调用方式

bash
curl -s -X POST "https://mcp.sorftime.com?key={API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":N,"method":"tools/call","params":{"name":"TOOL_NAME","arguments":{...}}}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example places the API key in the URL query string (?key={API_KEY}), which commonly gets recorded in browser history, shell history, proxy logs, reverse-proxy access logs, observability tooling, and referrer-like diagnostics. Even though this is documentation rather than executable code, it normalizes an unsafe authentication pattern and increases the chance that real credentials are exposed during use or troubleshooting.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The query/search capability descriptions are broad and do not define clear invocation boundaries, making it easier for the agent to over-match ordinary user requests and invoke market/category search functions unexpectedly. In a skill that should activate for a specific /amazon-analyse flow, ambiguous trigger scope increases the chance of unnecessary data access and unintended tool usage.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The broad 'search/query products' description is ambiguous enough to match many generic shopping or product questions, which can cause the skill to trigger outside its intended competitor-listing analysis use case. Because the skill also saves reports automatically, overbroad matching can compound into unexpected data retrieval and downstream file generation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The referenced MCP documentation includes state-changing operations on a personal keyword library such as adding, moving, and deleting saved keywords, which are unrelated to the skill's stated purpose of analyzing competitor listings and producing Markdown reports. Exposing these capabilities expands the action surface and could let the skill modify persistent user data without a clear user request or business need.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

A destructive capability to delete saved keywords is documented without any warning, confirmation requirement, or indication that it modifies persistent stored data. If exposed to the skill, this could lead to accidental or unauthorized deletion of a user's keyword library, causing integrity loss in data unrelated to competitor analysis.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The README states that analysis results are automatically saved to the local reports/ directory, but it does not clearly warn users before local file creation or explain data retention implications. In a skill that may process third-party product intelligence and user-supplied inputs, silent persistence can create privacy, operational, or workspace hygiene issues, even if the behavior is not inherently malicious.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The natural-language instructions, headings, and output guidance are entirely in Chinese, which effectively imposes a language choice on users. Under the policy, forced language/locale behavior should be avoided unless the skill offers a choice or clearly documents a justified regional constraint.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The analysis section says to use product_report to assess category position, but no such tool appears in the documented tool lists. Later sections document category_report for category analysis, so the inline guidance contradicts the available tooling and stated workflow.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

A language/locale policy violation applies when a skill forces a specific language without user opt-in. This reference file presents all operational instructions in Chinese and does not indicate that Chinese is optional, nor does it document a region-specific reason for restricting the content to that language.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

SQP-3 适用于所有文件类型,并要求识别自然语言中的语言/地区策略违规。该文档从标题到全部说明均固定为中文,未提供其他语言选项,也未说明这是面向特定中文用户群或区域合规场景的限制。

Content

No source excerpt is available for this finding.