4 ms·
It’s a design mistake because it adds exactly zero functionality. The only thing it adds is insecurity. If the feature didn’t exist, then it wouldn’t need to
by chubot 1y ago
It’s a design mistake because it adds exactly zero functionality.
The only thing it adds is insecurity.
If the feature didn’t exist, then it wouldn’t need to be documented, and the world would be better.
- blueflow 1y ago[flagged]
- chubot 1y agoI think you missed the original point, which is that joining argv is equivalent to sh -c "$1 $2 $3 $4 ..." This is a form of shell injection, just like sh -c "ls $dir" because there's interpolation WITHOUT escaping. That should be: dir=$(escape "$dir") sh -c "ls $dir" Or simply ls "$dir" It's not my preconception -- it's a security problem. It's similar to ShellShock -- you can argue it was documented behavior, but it's still a security problem.
- blueflow 1y agoThe interpolation is not the security problem, the problem is the user not quoting their data. It's similar to curl CWE-93[1], where it was documented and in-use behavior and consequently was rejected as a security problem. Example for ssh: ssh host ls "$(quote "$dir")" [1] https://hackerone.com/reports/3133379 https://hackerone.com/reports/3133379
- Filligree 1y agoAnd yet it keeps happening. An engineering field grows up when people stop assigning blame, and start searching for solutions.
- blueflow 1y agoI just posted one way how to do it correctly. And research (aka: consulting the manpage) is an essential part of engineering. Doing that would also solve the problem.
- immibis 1y agoNo, the problem is that even if you quote your data, ssh unquotes it, so you have to quote it twice.
- blueflow 1y ago> ssh unquotes it ssh does not unquote. Its the local shell, if you are invoking ssh via execv, this does not apply.
- immibis 1y agoSo instead of unquoting your data itself, ssh invokes another program to unquote it. That's a distinction without a difference.
- blueflow 1y agoNo, ssh is called by the local shell. ssh never gets to see the quoted value that you typed in your shell. This mechanism is unrelated to ssh, at all: $ printf "%s\n" "asdf" asdf You see the double quotes go missing. This happens as part of the shell turning the command string into argument vectors to pass to execv().
- immibis 1y agoWhen I run: ssh foo@bar "echo 'hello world'" ssh chooses to unquote the string: echo 'hello world' splitting it into two parts (echo, and hello world), and then running the program echo with the argument hello world. The fact it does this via a separate program is irrelevant.
- deleted 1y ago[deleted]
- deleted 1y ago[deleted]
- 1y ago