Back to skill

Security audit

保险Excel自动数据分析工具

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does insurance spreadsheet analysis as advertised, but its normal workflow can send sensitive dataset summaries to third-party AI providers without clear consent or redaction controls.

Install only if you are comfortable with external AI processing of dataset-derived insurance information. For real customer, policy, claims, financial, health, or confidential business data, use a local-only workflow or require explicit approval after reviewing and redacting the exact prompt before any Kimi or DeepSeek call.

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

Error
Location
references/insight_generation.md:15
Finding

Uncontrolled Disclosure of Sensitive Insurance Data to External AI Providers

Content
View full analysis
str: """调用 Kimi/DeepSeek 生成洞察""" api_key = os.environ.get("KIMI_API_KEY") if model == "kimi" else os.environ.get("DEEPSEEK_API_KEY") endpoint = "https://api.moonshot.cn/v1/chat/completions" if model == "kimi" else "https://api.deepseek.com/v1/chat/completions" prompt = build_prompt(summary) # 使用上述模板 resp = requests.post( endpoint, headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}, json={ "model": "moonshot-v1-8k" if model == "kimi" else "deepseek-chat", "messages": [{"role": "user", "content": prompt}], "temperature": 0.7, }, timeout=60, ) resp.raise_for_status() return resp.json()["choices"][0]["message"]["content"] ``` ### Technical Analysis The Skill is intended to process insurance datasets, which commonly contain personal data and commercially confidential information such as customer names, policy identifiers, claim information, premium amount ...[truncated 3188 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (27)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding

Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill states that the agent will call external models such as Kimi or DeepSeek to generate insights, but it does not warn users that uploaded data or derived summaries may be transmitted to third-party AI providers. In the insurance context, analysis inputs may contain personal, financial, or claims information, so undisclosed third-party transfer creates a significant privacy and compliance risk.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/analyze.py <数据文件路径> --output-dir ./output

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/analyze.py <数据文件路径> --output-dir ./output

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/analyze.py <数据文件路径> --output-dir ./output

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill describes reading user-supplied files, generating outputs, and writing reports/charts, but it does not declare any explicit tool scope or permissions boundary. In an agent environment, missing scope declarations can cause the skill to run with broader default file access than intended, increasing the chance of unauthorized reads/writes or unsafe handling of local files.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are broad enough to match many ordinary requests such as '数据分析' or '生成图表', which can cause the skill to auto-activate in situations the user did not specifically intend. Because this skill processes uploaded files and may invoke external AI services, overbroad triggering raises the risk of unintended data handling and report generation on sensitive insurance data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill advertises automatic cleaning, analysis, chart generation, and Word export without warning that these operations can transform source data and affect downstream outputs. In a regulated insurance workflow, silent deduplication, null filling, or anomaly handling can change analytical conclusions and produce reports that users may incorrectly treat as faithful representations of the original dataset.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document instructs the agent to send analysis results to third-party Kimi/DeepSeek APIs, which expands a local Excel-analysis skill into external data exfiltration. In an insurance context, even summary statistics, category tops, cleaning logs, and chart descriptions may contain personal, financial, or business-sensitive information, and the guidance does not require user consent or data minimization.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The markdown directs sending analysis data to external APIs but provides no warning about privacy, confidentiality, retention, or cross-border transfer implications. For insurance datasets, this omission is dangerous because users may unknowingly transmit regulated or sensitive information to third parties.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

Listing the Moonshot API endpoint in the recommended workflow signals and normalizes external transmission as part of the skill design. In the context of insurance data analysis, that increases the likelihood that sensitive analytical outputs will be sent to a third party without sufficient safeguards.

Content

Scanner excerpt · references/insight_generation.md (reported line 11)May include surrounding context.

md
| 模型 | 适用场景 | API 端点 |
|------|---------|---------|
| Kimi (moonshot-v1-8k) | 中文洞察、业务解读 | https://api.moonshot.cn/v1/chat/completions |
| DeepSeek (deepseek-chat) | 中文洞察、深度分析 | https://api.deepseek.com/v1/chat/completions |

### Prompt 模板

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

Listing the DeepSeek API endpoint similarly embeds a third-party transmission path into the skill guidance. Because the skill is for insurance Excel analysis, exposing external endpoints without controls materially raises confidentiality risk.

Content

Scanner excerpt · references/insight_generation.md (reported line 12)May include surrounding context.

md
| 模型 | 适用场景 | API 端点 |
|------|---------|---------|
| Kimi (moonshot-v1-8k) | 中文洞察、业务解读 | https://api.moonshot.cn/v1/chat/completions |
| DeepSeek (deepseek-chat) | 中文洞察、深度分析 | https://api.deepseek.com/v1/chat/completions |

### Prompt 模板

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The prompt template packages dataset-derived content such as numeric summaries, top categorical values, cleaning logs, and chart descriptions for submission to an external model. These fields can reveal sensitive business distributions or personal information patterns even without raw rows, and no sanitization or disclosure is included.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill introduces use of environment-sourced API keys and outbound network access that are not necessary for ordinary Excel filtering and analysis. This increases attack surface by enabling credential-dependent external transmission and creates a pathway for sensitive data to leave the execution environment.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The same code path also targets the DeepSeek external endpoint, creating an equivalent exfiltration route for generated prompts built from dataset summaries. The risk is amplified by the lack of any built-in filtering, consent flow, or sensitivity detection before sending data out.

Content

Scanner excerpt · references/insight_generation.md (reported line 57)May include surrounding context.

md
def generate_insight(summary: dict, model: str = "kimi") -> str:
    """调用 Kimi/DeepSeek 生成洞察"""
    api_key = os.environ.get("KIMI_API_KEY") if model == "kimi" else os.environ.get("DEEPSEEK_API_KEY")
    endpoint = "https://api.moonshot.cn/v1/chat/completions" if model == "kimi" else "https://api.deepseek.com/v1/chat/completions"
    
    prompt = build_prompt(summary)  # 使用上述模板

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The same code path also targets the DeepSeek external endpoint, creating an equivalent exfiltration route for generated prompts built from dataset summaries. The risk is amplified by the lack of any built-in filtering, consent flow, or sensitivity detection before sending data out.

Content

Scanner excerpt · references/insight_generation.md (reported line 57)May include surrounding context.

md
def generate_insight(summary: dict, model: str = "kimi") -> str:
    """调用 Kimi/DeepSeek 生成洞察"""
    api_key = os.environ.get("KIMI_API_KEY") if model == "kimi" else os.environ.get("DEEPSEEK_API_KEY")
    endpoint = "https://api.moonshot.cn/v1/chat/completions" if model == "kimi" else "https://api.deepseek.com/v1/chat/completions"
    
    prompt = build_prompt(summary)  # 使用上述模板

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

The requests.post call performs actual outbound transmission of prompt content to an external endpoint. In this skill, the prompt is built from analysis summaries of insurance Excel data, so the network call creates a concrete data exfiltration path to third-party services.

Content

Scanner excerpt · references/insight_generation.md (reported line 61)May include surrounding context.

md
prompt = build_prompt(summary)  # 使用上述模板
    
    resp = requests.post(
        endpoint,
        headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
        json={

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The document consistently prescribes a Chinese-language workflow, including Chinese output conventions such as using "未知" for missing categorical values and enforcing Chinese font support. There is no indication that users may opt into another language or locale, so this appears to force a specific language without user choice.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The workflow explicitly requires calling external LLM APIs during analysis, which expands a local Excel analysis skill into a networked data-transfer workflow. Even though only summary data and chart descriptions are mentioned, those artifacts can still contain sensitive business or personal information, and the use of external APIs is not clearly justified or constrained by the skill’s stated purpose.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow directs sending dataset-derived summaries and chart descriptions to external AI services without any privacy notice, consent gate, or sensitivity screening. In an insurance context, even aggregated statistics, column names, categories, and anomaly descriptions can reveal regulated personal, financial, or health-related information, making this materially risky.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The documentation instructs operators to supply third-party API keys through environment variables for a skill presented as local Excel analysis. This signals an unnecessary privileged integration and can lead to inadvertent external service use, key mishandling, or deployment into environments with broader secret exposure than needed.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The module docstring and command-line usage are presented only in Chinese, and later user-facing status messages are also hard-coded in Chinese. This imposes a specific language/locale on all users without opt-in or an alternative, which matches the language/locale policy violation criterion.

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/analyze.py (reported line 21)May include surrounding context.

python
missing = []
for pkg in REQUIRED:
    try:
        __import__(pkg)
    except ImportError:
        missing.append(pkg)
if missing:

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The script prints dependency errors, progress logs, chart labels, and completion messages exclusively in Chinese throughout execution. Because no user choice or documented justification for the locale restriction is provided, this is a natural-language policy issue rather than a code-security defect.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Manifest 将该技能描述为基于保险Excel字段进行筛选、分析、图表和报告生成,整体偏向分析用途。这里的 clean_data 不只是分析,而是删除重复行、删除全空行/列,并对缺失值进行填充,改变了数据内容与后续分析结果,属于超出单纯分析/筛选语义的行为。

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.