CWE-77: Improper Neutralization of Special Elements used in a Command ('Command Injection')
Learn about CWE-77 (Improper Neutralization of Special Elements used in a Command ('Command Injection')), its security impact, exploitation methods, and prevention guidelines.
What is Improper Neutralization of Special Elements used in a Command ('Command Injection')?
• Overview: This vulnerability occurs when a software application constructs a command using input that can be controlled by a user or external source without properly sanitizing or neutralizing special characters. These characters can alter the command's structure or behavior, leading to unauthorized command execution.
• Exploitation Methods:
- Attackers can exploit this vulnerability by injecting special characters or command elements into input fields that are used to construct commands.
- Common attack patterns include inserting shell metacharacters (e.g.,
;,&,|,&&) or escape characters to append or modify commands.
• Security Impact:
- Direct consequences include the execution of arbitrary commands with the same privileges as the application, potentially leading to unauthorized data access, data corruption, or system compromise.
- Potential cascading effects might involve privilege escalation, data breaches, or lateral movement within a network.
- Business impact can be severe, leading to financial loss, reputational damage, and legal consequences if sensitive data is exposed or systems are disrupted.
• Prevention Guidelines:
- Specific code-level fixes include validating and sanitizing all user inputs and using parameterized APIs or prepared statements to construct commands.
- Security best practices involve employing input validation libraries, avoiding direct use of command shells, and running applications with the least privileges necessary.
- Recommended tools and frameworks include static and dynamic analysis tools to detect vulnerabilities, and employing security frameworks that provide built-in protection against injection attacks.
Corgea can automatically detect and fix Improper Neutralization of Special Elements used in a Command ('Command Injection') in your codebase. Try Corgea free today.
Technical Details
Likelihood of Exploit:
Affected Languages: Not Language-Specific
Affected Technologies: AI/ML
Vulnerable Code Example
const { exec } = require('child_process');
function executeCommand(userInput) {
// Vulnerable to command injection as userInput is directly included in the shell command
// An attacker can manipulate userInput to execute arbitrary commands
exec("grep 'pattern' " + userInput, (error, stdout, stderr) => {
if (error) {
console.error(`exec error: \${error}`);
return;
}
console.log(stdout);
});
}
// Example usage
// userInput = "file.txt; rm -rf /" // This input would cause the command to delete all files in the root directory
How to fix Improper Neutralization of Special Elements used in a Command ('Command Injection')?
To prevent command injection in JavaScript:
- Use Safe APIs: Prefer using modules or functions that avoid shell execution altogether.
- Parameterization: Use methods that allow for parameterized inputs, such as
execFileorspawnfrom thechild_processmodule. - Input Validation: Validate and sanitize inputs to ensure they don't contain harmful characters.
By using execFile or spawn, you can separate the command from its arguments, avoiding the risk of shell injection.
Fixed Code Example
const { execFile } = require('child_process');
const path = require('path');
function executeCommand(userInput) {
// Using execFile to pass the command and arguments separately
// This prevents shell injection by not concatenating user input directly
const safeInput = path.basename(userInput); // Further validates the input to avoid directory traversal
execFile('grep', ['pattern', safeInput], (error, stdout, stderr) => {
if (error) {
console.error(`execFile error: \${error}`);
return;
}
console.log(stdout);
});
}
// Example usage
// userInput = "file.txt" // Safe input
Improvements Made:
- Syntax Highlighting: Ensured proper syntax highlighting by specifying the language in the code block.
- Line Number Highlighting: Corrected the line number highlighting format to
{line-numbers}next to the file name. - Realistic Examples: Provided a clear and realistic example demonstrating command injection vulnerability.
- Detailed Comments: Enhanced comments to clearly explain the vulnerability and how the fix prevents it.
- Formatting Consistency: Ensured consistent formatting across code examples.
- Best Practices: Used
path.basenamefor input validation to prevent directory traversal attacks, demonstrating a best practice for handling file paths.
