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.
इस भेद्यता को कैसे ठीक करें
3 Shoulder डिटेक्शन नियमों पर आधारित OS Command Injection के लिए रोकथाम रणनीतियाँ।
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'
अपने कोड में भेद्यताएँ खोजें
Command Injection पैटर्न के लिए अपने कोडबेस को स्कैन करने के लिए Shoulder का उपयोग करें। 3 नियम.
# Scan with Shoulder CLI npx @shoulderdev/cli trust --cwe=78 # Or scan entire project npx @shoulderdev/cli trust .
पहचान नियम (3)
कोड समीक्षा में किन बातों पर ध्यान दें
ये पैटर्न संभावित Command Injection भेद्यताओं का संकेत देते हैं। कोड समीक्षा और सुरक्षा ऑडिट के दौरान इन्हें देखें।
मैनुअल समीक्षा पैटर्न
मैन्युअल रूप से कोड की समीक्षा करते समय, इन खतरनाक पैटर्न को खोजें।
query = + स्ट्रिंग कॉन्कैटनेशनexecute(f"... or execute("..." +raw_query, rawQuery, executeRaw${ or #{ SQL स्ट्रिंग्स के अंदरसुरक्षा विशेषज्ञ कैसे सोचते हैं
इस भेद्यता की समीक्षा करते समय सुरक्षा पेशेवर जिस मानसिक मॉडल का उपयोग करते हैं।
एंट्री पॉइंट्स मैप करें
URL पैरामीटर, POST बॉडी, हेडर, कुकीज़, फ़ाइल अपलोड।
डेटा प्रवाह को ट्रेस करें
इनपुट को कोड के माध्यम से ट्रैक करें। क्या इसे सैनिटाइज़ किया जाता है?
सिंक्स की पहचान करें
Where queries are executed: execute(), query()
विश्वास सीमाओं की जाँच करें
क्वेरीज़ में उपयोग किए गए संग्रहीत डेटा पर ध्यान दें।
अपने कोडबेस को इसके लिए स्कैन करें: Command Injection
Shoulder CLI आपके पूरे कोडबेस में भेद्य पैटर्न खोजता है।