Trust Assessment
meshtastic 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 14 findings: 9 critical, 3 high, 1 medium, and 1 low severity. Key findings include Arbitrary command execution, Unsafe deserialization / dynamic eval, Node lockfile missing.
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 14, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings14
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| CRITICAL | Arbitrary command execution Python dynamic code execution (exec/eval/compile) 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-direct.js:23 | |
| CRITICAL | Arbitrary command execution Python dynamic code execution (exec/eval/compile) 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-persistent.js:142 | |
| CRITICAL | Arbitrary command execution Node.js child_process require 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-direct.js:7 | |
| CRITICAL | Arbitrary command execution Node.js child_process require 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-persistent.js:16 | |
| CRITICAL | Arbitrary command execution Node.js synchronous shell execution 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-direct.js:27 | |
| CRITICAL | Arbitrary command execution Node.js synchronous shell execution 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-persistent.js:55 | |
| CRITICAL | Arbitrary command execution Node.js synchronous shell execution 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-persistent.js:170 | |
| CRITICAL | Unsafe shell command execution with user input in meshtastic-direct.js The `exec` function in `scripts/meshtastic-direct.js` constructs shell commands by directly concatenating user-controlled input (`args`) without proper shell escaping. This allows an attacker to inject arbitrary shell commands by crafting malicious input. Specifically, the `setSetting` method passes `path` and `value` directly into the command string, and the `sendMessage` method passes `destination` unquoted and `text` with insufficient escaping (only double quotes are escaped, not other shell metacharacters). User input from the `process()` method directly feeds into these vulnerable functions. Replace `execSync` with `spawn` and pass arguments as an array to prevent shell interpretation of metacharacters. If `execSync` is strictly necessary, implement robust shell escaping for all user-controlled variables (`args`, `path`, `value`, `destination`, `text`) before concatenation into the command string. For `sendMessage`, ensure `text` is fully shell-escaped, not just double-quote escaped. | LLM | scripts/meshtastic-direct.js:24 | |
| CRITICAL | Unsafe shell command execution with user input in meshtastic-persistent.js The `_executeCommand` function in `scripts/meshtastic-persistent.js` constructs shell commands using `execSync` by directly concatenating user-controlled input (`args`) without proper shell escaping. This allows an attacker to inject arbitrary shell commands. Similar to `meshtastic-direct.js`, the `setSetting` method passes `path` and `value` directly, and the `sendMessage` method passes `text` with insufficient escaping (only double quotes are escaped, not other shell metacharacters). User input from the `process()` method directly feeds into these vulnerable functions. Replace `execSync` with `spawn` and pass arguments as an array to prevent shell interpretation of metacharacters. If `execSync` is strictly necessary, implement robust shell escaping for all user-controlled variables (`args`, `path`, `value`, `text`) before concatenation into the command string. For `sendMessage`, ensure `text` is fully shell-escaped, not just double-quote escaped. | LLM | scripts/meshtastic-persistent.js:140 | |
| HIGH | 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-direct.js:35 | |
| HIGH | 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-direct.js:40 | |
| HIGH | 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-persistent.js:252 | |
| 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/snail3d/voice-devotional/meshtastic-skill/scripts/meshtastic-direct.js:169 | |
| LOW | Node lockfile missing package.json is present but no lockfile was found (package-lock.json, pnpm-lock.yaml, or yarn.lock). Commit a lockfile for deterministic dependency resolution. | Dependencies | skills/snail3d/voice-devotional/meshtastic-skill/package.json |
Scan History
Embed Code
[](https://skillshield.io/report/fd47c4ed2961855b)
Powered by SkillShield