Back to skill

Security audit

智慧播放列表 DJ

Security checks across malware telemetry and agentic risk

Overview

This playlist DJ skill is mostly purpose-aligned, but it needs review because it controls Music.app by default and has unsafe AppleScript query handling.

Review before installing. Use only if you are comfortable with a skill reading your Music.app library metadata, controlling playback on macOS, caching playlist data under your home directory, and sending city-based weather lookups to wttr.in. Avoid passing arbitrary search text until AppleScript string escaping or another safe query mechanism is added, and prefer --no-play when you only want recommendations.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (8)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def _run(script: str, timeout: int = 10) -> str:
    try:
        r = subprocess.run(["osascript", "-e", script],
                          capture_output=True, text=True, timeout=timeout)
        return r.stdout.strip()
    except Exception as e:
Confidence
94% confidence
Finding
r = subprocess.run(["osascript", "-e", script], capture_output=True, text=True, timeout=timeout)

Lp3

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding
The skill advertises no explicit permissions, yet the documented behavior implies shell execution, local file access, network access, and control of a local application. This creates a transparency and consent gap: users and reviewers cannot accurately assess what system capabilities will be exercised before running it.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The declared purpose focuses on mood/weather-based playlist generation, but the documented/observed behavior includes broader actions such as direct Music.app control, queue manipulation, local library caching in the user's home directory, and external weather requests. That mismatch is dangerous because users may invoke a seemingly harmless recommendation skill without realizing it can alter playback state, modify queues, persist local data, and contact external services.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The trigger phrases are very broad and overlap with ordinary conversation such as '放音樂', '推薦歌', or '我想聽歌'. Broad triggers increase the chance of accidental activation, which is more concerning here because activation can lead to external requests and direct control of Music.app on the host system.

Missing User Warnings

Low
Confidence
90% confidence
Finding
The usage section shows playback commands, but the overall skill description does not clearly warn users that it will automate Music.app on macOS. This weakens informed consent and can lead to surprising system-side effects, especially when the skill is triggered by broad natural-language requests.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The skill automatically controls Music.app by default and may begin playback immediately without an explicit upfront consent prompt. In a voice/agent context, unexpected media control can violate user expectations, cause privacy or environmental disruption, and trigger unintended actions on the host device.

Missing User Warnings

Low
Confidence
91% confidence
Finding
The script sends the user-supplied city string to the external service wttr.in, which can disclose location-related data and the user's IP address without any explicit notice or consent prompt. Although the data is not highly sensitive in this context and the request uses a fixed HTTPS endpoint, it is still a real privacy issue because user input is transmitted off-device to a third party.

Unvalidated Output Injection

High
Category
Output Handling
Content
def _run(script: str, timeout: int = 10) -> str:
    try:
        r = subprocess.run(["osascript", "-e", script],
                          capture_output=True, text=True, timeout=timeout)
        return r.stdout.strip()
    except Exception as e:
Confidence
97% confidence
Finding
subprocess.run(["osascript", "-e", script], capture_output

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.