Back to skill

Security audit

industry-intro

Security checks for vulnerabilities and agentic risk

Overview

This skill does not show malware, but it can present placeholder or weakly verified research as high-confidence sourced material.

Install only if you treat it as a drafting and formatting aid, not as a trustworthy research or citation system. Verify all sources yourself, avoid confidential seed terms unless you approve external searches, and do not rely on its pass/fail quality score for regulated, medical, financial, or business-critical decisions.

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

other

Warning
Location
scripts/search_router.py:93
Finding

Simulated Search Results Are Presented as Traceable Multi-Source Research

Content
View full analysis
List[SearchResult]: """ 执行并行检索(模拟实现) Returns: 检索结果列表,按优先级排序 """ strategy = self.determine_search_strategy() results = [] # 根据策略执行检索(此处为模拟实现,实际应调用真实检索工具) for source_type, config in strategy.items(): priority = config["priority"] keywords = config["keywords"] for keyword in keywords: # 模拟检索结果 result = SearchResult( source_type=source_type, source_name=f"{source_type}_source", content=f"检索结果:{keyword} 的相关内容", priority=priority, raw_numbers=[] # 实际检索时应提取原始数值 ) results.append(result) ``` ### Technical Analysis The Skill documentation describes a workflow that performs parallel knowledge-base, API, and web searches to produce high-confidence, traceable research. The implementation does not contact any external source or retrieve evidence. Instead, it creates generic placeholder strings and assigns them authoritative-looking source types and names. The generated `SearchResult` objects are structurally indistinguishable from genuine retrieved results to downstream components. No field identifies the records as synthetic, no URL or source excerpt is required, and the method does not fail when retrieval is unavailable. This is an integrity and functional-security issue rather than malicious code. Downstream agents may treat fabricated placeholders as evidence because the output uses labels such as `knowledge_source`, `api_source`, and `web_source`. ### Attack Path 1. A user requests an industry, medical, regulatory, or technical definition. 2. The Skill selects a search strategy based on the supplied term. 3. `execute_search()` create ...[truncated 1060 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/info_cleaner.py:134
Finding

Caller-Controlled Metadata Can Artificially Elevate Content Confidence

Content
View full analysis
float: """ 计算信度评分 Args: info: 信息字典 Returns: 信度评分(0-1) """ confidence = 0.0 # 来源信度评分 source_type = info.get("source_type", "") if source_type == "knowledge": confidence += 0.4 # 知识库信度高 elif source_type == "api": confidence += 0.3 # API信度中等 elif source_type == "web": confidence += 0.2 # 网页信度较低 # 优先级评分 priority = info.get("priority", 1) confidence += min(priority * 0.1, 0.3) # 内容长度评分(避免过短内容) content = info.get("content", "") if len(content) > 100: confidence += 0.2 elif len(content) > 50: confidence += 0.1 # 包含数值加分 if self.extract_raw_numbers(content): confidence += 0.1 return min(confidence, 1.0) ``` ### Technical Analysis The cleaner reads `source_type`, `priority`, and `content` directly from input JSON and uses those caller-controlled values to calculate confidence. It does not verify that a record identified as `knowledge` originated from a trusted knowledge source. It also does not authenticate provenance, validate a URL, or confirm that the content matches its claimed source. An attacker can label fabricated content as `knowledge`, assign a high priority, make the text sufficiently long, and include a number. Such a record can receive the maximum confidence score without any genuine evidence. Although the priority contribution is capped at `0.3`, the priority value itself is not schema-validated. Negative, nonnumeric, or otherwise malformed values may also cause incorrect behavior or exceptions. ### Attack Path 1. An attacker creates a JSON input containing fabricated research content. 2. The attacker sets `source_type` to ...[truncated 1314 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/quality_checker.py:65
Finding

Citation Scoring Validates Marker Syntax Without Verifying Evidence

Content
View full analysis
= 3: # 融合格式通常3-5处标注即可 score += 20 elif len(source_matches) >= 2: score += 15 feedback.append("溯源标注较少,建议增加关键论点的来源标注") else: score += 10 feedback.append("溯源标注严重不足,必须为所有关键论点添加来源") ``` The citation pattern used by this code is: ```python SOURCE_PATTERN = re.compile(r'\[\d+\]') ``` ### Technical Analysis The checker awards citation points solely by counting strings matching a bracketed-number pattern. It does not verify that: - Citation markers are unique. - A corresponding source-list entry exists. - Marker numbers map one-to-one to sources. - Source entries contain valid URLs. - URLs use HTTPS or belong to credible domains. - A source was actually retrieved. - A source supports the associated claim. - Repeated markers are not being used to inflate the score. Consequently, a report containing strings such as `[1][1][1]` or `[1][2][3]` can receive the full 20 citation points even if it has no source list and no supporting evidence. The checker therefore measures citation-shaped syntax rather than groundedness. ### Attack Path 1. An attacker or unreliable report generator creates unsupported claims. 2. Citation-shaped tokens such as `[1][2][3]` are appended to the report. 3. The regular expression finds at least three matches. 4. The checker awards the full 20 points for citation coverage. 5. Additional expected keywords and formatting are included to increase the other heuristic scores. 6. The total score may meet the configured acceptance threshold despite the absence of genuine evidence. 7. The report is then presented as having passed quality validation. ### Impact Assessment - **Privil ...[truncated 651 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

声明描述的是一个“行业定义生成系统”,核心能力应是汇总多源信息并生成结构化行业定义报告。当前代码块仅是一个辅助性的预处理组件:读取JSON结果,删除商业软文词汇,做数值一致性校验,去重,简单分类,并输出高信度清洗结果。虽然这些步骤可能支持后续报告生成,但就该代码本身而言,其主要目的与声明不一致,缺少报告生成、定义抽取整合、溯源呈现和结构化成文等关键能力。因此应判定为描述与实际行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

声明的核心能力是“生成”行业/产品定义报告,但代码没有任何生成逻辑,也未调用模型、模板填充或知识检索来产出定义内容。其主功能是读取已有Markdown文本,使用规则和正则对溯源标注、关键词频率、结构字段、术语与句子长度等进行评分,并判断是否需要修订。这属于质量检查/验收环节,而不是行业定义生成系统本身。虽然检查维度与‘高信度、可溯源、结构化’目标相关,但这是配套质检能力,不能等同于声明的主要用途,因此构成明显不匹配。

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding

The skill invokes local scripts and references file-based resources, which implies file read/write capability, but it does not declare any tool scope or permission boundaries. Without explicit allowed-tools or least-privilege constraints, an agent may gain broader filesystem access than users expect, increasing the risk of unauthorized reads, overwrites, or use of auxiliary files in unsafe ways.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The natural-language description and the entire output specification are written as a fixed Chinese-language workflow, with no indication that users may choose another language or locale. This can violate language/locale policy when a skill implicitly forces one language without opt-in or a documented regional justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill explicitly directs web/API retrieval across multiple external sources but provides no user warning that prompts, seed terms, or derived queries may be transmitted over the network. This can expose sensitive user-provided terms, internal research topics, or regulated subject matter to third-party services without informed consent, especially in enterprise or confidential workflows.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file contains natural-language instructions and evaluation criteria exclusively in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking context. Under the language/locale policy, forcing a specific language without user opt-in is a policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

SQP-3 applies to all file types and flags language policy issues when a skill forces a specific language without user opt-in. This markdown template contains only Chinese-language instructions and examples, with no indication that users may choose another language or that the Chinese-only constraint is required for a region-specific purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The markdown uses prescriptive natural-language rules such as requiring specific Chinese suffixes like “产业”, “市场”, and “行业”, which effectively enforce a single language/locale for output. The file does not mention any user opt-in, multilingual option, or region-specific justification for this constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The document is written and enforced as Chinese-only guidance, with no indication that users may request another language or that the language restriction is necessary for safety or regulatory reasons. In an agent skill, this can cause the system to ignore user language preferences, reduce accessibility, and create policy-compliance issues when outputs are expected to adapt to user context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file’s natural-language description and all user-facing messages are exclusively in Chinese, and there is no indication that the skill is region-specific or that users may choose another language. Under the policy, forcing a specific language without opt-in is a locale-policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This Python file uses user-facing descriptions and output messages exclusively in Chinese, including the module description and CLI help/output text. That creates a language-policy concern because the skill appears to require a specific language without offering any user choice or documenting a justified locale restriction.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

The instruction says that when the user gives no explicit requirement, the default is to choose the most specific level, within a classification scheme defined entirely in Chinese naming forms. This can amount to a locale/language policy constraint because the user is not offered a choice of output language or taxonomy locale.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.