T09 · Insecure Skill Coding Practices
- 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: HighVulnerable 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/Infobash curl -H "Authorization: Bearer YOUR_TOKEN" http://HA_URL/api/statesTechnical 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
- A user follows the documented con ...[truncated 1507 chars]
- Remediation
View remediation
Remediation Suggestions
- Require HTTPS for Jellyfin and Home Assistant endpoints. Document reverse-proxy or native TLS configuration and use certificate validation.
- Reject plaintext HTTP endpoints by default, except for explicitly approved loopback or isolated development environments.
- Clearly warn users that HTTP must not be used across untrusted or shared network segments.
- 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.
- For
curl, consider a protected temporary configuration supplied through standard input, ensuring that it is not written to shell history or a persistent file. - Store secret files with restrictive permissions and exclude them from source control, logs, diagnostic output, and generated reports.
- Use narrowly scoped service accounts or tokens where supported, and avoid using an administrator-level Home Assistant token.
- Add token rotation and revocation instructions for suspected exposure.
- Redact authorization headers and API keys from execution logs and structured responses.
