On Sun, 8 Apr 2018, Stephen M. Webb wrote:
> On 2018-04-08 04:21 AM, Robert P. J. Day wrote:
> > and there's this near the top:
> >
> > KUBERNETES_RELEASE_URL="${KUBERNETES_RELEASE_URL:-https://dl.k8s.io}"
> >
> > ok, that will admittedly set that variable to a value if it does not
> > already have a value, but i've always done that this way:
> >
> > : ${VAR:=defaultvalue}
>
> What would happen if I ran the script with, say, VAR="&& rm -rf /" ?
> Consider that installer scripts are often meant to be run as root.
that does not appear to be a problem. behold:
$ unset FILE
$ grep root ${FILE:=/etc/passwd}
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
$ echo $FILE
/etc/passwd
$
however, trying to sneak a "&&" in there won't have the effect you're
after, because i'm pretty sure the shell tokenizes based on && and ||
*way* before it does variable expansion, so that by the time that
variable assignment is done, that && construct cannot *possibly* be
interpreted as conditional command execution:
$ FILE="/etc/passwd && echo hi there"
$ echo $FILE
/etc/passwd && echo hi there
$
and:
$ grep root ${FILE:=/etc/passwd}
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
grep: &&: No such file or directory
grep: echo: No such file or directory
grep: hi: No such file or directory
grep: there: No such file or directory
$
see? && and everything after it is simply treated as part of the
variable expansion.
i would have been shocked if that construct had that obvious a
security hole, given how often i've seen it in shell scripts.
rday