Fixed shell command built from environment values #165
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
browserstack-local-nodejs/lib/Local.js
Line 40 in 440aa80
browserstack-local-nodejs/lib/Local.js
Lines 89 to 91 in 440aa80
Dynamically constructing a shell command with values from the local environment, such as file paths, may inadvertently change the meaning of the shell command. Such changes can occur when an environment value contains characters that the shell interprets in a special way, for instance quotes and spaces. This can result in the shell command misbehaving, or even allowing a malicious user to execute arbitrary commands on the system.
fix this problem, we should avoid constructing shell commands by concatenating potentially unsafe values and passing them to
childProcess.exec
. Instead, we should use Node's built-in file system APIs to perform the intended operation. In this case, the command'echo "" > logfile'
is intended to truncate or create an empty log file. The equivalent and safer approach is to usefs.writeFileSync(logfile, '')
(for synchronous code) orfs.writeFile(logfile, '', callback)
(for asynchronous code). This avoids invoking a shell entirely and is cross-platform.Specifically, in
lib/Local.js
, replace both instances ofchildProcess.exec('echo "" > ' + that.logfile);
(in bothstartSync
andstart
) with the appropriatefs.writeFileSync
orfs.writeFile
calls. No new imports are needed, asfs
is already imported.