Back to skill

Security audit

媒体服务器控制

Security checks for vulnerabilities and agentic risk

Overview

This skill is for Jellyfin and TV control, but it gives an agent broad command execution around home devices while documenting weak trigger rules and insecure credential examples.

Review this skill carefully before installing. Only use it for explicit Jellyfin or TV-control requests, avoid plaintext HTTP for Jellyfin or Home Assistant, do not paste real tokens into shell commands or logs, prefer least-privilege/rotatable tokens, and pin/review optional dependencies before installing them.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
SKILL.md:201
Finding

API credentials transmitted over plaintext HTTP and exposed in command arguments

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 201–209, with additional vulnerable command examples at lines 313 and 347
Vulnerability Type: Plaintext credential transmission and insecure secret handling
Risk Level: High

Vulnerable Code

json
{
  "skills": {
    "entries": {
      "jellyfin-control": {
        "env": {
          "JF_URL": "http://192.168.1.50:8096",
          "JF_API_KEY": "your-jellyfin-api-key",
          "JF_USER": "username",
          "HA_URL": "http://192.168.1.138:8123",
          "HA_TOKEN": "your-ha-long-lived-token",
          "HA_TV_ENTITY": "media_player.lg_webos_tv",
          "TV_MAC": "AA:BB:CC:DD:EE:FF"
        }
      }
    }
  }
}

Additional command examples expose secrets through plaintext HTTP and process arguments:

bash
curl -H "X-Emby-Token: YOUR_API_KEY" http://YOUR_IP:8096/System/Info
bash
curl -H "Authorization: Bearer YOUR_TOKEN" http://HA_URL/api/states

Technical Analysis

The documented configuration and troubleshooting commands send Jellyfin API keys and Home Assistant bearer tokens over unencrypted HTTP. HTTP does not provide transport confidentiality or server authentication. Any attacker able to observe or manipulate traffic on the relevant network segment could recover or alter these requests.

The examples also place credentials directly in command-line arguments. Depending on the operating system and local security configuration, command arguments can be exposed through process inspection utilities, process metadata, terminal logs, audit systems, or shell history when commands are copied or expanded manually.

These tokens function as authentication credentials rather than harmless identifiers. Their compromise may therefore provide direct access to Jellyfin or Home Assistant APIs without requiring the corresponding user password.

Attack Path

  1. A user follows the documented con ...[truncated 1507 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require HTTPS for Jellyfin and Home Assistant endpoints. Document reverse-proxy or native TLS configuration and use certificate validation.
  2. Reject plaintext HTTP endpoints by default, except for explicitly approved loopback or isolated development environments.
  3. Clearly warn users that HTTP must not be used across untrusted or shared network segments.
  4. Avoid placing tokens directly in interactive command arguments. Load them from protected environment variables or secret files and pass sensitive headers through standard input or another mechanism that does not expose them in the process list.
  5. For curl, consider a protected temporary configuration supplied through standard input, ensuring that it is not written to shell history or a persistent file.
  6. Store secret files with restrictive permissions and exclude them from source control, logs, diagnostic output, and generated reports.
  7. Use narrowly scoped service accounts or tokens where supported, and avoid using an administrator-level Home Assistant token.
  8. Add token rotation and revocation instructions for suspected exposure.
  9. Redact authorization headers and API keys from execution logs and structured responses.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:256
Finding

Unpinned third-party package installation creates supply-chain risk

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 256 and 365
Vulnerability Type: Unpinned runtime dependency installation
Risk Level: Medium

Vulnerable Code

bash
npm install ws

The same installation instruction is repeated in the dependency table:

text
| ws | WebSocket library | Optional for WebOS | npm install ws |

Technical Analysis

The Skill instructs users or agents to install ws without an exact version, lockfile, integrity constraint, or documented package-registry restriction. Consequently, the resolved dependency can change after the Skill has been reviewed.

npm package installation can also execute dependency lifecycle scripts unless scripts are explicitly disabled. If the package, a transitive dependency, its maintainer account, or the selected registry is compromised, installation may run attacker-controlled code with the privileges of the user executing the Agent.

The project contains no implementation files or lockfile that would establish a reproducible, reviewed dependency graph. The audit found only SKILL.md, so the effective package version and its transitive dependencies cannot be verified from the submitted artifact.

Attack Path

  1. A user or Agent follows the documented WebOS setup instructions.
  2. It runs npm install ws without an exact version or verified lockfile.
  3. npm resolves the package and transitive dependencies from the configured registry at execution time.
  4. A compromised package release, maintainer account, dependency, registry, or local registry configuration supplies malicious package content.
  5. Malicious lifecycle code executes during installation, or malicious library code executes when the dependency is later imported.
  6. The payload gains the privileges of the account running npm and can access files, environment variables, credentials, and network resources available to that account.

Impact Assessment

Succ ...[truncated 543 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin ws to a reviewed exact version rather than resolving the latest available release.
  2. Include a committed lockfile containing integrity metadata and require reproducible installation with npm ci.
  3. Use npm ci --ignore-scripts where dependency lifecycle scripts are not required.
  4. Document the expected npm registry and prevent unexpected registry overrides in automated execution environments.
  5. Run dependency installation without administrator privileges and in a restricted workspace or container.
  6. Perform vulnerability and provenance checks on the pinned dependency and its transitive dependency graph before release.
  7. Keep dependency updates explicit and review-controlled rather than allowing versions to change when the Skill is invoked.
  8. Include the actual implementation and package metadata in the audited artifact so dependency use and integrity can be verified.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Vague Triggers

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The trigger condition is overly broad and unrelated to the actual function of the skill, making autonomous invocation more likely in inappropriate contexts. Because this skill can execute commands and control devices, ambiguous activation criteria materially raise the chance of unintended power-on, playback, or network interactions.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The 'known limitations' section says unsupported operations can still be executed through input_params, directly contradicting the stated restrictions. In an agent context, such contradictory instructions can cause the model to treat forbidden features as available and perform unintended actions or fabricate execution paths.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

Saying the user can trigger the scenario through general natural-language instructions without precise constraints is too permissive for a skill that performs exec-based media and device actions. This broadness increases the risk that an agent interprets vague user text as authorization to control TVs, launch apps, or start playback.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation describes an automatic workflow that can wake a TV, launch an app, and start playback, but it does not prominently warn users that physical devices may power on and media may begin automatically. In a home environment, this can cause privacy, nuisance, or unauthorized-use issues, especially when invoked by an autonomous agent.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The free edition is described as limited to a single TV/device, but the documentation also exposes commands that target named devices and backend-specific direct control. This inconsistency can mislead an agent or user into attempting broader device control than intended, increasing the risk of unauthorized actions on unintended household devices.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The trigger conditions describe analytics, reporting, and visualization use cases that do not match this media-control skill. This domain mismatch can cause an agent to invoke the skill in unrelated contexts, leading to accidental command execution, confusion about capabilities, or misuse of connected media and home-control integrations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill asks users to configure sensitive credentials such as Jellyfin API keys, passwords, and Home Assistant tokens, but it lacks explicit guidance on secure storage, least privilege, redaction, and logging hygiene. In an exec-enabled agent environment, poor credential handling can expose home-media and home-automation systems to unauthorized access.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
74% confidence
Finding

The entire visible skill name and documentation are presented in Chinese, with no indication that users may choose another language or locale. For a broadly scoped skill intended for multiple agent platforms, this can be a language-policy concern if users are not given an opt-in or alternative.

Content

No source excerpt is available for this finding.