OS Command Injection
Description
The application allows the execution of functions or methods which execute commands in the system with non-sanitized parameters. This action would allow an attacker to inject malicious commands in the server to highly increase the attack vectors by escalating privileges, obtaining or modifying sensitive information stored in the machine.
Impact
Inject malicious commands that will be executed in the server.
Recommendation
- If possible, do not use functions that execute commands in the system with inputs controlled by the user.
- Validate all input parameters using regular expressions or whitelists before passing the parameters to critical functions.
Threat
Authenticated local attacker with access to the machine.
Expected Remediation Time
⌚ 120 minutes.
Score
Default score using CVSS 3.1. It may change depending on the context of the vulnerability.
Base
- Attack vector: L
- Attack complexity: L
- Privileges required: L
- User interaction: N
- Scope: U
- Confidentiality: L
- Integrity: L
- Availability: L
Temporal
- Exploit code madurity: P
- Remediation level: U
- Report confidence: C
Result
- Vector string: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L/E:P/RL:U/RC:C
- Score:
- Base: 5.3
- Temporal: 5.0
- Severity:
- Base: Medium
- Temporal: Medium
Code Examples
Compliant code
The application do not use system sensitive functions
def upload_file(filename)
try
filename_escaped = filename.replace(' ', '\ ')
command = "%s -q --no-warnings %s --exec \'mv {} %s\' &>/dev/null" % \
(filename_escaped)
runCommand(command)
except
return "Error"
Non compliant code
There are functionalities that execute a command without checking or treating user input
import os
def upload_file( filename)
try
command = userCommand + filename
os.system(command)
except
return "Error"