Trust Assessment
pm-visualizer received a trust score of 79/100, placing it in the Mostly Trusted category. This skill has passed most security checks with only minor considerations noted.
SkillShield's automated analysis identified 2 findings: 0 critical, 1 high, 1 medium, and 0 low severity. Key findings include Unsafe deserialization / dynamic eval, Command Injection via User-Controlled Output Filename.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. All layers scored 70 or above, reflecting consistent security practices.
Last analyzed on February 12, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings2
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| HIGH | Command Injection via User-Controlled Output Filename The skill's workflow explicitly instructs the LLM agent to execute a `python3` command where the output filename (`Output_Name.excalidraw`) is derived from user input. If this user-provided filename is not properly sanitized or escaped before being incorporated into the shell command, an attacker could inject arbitrary shell commands. For example, providing a filename like `'; rm -rf /; #.excalidraw'` could lead to the execution of `rm -rf /` on the host system. When constructing shell commands with user-provided input, always sanitize or escape the input using functions like `shlex.quote()` to prevent command injection. Alternatively, use `subprocess.run()` with `shell=False` and pass arguments as a list, ensuring the user-provided filename is treated as a single argument and not parsed by the shell. Additionally, restrict output paths to a safe, sandboxed directory to prevent writing to arbitrary file system locations. | LLM | SKILL.md:34 | |
| 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/sairammahadevan/thought-to-excalidraw/scripts/layout_diagram.py:144 |
Scan History
Embed Code
[](https://skillshield.io/report/19f44e561a74fbd4)
Powered by SkillShield