owasp-security
github.com/hoodini/ai-agents-skills
Scanned Thu, 28 May 2026 17:06:36 GMT
Scan ID crawl-eatkj0hv4ecuis12jbf1nz76 · 11ms
B
SCORE 75 / 100
Verdict: Safe to install
2 high-severity findings.
This skill runs unsafe shell commands plus 4 other issues listed below.
0 critical2 high3 medium7 rules passed
Why grade B?
score · 75 / 100The current grade reflects 2 high-severity findings (any HIGH → B).
0 CRIT2 HIGH3 MED0 LOW
To reach a higher grade
- AReach Atarget score 95
Resolve all 2 HIGH + 1 of 3 MED (cap is 2).
Thresholds are documented at /docs/grading. Source-of-truth is the grade() function in @skillox/scanner.
Findings · ordered by severity
highDangerous shell pattern: rm -rf /The skill contains a shell command pattern (`rm -rf /`) commonly used in destructive or supply-chain attacks.▾
Dangerous shell pattern: rm -rf /
The skill contains a shell command pattern (`rm -rf /`) commonly used in destructive or supply-chain attacks.
196
197// ❌ BAD: Shell injection
198exec(`convert ${userInput} output.png`); // userInput: "; rm -rf /"← rm -rf / — common in destructive or supply-chain attacks
199
200// ✅ GOOD: Use execFile with array args
highShell-injection vector: child_process exec/spawn with template literalThe skill constructs a shell command by interpolating into a string passed to an exec-family function (`child_process exec/spawn with template literal`). If the interpolated value comes from agent context or user input, this is direct command injection. Use parameterized APIs (`spawn` with an arg-array, `subprocess.run([...])` without `shell=True`).▾
Shell-injection vector: child_process exec/spawn with template literal
The skill constructs a shell command by interpolating into a string passed to an exec-family function (`child_process exec/spawn with template literal`). If the interpolated value comes from agent context or user input, this is direct command injection. Use parameterized APIs (`spawn` with an arg-array, `subprocess.run([...])` without `shell=True`).
196
197// ❌ BAD: Shell injection
198exec(`convert ${userInput} output.png`); // userInput: "; rm -rf /"← child_process exec/spawn with template literal — use a parameterized API instead
199
200// ✅ GOOD: Use execFile with array args
medArbitrary subprocess execution detectedThe skill spawns subprocesses. Without a capability manifest declaring this, the skill could execute arbitrary commands.▾
Arbitrary subprocess execution detected
The skill spawns subprocesses. Without a capability manifest declaring this, the skill could execute arbitrary commands.
193### Command Injection Prevention
194```typescript
195import { execFile } from 'child_process';← spawns a subprocess outside declared capabilities
196
197// ❌ BAD: Shell injection
medArbitrary subprocess execution detectedThe skill spawns subprocesses. Without a capability manifest declaring this, the skill could execute arbitrary commands.▾
Arbitrary subprocess execution detected
The skill spawns subprocesses. Without a capability manifest declaring this, the skill could execute arbitrary commands.
196
197// ❌ BAD: Shell injection
198exec(`convert ${userInput} output.png`); // userInput: "; rm -rf /"← spawns a subprocess outside declared capabilities
199
200// ✅ GOOD: Use execFile with array args
medNo capability manifest declaredThe skill ships without a `manifest.yaml` or `capabilities` block in its frontmatter. Without a manifest, the runtime cannot enforce what this skill is permitted to do.rule: no-manifest▾
No capability manifest declared
The skill ships without a `manifest.yaml` or `capabilities` block in its frontmatter. Without a manifest, the runtime cannot enforce what this skill is permitted to do.
rule:
no-manifestskillox.io/r/crawl-eatkj0hv4ecuis12jbf1nz76