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.
Como corrigir esta vulnerabilidade
Estratégias de prevenção para OS Command Injection baseadas em 3 regras de detecção do 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'
Encontre vulnerabilidades no seu código
Use o Shoulder para escanear seu código em busca de padrões Command Injection. 3 regras.
# Scan with Shoulder CLI npx @shoulderdev/cli trust --cwe=78 # Or scan entire project npx @shoulderdev/cli trust .
Regras de Detecção (3)
O que observar nas revisões de código
Estes padrões indicam vulnerabilidades potenciais de Command Injection. Procure-os durante revisões de código e auditorias de segurança.
Padrões de revisão manual
Ao revisar código manualmente, procure por estes padrões perigosos.
query = + concatenação de stringsexecute(f"... or execute("..." +raw_query, rawQuery, executeRaw${ or #{ dentro de strings SQLComo especialistas em segurança pensam
O modelo mental que profissionais de segurança usam ao revisar esta vulnerabilidade.
Mapeie os pontos de entrada
Parâmetros de URL, corpos POST, cabeçalhos, cookies, uploads de arquivo.
Rastreie o fluxo de dados
Siga a entrada através do código. Ela é sanitizada?
Identifique os sumidouros
Where queries are executed: execute(), query()
Verifique as fronteiras de confiança
Observe dados armazenados usados em consultas.
Escaneie seu código para Command Injection
O Shoulder CLI encontra padrões vulneráveis em todo o seu código.