Back to skill

Security audit

Mixlab Fill Content

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent Mixdao content-filling purpose, but its URL fetching and temp-file handling are under-scoped for a workflow that can later send data to an AI service and update Mixdao records.

Install only if you trust the Mixdao data source and can run the skill in a restricted environment. Review fetched URLs and IDs before running scripts, do not use it on machines with sensitive local network access or valuable writable files, and confirm Mixdao updates because selected records may be overwritten with AI-generated or fallback original text.

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/02-fetch-content.js:55
Finding

Unrestricted URL Fetching Enables Server-Side Request Forgery and Unbounded Downloads

Content
View full analysis
{ const curl = spawn('curl', ['-sL', '--max-time', '30', url]); let data = ''; let error = ''; curl.stdout.on('data', (chunk) => { data += chunk; }); curl.stderr.on('data', (chunk) => { error += chunk; }); curl.on('close', (code) => { if (code !== 0 && !data) { reject(new Error(`curl failed: ${error}`)); } else { resolve(data); } }); curl.on('error', reject); }); } ``` The remote URL is later passed directly to this function: ```js const html = await fetchUrl(url); ``` ### Technical Analysis The URL originates from records returned by the MixDAO API and is passed directly to `curl` without validation. The implementation does not restrict the URL scheme, destination hostname, destination port, resolved IP address, or redirect destinations. The `-L` option instructs `curl` to follow redirects automatically. Even if an initial URL appears safe, it can redirect to a loopback address, private network service, link-local cloud metadata endpoint, or another prohibited destination. Depending on the protocols supported by the installed `curl` build, non-HTTP schemes such as `file:` may also be accessible. All response data is accumulated in the `data` string without a byte limit. The 30-second timeout limits request duration but does not impose a response-size limit, allowing a large or rapidly generated response to consume substantial process memory. Fetching arbitrary article URLs is necessary for the declared functionality, but unrestricted access to local files, internal networks, cloud metadata services, and arbitrary protocols exceeds the minimum pr ...[truncated 1790 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/02-fetch-content.js:103
Finding

Unvalidated Record IDs Enable Path Traversal, Arbitrary File Writes, and Sensitive File Exfiltration

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是一个完整的“补全正文并更新”流程:先筛出无正文条目,再抓取网页正文,调用 AI 生成精炼中文案例描述,并将其写回 Mixdao。实际代码只实现了第一步中的一部分:从 Mixdao latest API 拉取数据、筛选 hasContent===false 的条目,并保存到本地 JSON 文件。它没有访问条目 URL 去抓取正文,没有使用 ANTHROPIC_API_KEY 或任何 AI 服务,也没有执行更新/回写操作。因此该代码块的实际行为仅是“获取待处理条目清单”,与声明的主要目的相比明显不完整且能力不一致,属于描述与行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是一个面向 MixDAO 的完整“补全正文并更新”流程:筛选无正文条目、抓取正文、调用 AI 生成约 250 字中文案例描述、再回写到 MixDAO。实际代码只是其中的一个中间抓取步骤:它读取本地 JSON 输入,逐条用 curl 抓取网页,提取纯文本,做长度/404/登录页等简单校验,并保存到 temp 目录。代码没有任何 MixDAO API 访问、没有 hasContent 判断逻辑、没有 AI 模型调用、没有上传或回写操作。因此该代码块的实际行为仅覆盖声明中的“抓取正文并暂存”子功能,和声明的整体用途存在实质差异。

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill rewrites stored content by replacing original article bodies with AI-generated summaries, yet the description does not prominently warn users about this destructive transformation. This can lead to irreversible data loss, provenance issues, and accidental publication of hallucinated or incomplete content in place of source material.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill declares no explicit tool scope or permissions while instructing use of shell commands and environment-provided API keys. In an agent environment, missing scope boundaries can let the skill run with broader shell/env access than users expect, increasing the blast radius for accidental or unsafe execution.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger phrases are broad enough to match ordinary requests like '抓正文' or '补全内容', which can cause unintended invocation of a skill that fetches external content and may later overwrite stored records. Overbroad activation is dangerous in agent systems because it can route users into higher-risk automation without informed intent.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The description instructs the AI to produce output in “简体中文” and reiterates that updates are summarized as ~250 characters in Simplified Chinese. There is no opt-in, user choice, or justification that this must be Chinese-only, so the natural-language instructions impose a fixed language policy.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

The script sends raw article body content from local temp files to an external LLM endpoint, with the destination overridable via ANTHROPIC_BASE_URL. This creates a real data exfiltration risk: sensitive or proprietary content may be transmitted to a third party or to an attacker-controlled endpoint if the environment variable is misconfigured or maliciously set.

Content

Scanner excerpt · scripts/03-update-from-temp.js (reported line 108)May include surrounding context.

js
const apiKey = process.env.ANTHROPIC_API_KEY;
  if (!apiKey) throw new Error('ANTHROPIC_API_KEY is not set.');
  return new Anthropic({
    baseURL: baseURL || 'https://api.minimaxi.com/anthropic',
    apiKey,
  });
}

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language instruction explicitly says '统一使用简体中文', which imposes a specific language on all generated output. Under the policy, locale or language requirements should not be forced unless the skill offers opt-in or clearly documents a justified region-specific constraint.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency uses a caret range (^0.32.1), which permits installation of newer compatible releases rather than a single audited version. In a skill that processes external content and uses an SDK tied to sensitive API-driven workflows, this weakens supply-chain assurance and can unexpectedly pull in vulnerable or behavior-changing versions.

Content

Scanner excerpt · package.json (reported line 7)May include surrounding context.

json
"type": "module",
  "private": true,
  "dependencies": {
    "@anthropic-ai/sdk": "^0.32.1",
    "jsonrepair": "^3.13.2"
  }
}

Unverifiable Dependency: @anthropic-ai/sdk has 2 known advisory(ies) (CVE-2026-34451 (Claude SDK for TypeScript: Memory Tool Path Validation Allows Sandbox Escape to ); CVE-2026-41686 (Claude SDK for TypeScript has Insecure Default File Permissions in Local Filesys)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
88% confidence
Finding

The manifest references @anthropic-ai/sdk without pinning to a precise version, while the package has known advisories affecting some releases. Because the exact installed version cannot be verified from this manifest alone, the skill may resolve to an affected version, which is more concerning here because the skill uses the SDK in a content-fetching and rewriting workflow that likely handles secrets and untrusted external data.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

The jsonrepair package is also specified with a caret range, so builds may resolve to different versions over time. Even though this is a lower-risk utility library, unpinned dependency resolution still creates supply-chain exposure and reduces the ability to verify exactly what code is installed.

Content

Scanner excerpt · package.json (reported line 8)May include surrounding context.

json
"private": true,
  "dependencies": {
    "@anthropic-ai/sdk": "^0.32.1",
    "jsonrepair": "^3.13.2"
  }
}

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file’s natural-language interface is entirely in Chinese, including the top-level description and command usage text. Under the language/locale policy rule, this is a violation because it imposes a specific language without any user opt-in or documented region-specific justification.

Content

No source excerpt is available for this finding.