Back to skill

Security audit

QQ Music Browser Control

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a disclosed QQ Music browser controller, but it exposes broad browser-tab metadata and can overwrite arbitrary user-writable files when saving screenshots.

Install only if you are comfortable giving the skill CDP access to a browser. Use a dedicated browser profile containing only QQ Music, avoid the tabs diagnostic on a profile with private pages open, and do not pass arbitrary screenshot paths unless you are certain they are safe to overwrite.

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)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
qq-music-ctl.js:251
Finding

Disclosure of Unrelated Browser Tab Metadata

Content
View full analysis
({ id: t.id, title: t.title, url: t.url, isPlayer: isPlayerTarget(t), isQQMusic: isQQMusicTarget(t), })), }); } ``` ### Technical Analysis The `tabs` action obtains all page targets exposed by the connected browser's Chrome DevTools Protocol endpoint and prints each target's ID, title, and complete URL. It does not filter the returned targets through `isQQMusicTarget` before exposing their metadata. The domain restrictions elsewhere in the implementation prevent DOM evaluation on non-QQ-Music pages, but they do not protect metadata processed by this action. Consequently, this behavior conflicts with the documented security boundary that the Skill only operates on `y.qq.com` tabs. Browser titles and URLs can contain sensitive information, including: - Search terms - Account or user identifiers - Private document identifiers - Internal hostnames and application routes - Session-like or authorization parameters embedded in URLs Enumerating CDP targets may be necessary to locate a QQ Music tab, but returning metadata for every unrelated page is not necessary for the Skill's declared music-control functionality. ### Attack Path 1. A user starts a CDP-enabled browser that contains both QQ Music and unrelated tabs. 2. The browser profile may contain private services, documents, searches, or internal applications. 3. An Agent or local caller invokes: ```bash node qq-music-ctl.js tabs ``` 4. The script requests `/json/list` from the local CDP endpoint. 5. `pageTargets(entry ...[truncated 1018 chars]
Remediation
View remediation
({ id: t.id, title: t.title, url: t.url, isPlayer: isPlayerTarget(t), isQQMusic: true, })), unrelatedTabCount: pages.length - qqMusicTabs.length, }); } ``` Additional hardening measures: 1. Do not return IDs, titles, or URLs for rejected targets. 2. If diagnostic information is required, return only an aggregate count of unrelated tabs. 3. Rename or document the action so that its actual disclosure scope cannot be misunderstood. 4. Continue requiring or strongly encouraging a dedicated browser profile containing only QQ Music. 5. Consider disabling the `tabs` action by default and requiring an explicit diagnostic option to expose even QQ Music target metadata. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
qq-music-ctl.js:848
Finding

Arbitrary Overwrite of User-Writable Files Through Screenshot Path

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
1. **`.cdp-port` file** — a single-line file in the same directory as `qq-music-ctl.js`, containing just the port number (e.g. `19011`).

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill explicitly performs network-capable actions by connecting to a local Chrome DevTools Protocol endpoint over HTTP/WebSocket, but the manifest declares no tool scope such as permissions or allowed-tools. Even though the target is localhost and the documentation describes guardrails, this still grants a powerful browser-control channel that can execute JavaScript in a browser tab and should be transparently declared. In this context the risk is somewhat reduced by the documented y.qq.com allowlist and localhost-only design, but CDP remains high-privilege and the missing declaration weakens policy visibility and enforcement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill relies on Chinese UI labels such as '列表循环', '单曲循环', '随机播放', and '顺序循环', and elsewhere matches Chinese text like '播放全部', which implies operation depends on a specific locale. There is no natural-language indication that the skill is limited to Chinese-language QQ Music pages or any user opt-in for locale selection.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes browser automation for playback, search, likes, playlists, and browser-target discovery, but it does not mention capturing and writing screenshots to disk. While adjacent to browser automation, persistent screenshot capture is a distinct behavior beyond the stated feature set.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The screenshot action captures page contents from the QQ Music tab and writes them to a local file via fs.writeFileSync, but there is no explicit warning in the command help or any confirmation before saving. Because this operation persists potentially sensitive account or media information to disk, it should be disclosed to the user.

Content

No source excerpt is available for this finding.