bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: maybe a bug in bash?


From: alex xmb ratchev
Subject: Re: maybe a bug in bash?
Date: Sat, 1 Jul 2023 14:45:16 +0200

On Fri, Jun 30, 2023, 23:21 Greg Wooledge <greg@wooledge.org> wrote:

> On Sat, Jul 01, 2023 at 05:47:33AM +0900, Dominique Martinet wrote:
> > hm, this has the password show up in ps on the box executing ssh;
> > depending on the context that can be bad.
>
> Fair enough.  We have no way to judge the OP's risk analysis, because
> they've kept almost everything secret so far.
>
> I place an extremely high value on avoiding solutions that embed
> passwords inside dynamically generated scripts.  Other people may
> have a different set of priorities.
>
> > It does simplify the content of the here-doc a bit because it doesn't
> > require escaping, but the password itself still needs one layer of
> > escaping (so in his example not ${password@Q} but ${initial_password@Q}
> > or $password), and we don't know enough to know if showing up in ps can
> > be important but passwords have generally been recommended to be passed
> > through stdin
>
> Sure, that would be preferred in most cases.  But the OP is specifically
> giving us a situation where stdin has been tied up sending an ad hoc
> shell script to be interpreted on the remote host.
>
> There are many other ways this problem could be approached.  If the script
> isn't really ad hoc, but is instead something that's going to be executed
> periodically, it could be stored permanently on the server.  Then you
> could use something like
>
>     printf '%s\n' "$password" | ssh user@host /opt/foo/bin/myscript
>
> where /opt/foo/bin/myscript reads the password from stdin.  You could
> send additional parameters as well, if needed, to prevent needing to
> send a slightly modified script every time.
>
> If you *really* want to embed a password inside a dynamically generated
> script, perhaps an approach like this would be less dangerous:
>
>
> start="IFS= read -r pass <<'EOF'"
>
> end='
> EOF
> The rest of
> the script
> goes here
> and you can'\''t easily
> use single quotes.
> '
>
> printf '%s\n%s\n%s' "$start" "$password" "$end" |
>     ssh user@host bash
>
>
> The definition of "end" could be loaded into a variable from a here
> document to avoid the '\'' issue, if you wish.  The extra blank line
> between the password and EOF doesn't matter, because read only reads
> the first line.
>
> I haven't tested this method, but it looks... less bad than some others.
>
> Oh!  And you have to make sure the password isn't EOF.  Or else use
> a heredoc sentinel that begins with a character that's not allowed
> in the password.  Or is a password that would be rejected by policy
> (which, to be fair, EOF would probably be rejected due to shortness).
> Or something like that.
>

declare -p
works well for transmitting bash vars around via ssh

ssh foo "$(declare -p vars)
more code"

>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]