flawopen.com/command-injection/Csharp
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.
Bayangkan meminta asisten kantor untuk mencetak dokumen bernama 'laporan.pdf'. Injeksi perintah terjadi saat seseorang memberikan nama 'laporan.pdf; whoami', dan asisten menyerahkan seluruh catatan tersebut ke terminal loket, mencetak dokumen sekaligus membaca lencana administrator.
Web Application SecurityCWE-918.CWE-918Defense-in-DepthAplikasi menerima input nama host diagnostik atau nama file langsung dari permintaan HTTP.
Backend merangkai perintah shell menggunakan penggabungan string mentah alih-alih vektor argumen terisolasi.
Penyerang menyisipkan karakter meta shell seperti ';', '&&', '|', atau backticks (misal: '127.0.0.1; id') untuk keluar dari konteks perintah.
Shell sistem operasi menjalankan perintah yang disuntikkan dengan hak akses penuh proses web server.
// 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);
ProcessStartInfo.ArgumentList.Add() instead of Arguments.