Trust Assessment
vpn-rotate-skill 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 9 findings: 2 critical, 4 high, 3 medium, and 0 low severity. Key findings include Arbitrary command execution, Dangerous call: subprocess.run(), Sensitive environment variable access: $USER.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. The Manifest Analysis layer scored lowest at 40/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 Findings9
| 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/acastellana/vpn-rotate-skill/scripts/vpn.py:79 | |
| 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/acastellana/vpn-rotate-skill/scripts/vpn.py:190 | |
| HIGH | Dangerous call: subprocess.run() Call to 'subprocess.run()' detected in function '_run'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/acastellana/vpn-rotate-skill/scripts/vpn.py:79 | |
| HIGH | Dangerous call: subprocess.run() Call to 'subprocess.run()' detected in function 'get_ip'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/acastellana/vpn-rotate-skill/scripts/vpn.py:190 | |
| HIGH | Plaintext Storage of VPN Credentials The skill stores VPN username and password in a plaintext file (`~/.vpn/creds.txt` or `~/.config/protonvpn/creds.txt`). Although `chmod 600` is applied to restrict access, this method of storing sensitive credentials is vulnerable to compromise if the user's account or system is breached, allowing other processes to read the file. Implement a more secure method for storing credentials, such as using a system keyring, environment variables (with appropriate access controls), or prompting the user for credentials at runtime rather than storing them persistently in plaintext. If environment variables are used, ensure they are not logged or exposed. | LLM | scripts/vpn.py:30 | |
| HIGH | Excessive Passwordless Sudo Permissions for 'kill' The `setup.sh` script modifies the sudoers file to grant passwordless execution of `/bin/kill` for the current user. This means any process running as the user can execute `sudo kill <PID>` without a password. This significantly increases the attack surface, as a compromised user account could be leveraged to terminate arbitrary processes on the system, including critical system services, if the attacker can determine their Process IDs (PIDs). Restrict the sudoers entry for `kill` to be more specific, if possible, or remove passwordless access for `kill` entirely. If `kill` is strictly necessary for the skill's operation, consider if there's a less privileged way to achieve the desired outcome or if the skill can prompt for a password when `kill` is invoked. For example, instead of `kill`, use `pkill -f openvpn` which is more specific to the target process. | LLM | scripts/setup.sh:109 | |
| MEDIUM | Sensitive environment variable access: $USER Access to sensitive environment variable '$USER' detected in shell context. Verify this environment variable access is necessary and the value is not exfiltrated. | Static | skills/acastellana/vpn-rotate-skill/SKILL.md:40 | |
| MEDIUM | Sensitive environment variable access: $HOME Access to sensitive environment variable '$HOME' detected in shell context. Verify this environment variable access is necessary and the value is not exfiltrated. | Static | skills/acastellana/vpn-rotate-skill/scripts/setup.sh:23 | |
| MEDIUM | Sensitive environment variable access: $USER Access to sensitive environment variable '$USER' detected in shell context. Verify this environment variable access is necessary and the value is not exfiltrated. | Static | skills/acastellana/vpn-rotate-skill/scripts/setup.sh:96 |
Scan History
Embed Code
[](https://skillshield.io/report/4a665c08e7a46ad7)
Powered by SkillShield