The C Standard system()
function executes a specified command by invoking an implementation-defined command processor, such as a UNIX shell or CMD.EXE
in Microsoft Windows. The POSIX popen()
function also invokes and Windows _popen()
functions also invoke a command processor but creates create a pipe between the calling program and the executed command, returning a pointer to a stream that can be used to either read from or write to the pipe [IEEE Std 1003.1:2013].
Use of the system() function function can result in exploitable vulnerabilities, in the worst case allowing execution of arbitrary system commands. Situations in which calls to system() have high risk include the following:
- When passing an unsanitized or improperly sanitized command string originating from a tainted source
- If a command is specified without a path name and the command processor path name resolution mechanism is accessible to an attacker
- If a relative path to an executable is specified and control over the current working directory is accessible to an attacker
- If the specified executable program can be spoofed by an attacker
Do not invoke a command processor via system()
or equivalent functions.
Noncompliant Code Example
...