T09 · Insecure Skill Coding Practices
- Location
scripts/skill-creator.js:294- Finding
Shell Command Injection Through Untrusted Dependency Names
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
Skill Forge is a legitimate skill-creation tool, but its CLI includes unsafe command execution and installation paths that need review before use.
Review and patch the CLI before installing or running it on third-party skills. Avoid running check, install-deps, wrap, package --zip, or install --openclaw with untrusted skill names, _meta.json dependency values, or tool paths until shell execution is replaced with argument-array APIs, names are validated, paths are contained, and package/OpenClaw installs require clear confirmation.
scripts/skill-creator.js:294Shell Command Injection Through Untrusted Dependency Names
scripts/skill-creator.js:62Unsanitized Skill Names Permit Path Traversal and Windows Shell Injection
scripts/skill-creator.js:856Generated Executable Wrapper Embeds an Unquoted Tool Path
Referenced artifact was not completely inspected
| `SKILL.md` | Main documentation and usage guide | ✅ Yes |
Referenced artifact was not completely inspected
| `SKILL.md` | Main documentation and usage guide | ✅ Yes |
Referenced artifact was not completely inspected
| `SKILL.md` | Main documentation and usage guide | ✅ Yes |
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
# and provides recommendations based on best practices
# 3. Implement features with guidance from research
# (edit SKILL.md and other files)
# 4. Test and refine
skill-forge check my-excel-skill
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
dist/
# Environment variables
.env
.env.local
# IDE files
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Environment variables
.env
.env.local
# IDE files
.vscode/
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
skill-creator init web-scraper --template=browser
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
console.log(`Created directory structure at: ${skillDir}`);
console.log('Next steps:');
console.log('1. Edit _meta.json with your skill details');
console.log('2. Update SKILL.md with documentation');
console.log('3. Run: skill-creator check', skillName, 'to verify structure');
}
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
console.log(`Created directory structure at: ${skillDir}`);
console.log('Next steps:');
console.log('1. Edit _meta.json with your skill details');
console.log('2. Update SKILL.md with documentation');
console.log('3. Run: skill-creator check', skillName, 'to verify structure');
}
The README advertises automatic project research, multi-search engine integration, and browser automation, but does not warn users that prompts, queries, or repository data may be transmitted to external services. This creates a real privacy and security risk because operators may use the skill with sensitive code, internal project names, or credentials without understanding that data could leave the local environment.
The skill explicitly describes automatic searches of GitHub/ClawHub, analysis of external projects, and security scanning of referenced code, but does not warn users that prompts, repository identifiers, or related context may be sent to third-party services. In an agent skill context, silent outbound discovery and analysis can leak sensitive project intent, internal names, or code references and may violate privacy or network-boundary expectations.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# Create a new skill
skill-creator init my-first-skill
# With template
The top-level documentation presents this as a command-line tool for creating skills, which implies scaffolding and validation. However, the code also performs system-level package installation via package managers and installs files into an OpenClaw skills directory, which goes beyond simple skill creation behavior.
Automatic dependency installation modifies the host system without an interactive confirmation, dry-run preview, or safety warning. In this codebase that is especially risky because installation targets come from skill metadata and execution may invoke privileged package managers, amplifying accidental or malicious system changes.
The tool installs arbitrary system packages derived from _meta.json using shell commands such as winget, brew, and sudo apt-get. Because dependency names are external input and are interpolated into execSync command strings without validation, this creates both an overbroad system-modification capability and a command-injection risk with potentially privileged execution on Linux.
The Linux installation branch invokes sudo apt-get install -y, introducing privileged system modification from within the CLI. In combination with metadata-driven package names and shell interpolation, this can lead to privileged command execution or unauthorized package installation if the input is malicious or mistaken.
execSync(`brew install ${dependency}`, { stdio: 'ignore' });
} else {
// Linux - try apt
execSync(`sudo apt-get install -y ${dependency}`, { stdio: 'ignore' });
}
return true;
} catch (error) {
The OpenClaw install path copies files into a trusted directory under the user's home folder without prior confirmation. That can unexpectedly persist code or configuration where the agent platform may later load it, increasing the risk of silent deployment of unsafe skills.
The install path copies a supplied skill directory into a user-specific OpenClaw skills folder, which is a persistence/deployment action. Since the destination is under the user's home directory and the copy is performed automatically, a user can unknowingly deploy unreviewed or malicious skill content into a location likely to be trusted by the platform.
Wrapper generation writes an executable shell script that directly invokes a user-supplied tool path, embedding that path unescaped into shell content. If the supplied path contains shell metacharacters or command substitutions, the generated wrapper can execute unintended commands when run, turning a convenience feature into a code-execution primitive.
This markdown file contains a full second changelog section in Chinese, but it does not explain that the document is multilingual or offer a language choice. Under the policy rule for language/locale, forcing or implicitly preferring a specific language without opt-in can be a natural-language policy concern.
This is a manifest file, so vague-trigger review applies. The description says the skill is a "powerful tool" with "intelligent guidance" for "forging high-quality skills," but provides no concrete invocation phrases, context limits, or exclusion conditions, which could make activation matching overly broad in systems that rely on manifest descriptions.
The package command creates a new archive file via Compress-Archive, which writes data to disk, but there is no prior warning or confirmation before doing so. The success message appears only after the write, so users are not informed in advance that a new file will be created in the current location.
The help output enumerates the supported commands, but it does not include the implemented search/analyze/detect-malware functions elsewhere in the file. This creates a mismatch between the documented CLI surface and the actual code capabilities, especially for project inspection and malware scanning behaviors.
Detected: suspicious.dangerous_exec, suspicious.dynamic_code_execution, suspicious.env_credential_access