skill-factory
The skill uses undeclared shell execution, hardcoded suspicious paths, and remote npx code fetching without version pinning or integrity checks, with a doc-to-code mismatch on permissions.
Why this conclusion was reached
2/4 dimensions flagged4 undeclared or violating capabilities were inferred.
No obvious high-risk egress or execution signals were found.
The report includes 5 attack-chain steps and 3 severe findings.
1 dependency or supply-chain issues need attention.
Attack Chain
Entry · SKILL.md:1
Escalation · scripts/factory.js:161
supply_chain · scripts/factory.js:170
Escalation · scripts/factory.js:163
Escalation · scripts/factory.js:53
What drove the risk score up
SKILL.md does not declare subprocess/child_process usage
npx clawhub@latest fetches and executes unversioned remote code without integrity check
References /opt/homebrew/lib/node_modules/.../package_skill.py — a planted or platform-specific path not declared anywhere
Inferred filesystem:WRITE and network:READ not reflected in SKILL.md documentation
Skill writes to skills/public/<slug>/ with user-controlled slug from arbitrary description input
Most important evidence
Undeclared shell command execution via execSync
The script uses child_process.execSync to run arbitrary shell commands (python3 and npx) without declaring shell execution capability in SKILL.md. This is the highest-value doc-to-code mismatch signal.
scripts/factory.js:161 Suspicious hardcoded path referencing /opt/homebrew/
A hardcoded absolute path /opt/homebrew/lib/node_modules/openclaw/skills/skill-creator/scripts/package_skill.py is used. This path pattern (/opt/homebrew) suggests macOS Homebrew targeting and is not declared in SKILL.md. It could be a planted backdoor path or a platform-specific dependency that may not exist.
scripts/factory.js:163 Remote code execution via npx @latest without version pinning
The publish function runs 'npx clawhub@latest publish' which fetches and executes remote npm code without a pinned version or hash verification. This is equivalent to curl|bash for the npm ecosystem — a critical supply chain risk.
scripts/factory.js:170 SKILL.md does not declare any allowed-tools or capability permissions
The SKILL.md frontmatter is missing allowed-tools declarations. The code uses filesystem:WRITE, shell:WRITE, and network:READ+EXECUTE, but SKILL.md declares none of these. This is a clear doc-to-code mismatch.
SKILL.md:1 Arbitrary slug creation from user input could lead to path traversal
The slugify() function converts a user-provided description into a directory name without sanitization for path traversal. While slugify removes non-alphanumeric chars, a crafted input like '../../../etc/cron.d' could write outside the intended skills/public/ directory.
scripts/factory.js:53 No dependency pinning — zero stdlib-only constraint in package metadata
SKILL.md states the factory 'uses the LLM as the engine' but does not declare npm/node dependencies. The script uses only Node.js stdlib (fs, path, child_process), which is good, but no package.json or requirements.txt exists to lock the environment.
scripts/factory.js:1 Declared capability vs actual capability
scripts/factory.js:122 fs.mkdirSync(...); scripts/factory.js:130 fs.writeFileSync(...) scripts/factory.js:170 execSync('npx clawhub@latest publish...'); scripts/factory.js:163 execSync('python3 /opt/homebrew/...') scripts/factory.js:161 execSync('python3 ...'); scripts/factory.js:170 execSync('npx clawhub@latest ...') scripts/factory.js:14 process.env.WORKSPACE; scripts/factory.js:15 process.env.CLAWHUB_TOKEN implied by npx login Suspicious artifacts and egress
No obvious IOC was extracted.
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| npx (clawhub@latest) | * (unpinned) | npm remote | No | Remote code execution — no version pinning, no hash verification |
| python3 skill-creator | unpinned | /opt/homebrew/lib/node_modules/openclaw/... | No | Hardcoded path, not declared, platform-specific |
File composition
scripts/factory.js SKILL.md