Back to skill

Security audit

苏诺之音-SunoAI音乐助手

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a legitimate Suno.cn music helper, but it has review-worthy risks around redirectable authenticated network traffic and broadly readable upload paths.

Install only if you trust the publisher and host environment. Do not set SUNO_CN_MCP_URL in normal use, review any file path before allowing upload, use auth logout when finished, and confirm credit-consuming retries manually.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/suno-client.mjs:13
Finding

Unrestricted API Origin Override Can Expose Credentials and Uploaded Data

Content
View full analysis
controller.abort(), options.timeout || 30_000); try { const response = await fetch(`${BASE_URL}${path}`, { ...options, signal: controller.signal }); ``` ```js async function startAuthorization(options = {}) { return withCredentialLock(async () => { const current = await loadCredentials(); if (options.expectedKey && current?.skill_key !== options.expectedKey) { throw new ClientError("credentials_changed", "授权已由另一进程更新,请确认后重试当前操作"); } const credentials = options.rotate || !current ? createSkillCredentials() : current; const result = await fetchJSON("/mcp/auth/start", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ skill_key: credentials.skill_key, client_instance_id: credentials.client_instance_id, client_name: CLIENT_NAME, skill_version: SKILL_VERSION, }), }); ``` ```js async function authorizedRequest(method, pathname, body, options = {}) { method = method.toUpperCase(); if (!ALLOWED_METHODS.has(method)) { throw new ClientError("invalid_method", "只允许 GET 或 POST 请求"); } validateAPIPath(pathname); const c ...[truncated 2732 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/suno-client.mjs:438
Finding

Upload Commands Can Read and Transmit Arbitrary Local Files

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (24)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

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
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
网页明确批准的独立授权,不要求用户复制 API Key。新版授权自批准起固定有效三天,使用不会续期;旧授权以服务端显示的实际期限为准。执行网络请求时只能调用 `scripts/suno-client.mjs`,不要使用 curl、MCP JSON-RPC、浏览器脚本或自行拼接 Authorization。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- 必须完整保留 Skill 目录名称 `suno-cn-music` 以及 `SKILL.md`、`INSTALL.md`、`references/`、`scripts/` 和安装脚本。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- 必须完整保留 Skill 目录名称 `suno-cn-music` 以及 `SKILL.md`、`INSTALL.md`、`references/`、`scripts/` 和安装脚本。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/api.md (reported line 19)May include surrounding context.

md
`GET /mcp/api/user`:昵称、积分和会员状态。

退出授权使用 `auth logout`。helper 会调用 `DELETE /mcp/auth/binding` 立即撤销当前 Skill Key 对应的服务端授权,成功后再清除本地凭证;网络失败时会保留凭证以便重试。

购买完成后的恢复命令:

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
const DEFAULT_BASE_URL = "https://mcp.suno.cn";
const BASE_URL = (process.env.SUNO_CN_MCP_URL || DEFAULT_BASE_URL).replace(/\/+$/, "");
const CONFIG_DIR = resolve(process.env.SUNO_CN_CONFIG_DIR || join(homedir(), ".suno-cn"));
const CREDENTIALS_PATH = join(CONFIG_DIR, "credentials.json");
const PENDING_OPERATION_PATH = join(CONFIG_DIR, "pending-operation.json");
const SKILL_KEY_PATTERN = /^sks_[0-9a-f]{64}$/;
const ALLOWED_METHODS = new Set(["GET", "POST"]);

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/suno-client.mjs (reported line 15)May include surrounding context.

js
const DEFAULT_BASE_URL = "https://mcp.suno.cn";
const BASE_URL = (process.env.SUNO_CN_MCP_URL || DEFAULT_BASE_URL).replace(/\/+$/, "");
const CONFIG_DIR = resolve(process.env.SUNO_CN_CONFIG_DIR || join(homedir(), ".suno-cn"));
const CREDENTIALS_PATH = join(CONFIG_DIR, "credentials.json");
const PENDING_OPERATION_PATH = join(CONFIG_DIR, "pending-operation.json");
const SKILL_KEY_PATTERN = /^sks_[0-9a-f]{64}$/;
const ALLOWED_METHODS = new Set(["GET", "POST"]);

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The entire installation guide is written only in Chinese and does not indicate that users may choose another language or locale. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is clearly justified.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill invokes shell commands, network access, and environment-backed authorization flows, but it does not declare an explicit tool permission boundary. That creates an overbroad execution surface where the host may permit more capability than users or policy reviewers expect, weakening least-privilege controls and making any downstream helper compromise more impactful.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
84% confidence
Finding

The skill advertises a fixed three-day authorization/session that persists across use, enabling continued access to account-backed music generation and potentially credit-consuming operations after initial approval. Persistent delegated access is not inherently malicious, but if the host, local account, or helper is misused, the standing authorization increases the window for unauthorized actions and billing impact.

Content

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

md
display_name: Suno.cn AI 音乐助手
display_name_en: Suno.cn AI Music Assistant
description_zh: Suno.cn AI 音乐创作助手,支持 AI 作曲写歌、文字生成歌曲、歌词生成、参考音频翻唱与续写、添加人声或伴奏、纯音乐与 BGM 生成、人声及音轨分离、音频降噪裁剪合并、音质提升、WAV 转换、音频转 MIDI、MIDI 转乐谱 PDF,以及作品和积分查询。首次使用通过网页确认三天授权,无需手填 API Key;部分功能消耗账户积分。
description_en: Suno.cn AI music and song generator for AI agents. Create songs from text or lyrics, write lyrics, make instrumental music and background music (BGM), cover or extend reference audio, and add vocals, accompaniment or stems. Supports vocal and stem separation, audio denoising, trimming, merging, quality enhancement, WAV conversion, audio-to-MIDI, MIDI-to-PDF sheet music, and music library and credit queries. Uses three-day web authorization without manual API key entry. Some operations consume account credits.
summary: Suno.cn AI 音乐创作助手:文字生成歌曲、AI 作曲写歌、歌词生成、参考音频翻唱与续写、纯音乐和伴奏生成、人声分离、音频降噪、MIDI 与乐谱转换。支持 Agent 网页授权接入。
homepage: https://www.suno.cn
tags: [AI音乐, AI作曲, AI写歌, 歌词生成, AI翻唱, 歌曲续写, BGM, 伴奏生成, 人声分离, 音频处理, MIDI, Suno]

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · install.sh (reported line 13)May include surrounding context.

sh
fi
mkdir -p "$TARGET_DIR"
cp -R "$SOURCE_DIR"/. "$TARGET_DIR"/
chmod 755 "$TARGET_DIR/scripts/suno-client.mjs"
echo "suno-cn-music installed. Reload skills or restart the current Agent."

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This code emits user-facing messages in Chinese, and similar Chinese-only strings appear throughout the file, without any opt-in, locale selection, or documented justification for restricting the interaction language. That creates a natural-language policy issue because the skill effectively forces a specific language on users.

Content

No source excerpt is available for this finding.