Skip to main content

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"

Requirements