Skip to content
Back to skills

Sc Cmdi

ASecurity

OS Command Injection detection in shell execution, subprocess calls, and process spawning

  • 4 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 12, 2026
developmentjavascriptpythongojavarubyphpc#shellnodedocker

Works with

  • cli

Security analysis

A93/100
  • highPerforms destructive filesystem operations

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill sc-cmdi --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Sc Cmdi?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Sc Cmdi
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-sc-cmdi/badge)](https://www.skillsdirectory.com/skills/aibot88-sc-cmdi)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: sc-cmdi
description: OS Command Injection detection in shell execution, subprocess calls, and process spawning
license: MIT
metadata:
  category: security
  version: "1.0.0"
---

# SC: Command Injection

## Purpose

Detects OS command injection vulnerabilities where user-controlled input is passed to system shell commands, subprocess execution, or process spawning functions without proper sanitization. Distinguishes between full command injection (attacker controls the command) and argument injection (attacker controls arguments to a fixed command).

## Activation

Called by sc-orchestrator during Phase 2. Runs against all detected languages.

## Phase 1: Discovery

### File Patterns to Search
```
**/*.py, **/*.js, **/*.ts, **/*.go, **/*.php, **/*.java, **/*.kt,
**/*.cs, **/*.rb, **/scripts/*, **/*exec*, **/*shell*, **/*command*,
**/*process*, **/*system*, **/*spawn*
```

### Keyword Patterns to Search
```
# Python
"os.system(", "os.popen(", "subprocess.call(", "subprocess.run(",
"subprocess.Popen(", "subprocess.check_output(", "commands.getoutput(",
"shell=True"

# JavaScript/Node.js
"child_process.exec(", "child_process.execSync(",
"child_process.spawn(", "execFile(", "require('child_process')",
"shelljs", "execa"

# Go
"exec.Command(", "exec.CommandContext(", "os/exec"

# PHP
"exec(", "system(", "passthru(", "shell_exec(", "popen(",
"proc_open(", "pcntl_exec(", "backtick"

# Java
"Runtime.getRuntime().exec(", "ProcessBuilder(",
"new ProcessBuilder("

# C#
"Process.Start(", "ProcessStartInfo(",
"System.Diagnostics.Process"

# Ruby
"system(", "exec(", "IO.popen(", "`"
```

### Data Flow Tracing

**Sources:** HTTP request parameters, file names from uploads, environment variables from user-controlled sources, database values originally from user input.

**Sinks:** All command execution functions listed above.

## Phase 2: Verification

### Command Injection vs Argument Injection

**Command injection** — attacker controls the full command or can inject shell operators:
```python
# VULNERABLE: Full command injection
os.system(f"echo {user_input}")  # user_input = "; rm -rf /"
```

**Argument injection** — attacker controls arguments to a known-safe binary:
```python
# VULNERABLE: Argument injection
subprocess.run(["git", "clone", user_url])  # user_url = "--upload-pack=evil"
```

### Shell Metacharacters
Watch for user input reaching shell with these metacharacters unescaped:
`;`, `|`, `&`, `&&`, `||`, `$()`, `` ` ` ``, `>`, `<`, `\n`

### Language-Specific Examples

```python
# VULNERABLE: shell=True with user input
subprocess.run(f"convert {filename} output.png", shell=True)

# SAFE: Array form without shell
subprocess.run(["convert", filename, "output.png"])
```

```javascript
// VULNERABLE: exec uses shell
const { exec } = require('child_process');
exec(`ls ${userDir}`, callback);

// SAFE: execFile does not use shell
const { execFile } = require('child_process');
execFile('ls', [userDir], callback);
```

```go
// VULNERABLE: User input in shell command via sh -c
cmd := exec.Command("sh", "-c", "echo " + userInput)

// SAFE: Direct execution without shell
cmd := exec.Command("echo", userInput)
```

```java
// VULNERABLE: String command to Runtime.exec
Runtime.getRuntime().exec("cmd /c dir " + userInput);

// SAFE: Array form
new ProcessBuilder("cmd", "/c", "dir", userInput).start();
// Note: Still risky if userInput contains shell metacharacters and cmd.exe interprets them
```

```php
// VULNERABLE: User input in system call
system("ping -c 4 " . $_GET['host']);

// SAFE: escapeshellarg
system("ping -c 4 " . escapeshellarg($_GET['host']));
```

## Severity Classification

- **Critical:** Direct command injection from HTTP parameter with shell=True/exec(), no sanitization
- **High:** Argument injection allowing arbitrary file read/write or network access
- **Medium:** Command injection requiring specific conditions, or in admin-only endpoints
- **Low:** Command injection in CLI tools processing local input, or with strong input validation

## Output Format

### Finding: CMDI-{NNN}
- **Title:** {Command|Argument} Injection in {function/endpoint}
- **Severity:** Critical | High | Medium | Low
- **Confidence:** 0-100
- **File:** file/path:line
- **Vulnerability Type:** CWE-78 (OS Command Injection)
- **Description:** User input from {source} reaches {sink} allowing {command|argument} injection.
- **Proof of Concept:** Supplying `; id` or `$(whoami)` as the {parameter} would execute additional commands.
- **Impact:** Full server compromise, data exfiltration, lateral movement, denial of service.
- **Remediation:** Use array-form command execution. Avoid shell=True. Apply allowlist validation or escapeshellarg().
- **References:** https://cwe.mitre.org/data/definitions/78.html

## Common False Positives

1. **Constants in command strings** — commands built entirely from hardcoded values
2. **Internal helper scripts** — commands using internally-generated values, not user input
3. **Build scripts/CI** — command execution in build tooling, not runtime code
4. **execFile with static binary** — `execFile('git', ['status'])` with no user input
5. **Docker/container commands** — orchestration scripts that don't handle user input

Files in this skill

  • SKILL.md5.1 KB
  • source.json573 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.