BÊTA Shoulder est en bêta — Les résultats peuvent parfois être incorrects. Vos retours façonnent ce que nous corrigeons ensuite. Donner mon avis
💻

Command Injection

Review child_process usage
🛡️ 3 règles détectent ceci

Improper Neutralization of Special Elements used in an OS Command

User input is passed unsanitized to system shell commands, allowing attackers to execute arbitrary commands on the server.

Prévalence
Common
Found in many applications
Impact
Critical
Full server compromise
Prévention
Avoid shell
Use execFile, not exec
2 Prévention
2 Prévention

Comment corriger cette vulnérabilité

Stratégies de prévention pour OS Command Injection basées sur 3 règles de détection Shoulder.

Command Injection via os/exec CRITICAL

Use exec.Command with explicit arguments, never shell invocation

+14 -6 go
  package main
  
  import (
      "net/http"
      "os/exec"
- )
- 
- func handler(w http.ResponseWriter, r *http.Request) {
-     cmd := r.URL.Query().Get("cmd")
-     // Vulnerable: shell invocation with user input
-     output, _ := exec.Command("sh", "-c", cmd).Output()
+     "regexp"
+ )
+ 
+ var safePattern = regexp.MustCompile(`^[a-zA-Z0-9._-]+$`)
+ 
+ func handler(w http.ResponseWriter, r *http.Request) {
+     filename := r.URL.Query().Get("file")
+     // Validate input
+     if !safePattern.MatchString(filename) {
+         http.Error(w, "Invalid filename", http.StatusBadRequest)
+         return
+     }
+     // Safe: explicit command with validated argument
+     output, _ := exec.Command("cat", filename).Output()
      w.Write(output)
  }
  
Command Injection via child_process CRITICAL

Use execFile/spawn with array arguments instead of exec with string commands

+5 -5 javascript
- const { exec } = require('child_process');
- 
- app.get('/convert', (req, res) => {
-   const filename = req.query.file;
-   exec(`convert ${filename} output.png`, (err, stdout) => {
+ const { execFile } = require('child_process');
+ 
+ app.get('/convert', (req, res) => {
+   const filename = req.query.file;
+   execFile('convert', [filename, 'output.png'], (err, stdout) => {
      res.send('Converted');
    });
  });
  
OS Command Injection CRITICAL

Use subprocess.run with list arguments and shell=False

+1 -1 python
  import subprocess
  from flask import request
  
  @app.route('/convert')
  def convert():
      filename = request.args.get('file')
-     subprocess.run(f'convert {filename} output.png', shell=True)
+     subprocess.run(['convert', filename, 'output.png'], check=True)
      return 'Done'
  
3 Détection
3 Détection

Trouvez les vulnérabilités dans votre code

Utilisez Shoulder pour scanner votre code à la recherche de patterns Command Injection. 3 règles.

terminal
# Scan with Shoulder CLI
npx @shoulderdev/cli trust --cwe=78

# Or scan entire project
npx @shoulderdev/cli trust .
4 Signes d'Alerte
4 Signes d'Alerte

Ce qu'il faut surveiller lors des revues de code

Ces patterns indiquent des vulnérabilités potentielles Command Injection. Recherchez-les lors des revues de code et des audits de sécurité.

🔴
user input flowing to os/exec command execution, enabling OS command injection go-command-injection
🔴
user input flowing to shell command execution functions javascript-command-injection
🔴
untrusted user input flowing into operating system command execution functions without proper saniti python-command-injection
5 Audit de code
5 Audit de code

Motifs de revue manuelle

Lors de la revue manuelle du code, cherchez ces motifs dangereux.

Signaux d'alerte à rechercher
query = + concaténation de chaînes
execute(f"... or execute("..." +
raw_query, rawQuery, executeRaw
${ or #{ à l'intérieur de chaînes SQL
6 Analyse experte
6 Analyse experte

Comment pensent les experts en sécurité

Le modèle mental qu'utilisent les professionnels de la sécurité lors de la revue de cette vulnérabilité.

1

Cartographier les points d'entrée

Paramètres d'URL, corps POST, en-têtes, cookies, téléversements de fichiers.

2

Tracez le flux de données

Suivez l'entrée à travers le code. Est-elle assainie ?

3

Identifiez les puits

Where queries are executed: execute(), query()

4

Vérifier les frontières de confiance

Surveillez les données stockées utilisées dans les requêtes.

🔍

Scannez votre base de code pour Command Injection

Shoulder CLI trouve les motifs vulnérables dans toute votre base de code.