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.
Comment corriger cette vulnérabilité
Stratégies de prévention pour OS Command Injection basées sur 3 règles de détection Shoulder.
Use exec.Command with explicit arguments, never shell invocation
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) }
Use execFile/spawn with array arguments instead of exec with string commands
- 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'); }); });
Use subprocess.run with list arguments and shell=False
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'
Trouvez les vulnérabilités dans votre code
Utilisez Shoulder pour scanner votre code à la recherche de patterns Command Injection. 3 règles.
# Scan with Shoulder CLI npx @shoulderdev/cli trust --cwe=78 # Or scan entire project npx @shoulderdev/cli trust .
Règles de Détection (3)
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é.
Motifs de revue manuelle
Lors de la revue manuelle du code, cherchez ces motifs dangereux.
query = + concaténation de chaînesexecute(f"... or execute("..." +raw_query, rawQuery, executeRaw${ or #{ à l'intérieur de chaînes SQLComment 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é.
Cartographier les points d'entrée
Paramètres d'URL, corps POST, en-têtes, cookies, téléversements de fichiers.
Tracez le flux de données
Suivez l'entrée à travers le code. Est-elle assainie ?
Identifiez les puits
Where queries are executed: execute(), query()
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.