Trust Assessment
chromecast-with-google-tv received a trust score of 10/100, placing it in the Untrusted category. This skill has significant security findings that require attention before use in production.
SkillShield's automated analysis identified 16 findings: 5 critical, 8 high, 3 medium, and 0 low severity. Key findings include Arbitrary command execution, Unsafe deserialization / dynamic eval, Dangerous call: subprocess.run().
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. The Manifest Analysis layer scored lowest at 0/100, indicating areas for improvement.
Last analyzed on February 13, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings16
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| CRITICAL | Arbitrary command execution Python shell execution (os.system, subprocess) Review all shell execution calls. Ensure commands are static (not built from user input), use absolute paths, and are strictly necessary. Prefer library APIs over shell commands. | Manifest | skills/antgly/chromecast-with-google-tv/google_tv_skill.py:184 | |
| CRITICAL | Arbitrary command execution Python shell execution (os.system, subprocess) Review all shell execution calls. Ensure commands are static (not built from user input), use absolute paths, and are strictly necessary. Prefer library APIs over shell commands. | Manifest | skills/antgly/chromecast-with-google-tv/google_tv_skill.py:236 | |
| CRITICAL | Arbitrary command execution Python shell execution (os.system, subprocess) Review all shell execution calls. Ensure commands are static (not built from user input), use absolute paths, and are strictly necessary. Prefer library APIs over shell commands. | Manifest | skills/antgly/chromecast-with-google-tv/google_tv_skill.py:594 | |
| CRITICAL | Arbitrary command execution Python shell execution (os.system, subprocess) Review all shell execution calls. Ensure commands are static (not built from user input), use absolute paths, and are strictly necessary. Prefer library APIs over shell commands. | Manifest | skills/antgly/chromecast-with-google-tv/play_show_via_global_search.py:73 | |
| CRITICAL | Arbitrary command execution Python shell execution (os.system, subprocess) Review all shell execution calls. Ensure commands are static (not built from user input), use absolute paths, and are strictly necessary. Prefer library APIs over shell commands. | Manifest | skills/antgly/chromecast-with-google-tv/play_show_via_global_search.py:86 | |
| HIGH | Dangerous call: subprocess.run() Call to 'subprocess.run()' detected in function 'run_adb'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/antgly/chromecast-with-google-tv/google_tv_skill.py:184 | |
| HIGH | Dangerous call: subprocess.run() Call to 'subprocess.run()' detected in function 'launch_global_search_show'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/antgly/chromecast-with-google-tv/google_tv_skill.py:236 | |
| HIGH | Dangerous call: subprocess.run() Call to 'subprocess.run()' detected in function 'resolve_youtube_id_with_yt_api'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/antgly/chromecast-with-google-tv/google_tv_skill.py:594 | |
| HIGH | Dangerous call: subprocess.Popen() Call to 'subprocess.Popen()' detected in function 'launch_scrcpy'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/antgly/chromecast-with-google-tv/play_show_via_global_search.py:86 | |
| HIGH | Dangerous call: subprocess.run() Call to 'subprocess.run()' detected in function 'run_adb'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/antgly/chromecast-with-google-tv/play_show_via_global_search.py:73 | |
| HIGH | Command Injection via ADB shell input text The skill executes `adb shell input text` with user-controlled input (`query`). If the `query` contains shell metacharacters (e.g., `$(evil_command)`, `&& evil_command`, or backticks), these could be interpreted by the shell on the target Android TV device, leading to arbitrary command execution on the device. This is a direct command injection vulnerability. Sanitize or escape user-provided `query` strings before passing them to `adb shell input text`. A robust solution might involve using `adb shell am broadcast` with an intent that carries the text, or ensuring the `input text` command itself is robust against shell metacharacters. Alternatively, consider using `adb shell input keyevent` for each character if the input is short and simple, though this is less efficient. | LLM | google_tv_skill.py:490 | |
| HIGH | Command Injection via ADB shell input text in global search helper The `play_show_via_global_search.py` helper module also executes `adb shell input text` with user-controlled input (`query`). Similar to the main skill file, if `query` contains shell metacharacters, it could lead to arbitrary command execution on the target Android TV device. Sanitize or escape user-provided `query` strings before passing them to `adb shell input text`. A robust solution might involve using `adb shell am broadcast` with an intent that carries the text, or ensuring the `input text` command itself is robust against shell metacharacters. Alternatively, consider using `adb shell input keyevent` for each character if the input is short and simple, though this is less efficient. | LLM | play_show_via_global_search.py:204 | |
| HIGH | Unpinned Go dependency for yt-api The `yt-api` Go dependency is specified with `@latest` in the manifest (`github.com/nerveband/youtube-api-cli/cmd/yt-api@latest`). This means the skill will always fetch the latest version of the dependency. An attacker could introduce malicious code into the `yt-api` repository, which would then be automatically pulled and executed by the skill without review, posing a significant supply chain risk. Pin the `yt-api` dependency to a specific, immutable version (e.g., a commit hash or a semantic version tag like `@v1.2.3`). Regularly review and update pinned dependencies to incorporate security fixes. | LLM | SKILL.md:10 | |
| MEDIUM | Unsafe deserialization / dynamic eval Decryption followed by code execution Remove obfuscated code execution patterns. Legitimate code does not need base64-encoded payloads executed via eval, encrypted-then-executed blobs, or dynamic attribute resolution to call system functions. | Manifest | skills/antgly/chromecast-with-google-tv/google_tv_skill.py:31 | |
| MEDIUM | Potential Command Injection via ADB pairing arguments The `adb_pair` function constructs an ADB command using user-provided `ip`, `port`, and `code` directly. While `adb pair` expects specific formats, if `adb` or the underlying shell environment does not robustly sanitize these arguments, a malicious user could potentially inject shell commands or manipulate the `adb pair` command's behavior. For example, a crafted `ip` or `code` could contain shell metacharacters. Validate `ip` as a valid IP address, `port` as an integer, and `code` as a 6-digit string before passing them to `adb pair`. This reduces the attack surface for argument injection. | LLM | google_tv_skill.py:109 | |
| MEDIUM | Potential Command Injection via ADB device argument The `run_adb` and `launch_scrcpy` functions construct commands where the `-s` (device serial/address) argument is derived from user-controlled input (`--device` CLI argument or `CHROMECAST_HOST` environment variable). If a malicious user provides a crafted `device` string (e.g., `192.168.1.100; evil_command`), it could potentially lead to command injection if `adb` or `scrcpy`'s argument parsing is vulnerable, or if the shell interprets the semicolon as a command separator before the `adb` or `scrcpy` binary is executed. Rigorously validate the `device` string to ensure it conforms to expected IP:PORT or serial number formats. Reject any input that contains shell metacharacters or unexpected patterns. Using `subprocess.run` with a list of arguments generally mitigates host-side shell injection, but argument injection into the target binary (`adb` or `scrcpy`) remains a concern. | LLM | google_tv_skill.py:194 |
Scan History
Embed Code
[](https://skillshield.io/report/9d7645109e0a1d41)
Powered by SkillShield