agent-v3-security-architect
github.com/ruvnet/ruflo
Scanned Thu, 28 May 2026 17:35:48 GMT
Scan ID crawl-rz2cs39ezc0le7kilm12aqa0 · 1ms
B
SCORE 75 / 100
Verdict: Safe to install
1 high-severity finding.
This skill triggers the shell-injection-template rule plus 5 other issues listed below.
0 critical1 high5 medium6 rules passed
Why grade B?
score · 75 / 100The current grade reflects 1 high-severity finding (any HIGH → B).
0 CRIT1 HIGH5 MED0 LOW
To reach a higher grade
- AReach Atarget score 95
Resolve all 1 HIGH + 3 of 5 MED (cap is 2).
Thresholds are documented at /docs/grading. Source-of-truth is the grade() function in @skillox/scanner.
Findings · ordered by severity
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`).
138
139// ❌ Dangerous: shell injection possible
140// exec(`git ${userInput}`, { shell: true });← child_process exec/spawn with template literal — use a parameterized API instead
141
142// ✅ Safe: no shell interpretation
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.
73
74### **HIGH-1: Command Injection**
75- **Issue**: shell:true in spawn() calls← spawns a subprocess outside declared capabilities
76- **Action**: Use execFile without shell
77- **Files**: Multiple spawn() locations
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.
75- **Issue**: shell:true in spawn() calls
76- **Action**: Use execFile without shell
77- **Files**: Multiple spawn() locations← spawns a subprocess outside declared capabilities
78- **Timeline**: Phase 1 Week 2
79
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.
135```typescript
136// Safe command execution
137import { execFile } from 'child_process';← spawns a subprocess outside declared capabilities
138
139// ❌ Dangerous: shell injection possible
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.
138
139// ❌ Dangerous: shell injection possible
140// exec(`git ${userInput}`, { shell: true });← spawns a subprocess outside declared capabilities
141
142// ✅ Safe: no shell interpretation
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-rz2cs39ezc0le7kilm12aqa0