T09 · Insecure Skill Coding Practices
- Location
preinstall-check.sh:16- Finding
Allowlist validation can be bypassed through skill-name impersonation or regular-expression injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed security scanner, but its install-check controls can be bypassed and it makes persistent blocklist changes, so it should be reviewed before use.
Install only if you are comfortable treating this as an advisory scanner, not a reliable enforcement gate. Do not rely on its allowlist as proof a skill is safe, review any blocklist changes it makes, and prefer a scanner that binds approvals to content hashes and fails closed on scan errors.
preinstall-check.sh:16Allowlist validation can be bypassed through skill-name impersonation or regular-expression injection
audit.sh:28Option-like target paths can alter grep behavior and cause incomplete scans
audit.sh:28Recursive scan omits content referenced through symbolic links
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
check_pattern "Network Exfiltration" "HIGH" "(requests\.post|requests\.put|urllib\.request\.urlopen|http\.client\.HTTPConnection|fetch\([^)]+{)"
check_pattern "Credential File Access" "HIGH" "(open\([^)]*\.(ssh|aws|gnupg|config)|read.*id_rsa|read.*credentials)"
check_pattern "Password Store Access" "HIGH" "subprocess\.(run|call|Popen).*pass\s+(show|insert)"
check_pattern "Keyring/Keychain Access" "HIGH" "(keyring\.get|SecItemCopyMatching|security find-generic-password)"
check_pattern "Shell Command Injection" "HIGH" "(os\.system\(|subprocess\.[^(]+\([^)]*shell=True.*\+)"
# MEDIUM checks
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
check_pattern "Network Exfiltration" "HIGH" "(requests\.post|requests\.put|urllib\.request\.urlopen|http\.client\.HTTPConnection|fetch\([^)]+{)"
check_pattern "Credential File Access" "HIGH" "(open\([^)]*\.(ssh|aws|gnupg|config)|read.*id_rsa|read.*credentials)"
check_pattern "Password Store Access" "HIGH" "subprocess\.(run|call|Popen).*pass\s+(show|insert)"
check_pattern "Keyring/Keychain Access" "HIGH" "(keyring\.get|SecItemCopyMatching|security find-generic-password)"
check_pattern "Shell Command Injection" "HIGH" "(os\.system\(|subprocess\.[^(]+\([^)]*shell=True.*\+)"
# MEDIUM checks
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
check_pattern "Network Exfiltration" "HIGH" "(requests\.post|requests\.put|urllib\.request\.urlopen|http\.client\.HTTPConnection|fetch\([^)]+{)"
check_pattern "Credential File Access" "HIGH" "(open\([^)]*\.(ssh|aws|gnupg|config)|read.*id_rsa|read.*credentials)"
check_pattern "Password Store Access" "HIGH" "subprocess\.(run|call|Popen).*pass\s+(show|insert)"
check_pattern "Keyring/Keychain Access" "HIGH" "(keyring\.get|SecItemCopyMatching|security find-generic-password)"
check_pattern "Shell Command Injection" "HIGH" "(os\.system\(|subprocess\.[^(]+\([^)]*shell=True.*\+)"
# MEDIUM checks
Without declared permissions the skill's intent is opaque and cannot be validated.
The trigger conditions are very broad and include generic security-related workflows such as skill audit, security scan, and before loading external skill. A broadly auto-triggered skill that suggests shell execution and includes promotional external links can become an over-invoked component in sensitive contexts, increasing the chance of unintended execution, user confusion, or abuse as a socially trusted security authority.
The script is presented as an audit tool, but on CRITICAL findings it also mutates local state by appending entries to a blocklist file. This side effect can surprise users and downstream automation, and it creates an enforcement mechanism that may persist beyond the current scan without explicit consent.
The usage/header comments describe a passive audit script, but the implementation performs enforcement-like persistence by maintaining a blocklist. That mismatch can mislead operators about side effects, which is a security-relevant transparency issue in tooling that may be run automatically.
Appending to a local blocklist without user-facing warning or confirmation introduces an undocumented persistent state change. In automated or shared environments this can cause denial of use, audit confusion, or policy drift if entries are added unexpectedly.
No suspicious patterns detected.