Don't set shell=True
with untrusted input
#26
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.
Previously
mssh
would blindly execute an SSH command, resulting inshell pipelines being executed on the host rather on the SSH target.
Consider the following command:
The second invocation of "whoami" runs on the host and therefore prints
my local username, rather than the username on the EC2 instance.
This is at odds with the normal SSH program, which would print "ubuntu"
for both, as any shell metacharacters are left to be interpreted by the
remote shell.
This issue was previously reported as #24, with a proposed fix in #25
that simply shell quotes the command. That solution seems suboptimal to
me, as it is generally a bad idea to pass user input to a shell.
This commit solves the issue another way, by keeping track of individual
arguments as we go. Rather than building up a command string like "ssh
[email protected] USER-FLAGS USER-COMMAND" and then passing that to the
local shell for interpretation, we instead build up a command array
like:
This command can be executed without invoking the shell, and so we can
be sure it will not execute any code on the host.
Fix #24.
Issue #, if available:
Description of changes:
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.