flawopen.com/command-injection/Csharp

● CWE-918 · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

सुरक्षा भेद्यता: Command Injection in C#

Learn how to fix Command Injection (CWE-78) in C# / .NET. Side-by-side vulnerable vs secure code examples for ProcessStartInfo.ArgumentList with UseShellExecute false.

💡 आसान भाषा में (ELI5)

कल्पना करें कि आप एक सहायक से 'report.pdf' नामक दस्तावेज़ प्रिंट करने के लिए कहते हैं। कमांड इंजेक्शन तब होता है जब कोई फ़ाइल नाम 'report.pdf; whoami' देता है, और सहायक पूरी पर्ची टर्मिनल क्लर्क को सौंप देता है, जिससे रिपोर्ट प्रिंट होने के साथ-साथ व्यवस्थापक का पहचान पत्र भी पढ़ लिया जाता है।

इस पेज के मुख्य शब्द

Web Application Security
सुरक्षा अवधारणा (Web Application Security): Core architecture component affected by CWE-918.
CWE-918
सुरक्षा अवधारणा (CWE-918): Standard Common Weakness Enumeration classification for command-injection-csharp.
Defense-in-Depth
सुरक्षा अवधारणा (Defense-in-Depth): Multi-layered engineering verification and runtime boundary isolation.

हमले का चरण-दर-चरण प्रवाह

Step 1

अविश्वसनीय पैरामीटर इनपुट

एप्लिकेशन सीधे HTTP अनुरोध से होस्टनाम, फ़ाइल नाम या इनपुट स्वीकार करता है।

Step 2

असुरक्षित शेल कमांड कॉन्सटेनेशन

बैकएंड सुरक्षित आर्ग्यूमेंट ऐरे के बजाय सीधे स्ट्रिंग जोड़कर शेल कमांड बनाता है।

Step 3

कमांड सेपरेटर इंजेक्शन

हमलावर ';', '&&', '|' जैसे शेल मेटाकैरेक्टर (उदा. '127.0.0.1; id') डालकर कमांड बाउंड्री से बाहर निकलता है।

Step 4

सबशेल निष्पादन और होस्ट नियंत्रण

ऑपरेटिंग सिस्टम शेल वेब प्रोसेस के पूर्ण अधिकारों के साथ दुर्भावनापूर्ण कमांड निष्पादित करता है।

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

✕ कमज़ोर कार्यान्वयन
// Concatenating into Arguments string
var psi = new ProcessStartInfo
{
    FileName = "cmd.exe",
    // Attacker input: "test.txt & net user /add evil Password123!"
    Arguments = $"/c type {userInput}",
    RedirectStandardOutput = true
};
Process.Start(psi);
✓ सुरक्षित और सुदृढ़ फ़िक्स
// Using ArgumentList (.NET Core / .NET 5+) without shell
var psi = new ProcessStartInfo
{
    FileName = "notepad.exe"
};
// Arguments added individually to ArgumentList are never parsed as shell commands
psi.ArgumentList.Add(userInput);
Process.Start(psi);

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

References