Back to skill

Security audit

竞品分析自动化

Security checks for vulnerabilities and agentic risk

Overview

This competitor-analysis skill is mostly purpose-aligned, but it can fetch arbitrary URLs from the host environment and write reports to arbitrary paths without enough safeguards.

Review before installing. Use it only with public competitor domains or non-sensitive keywords, and avoid internal URLs, staging hosts, localhost/private-network addresses, or confidential research terms. Run it in a network-restricted environment if possible, and write reports only to a dedicated export folder you are willing to overwrite.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/analyze.js:42
Finding

Unrestricted URL Fetching Enables Server-Side Request Forgery

Content
View full analysis
{ const lib = url.startsWith('https') ? https : http; const reqOptions = { headers: { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', ...options.headers, }, timeout: 15000, }; const req = lib.get(url, reqOptions, (res) => { // 处理重定向 if ([301, 302, 303, 307, 308].includes(res.statusCode) && res.headers.location) { return fetch(res.headers.location, options).then(resolve).catch(reject); } const chunks = []; res.on('data', chunk => chunks.push(chunk)); res.on('end', () => resolve(Buffer.concat(chunks).toString('utf8'))); }); req.on('error', reject); req.on('timeout', () => { req.destroy(); reject(new Error('请求超时')); }); }); } ``` The URL reaches the vulnerable request function from caller-controlled command-line input: ```javascript for (const input of inputs) { if (input.startsWith('http://') || input.startsWith('https://')) { // URL 直接抓取 const result = await crawlCompetitor(input); competitors.push({ name: input.replace(/^https?:\/\//, '').split('/')[0], ...result, }); ``` ### Technical Analysis The script accepts arbitrary HTTP and HTTPS URLs and requests them from the network context of the host running the Skill. It does not validate hostnames, resolved IP addresses, destination ports, or network ranges. Consequently, a caller can direct the crawler to loopback interfaces, private networks, link-local addr ...[truncated 2057 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/analyze.js:303
Finding

Caller-Controlled Export Path Allows Arbitrary Writable-File Overwrite

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 (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill’s declared behavior does not fully match its actual behavior: it reportedly uses external search for keyword inputs and performs only limited scraping/aggregation despite stronger analysis claims. This is dangerous because users may unknowingly transmit queries or target information to third-party services and may overtrust low-fidelity results presented as structured competitor intelligence.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill advertises dependency on web_search and web_crawl but does not declare an explicit tool scope such as permissions or allowed-tools. In agent environments, missing scope boundaries can allow broader-than-expected network access or make security review and enforcement ambiguous, increasing the risk of unintended external requests on user input.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill lacks a clear warning that user-supplied keywords, company names, and URLs may be sent to web search and crawling services. This can expose sensitive business research intent or internal targets to external parties, especially if a user submits non-public URLs, staging hosts, or confidential market-interest queries.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
78% confidence
Finding

The file presents all user-facing instructions, metadata, and invocation examples only in Chinese, with no indication that other languages are supported or that Chinese is a required locale. Under the policy, a language constraint should be offered as a user choice or explicitly justified as region-specific.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger array includes broad phrases like “市场分析” and “分析报告”, which are generic requests used in many contexts unrelated to this skill. Because the manifest does not provide exclusion conditions or narrow activation context, these triggers could cause unintended invocation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger list contains broad generic phrases such as “市场分析”, “分析报告”, and “competitor analysis”, which can cause the skill to activate for user requests that are not specifically asking for this tool. Because the skill can perform web search and crawling, unintended invocation may lead to unnecessary external data access, irrelevant automation, or accidental disclosure of user intent to third-party sites.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The HTTP request hard-codes Accept-Language: zh-CN,zh;q=0.9,en;q=0.8, which imposes a specific language/locale preference on fetched content. The policy allows locale constraints only when they are optional or clearly justified, but this code provides no user choice or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The natural-language metadata, including the description, category, tags, and trigger phrases, primarily assumes Chinese-speaking users, but there is no explicit opt-in or documented locale restriction. This can violate language/locale policy if the skill experience effectively forces a specific language without user choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.