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## 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
## 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
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.

External Transmission

Medium
Category
Data Exfiltration
Content
### 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":{...}}'
```
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.

Missing User Warnings

Medium
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.

External Transmission

Medium
Category
Data Exfiltration
Content
**调用格式**:
```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"}}}'
```
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.

External Transmission

Medium
Category
Data Exfiltration
Content
| `category_tree` | 类目结构 |

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

Description-Behavior Mismatch

Medium
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.

External Transmission

Medium
Category
Data Exfiltration
Content
# Sorftime MCP 工具参考 (curl 调用格式)

**注意**:Sorftime MCP 使用 SSE 协议,所有工具调用格式如下:
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.

Missing User Warnings

Medium
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.

Missing User Warnings

Medium
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.

External Transmission

Medium
Category
Data Exfiltration
Content
## 调用方式
```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":{...}}}'
```
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.

Missing User Warnings

Medium
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.

Vague Triggers

Medium
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.

Vague Triggers

Medium
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.

Context-Inappropriate Capability

Medium
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.

Missing User Warnings

Medium
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.

Missing User Warnings

Low
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.

Natural-Language Policy Violations

Low
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.

Intent-Code Divergence

Low
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.

Natural-Language Policy Violations

Low
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.

Natural-Language Policy Violations

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

Static analysis

No suspicious patterns detected.