Forum: Ruby Send password to subprocess without echoing it to terminal

562355fe203a4f2b946ea1301fb3056f?d=identicon&s=25 Dolan Murvihill (Guest)
on 2014-07-20 23:22
(Received via mailing list)
Hi everybody,

Sorry if this isn't the correct list; I'm new to Ruby and couldn't find
an
answer to this question in the other likely places.

I'm working on a tool that wraps the Arch Linux command line password
manager
"pwsafe". It keeps your master password in memory for ten minutes so
that you
don't have to re-type it so much. Recently I found a vulnerability and
have to
re-write the function that invokes the main pwsafe program to get the
application password. It looks like this now:

def fetch_app_password
  master_password = driver.get # fetch the password from the user
  # TODO stop printing the user's master password in cleartext
  open( "| #{PWSAFE} -q -E -p #{stringified_args}", 'r+' ) do
|pwsafe_pipe|
    pwsafe_pipe.write(master_password + "\n")
    app_password = pwsafe_pipe.readline()
    if app_password == "Passphrase is incorrect"
      system 'killall pwsafe'
      raise 'Passphrase is incorrect'
    end
    return app_password
  end
  raise 'an error occurred'
end

This code invokes pwsafe and correctly returns the application password
the
user asked for; however, the entire exchange between the password safe
and the
ruby program occurs in the user's terminal - in cleartext. This is
unacceptable
because shoulder surfers are definitely part of my threat model.

I've tried a few things, including running `setty -echo` just before
opening
the pipe; none of them have prevented that master_password variable from
ending
up on the terminal. Can anyone suggest a good way to silence the master
password, or (even better) the entire conversation?

Thanks,
Dolan
Cb6bbc826cd7d9238a2fae344958f7ec?d=identicon&s=25 Sándor Szücs (Guest)
on 2014-07-21 08:47
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Hi!

just use the awesome highline gem:


require 'rubygems'
require 'highline/import'

def get_password(prompt="Enter Password")
   ask(prompt) {|q| q.echo = false}
end

thePassword = get_password()

regards, sandor
- --

On 20/07/14 23:22, Dolan Murvihill wrote:
> password. It looks like this now:
> This code invokes pwsafe and correctly returns the application
>
> Thanks, Dolan
>


- --
Viele Gr??e Sandor
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCgAGBQJTzLdvAAoJEIiuFRwovs5r+OIP/RRRTZcNdPamFcMwrZqj4Z7E
eWMJr7yppKy4eAffPfWH5/STAD/evYzQ20NiJyYTRCeieCYaTIA6P66TLqUZJEGx
sI/0mi31JBvGZPdT5W3TOv1YFXJysJ/EDIn1I6EmIl5oWzgbB4VDanW14YrFcq52
5YUBxTyJT0IxBI3doZWGRICRKrkiQS8Mep0fxYnjqfgbMHKD4u8HELJrBlmaJEih
O3rsJoW1XG7qXc35nO+cDmBjT3ru2R6LabEgWZp1aP+/NM1IzW482Xvb6SrJNteC
PXsoUFIhRbklYsJ+aGA1kdbkNXsjTyDdugFNNgqQR2OX8Uyl053fKD231iXYrsGz
QM1K9eU1kkMawwTN8ADdw4d7Sl/h9TFeXFSgEZKKFmjmOXuDdArXzVZHr3tH24gy
x6fwfXI80uLDZeec4S0xjXhlaHAOjy3a/97k45qc2/gQHOenapUWq3H6RhGfeKqq
YRvba3LiGPkcdeAztPZc54sJwmA3dlTwcfzuxFQTXJHdhH/WWRdDrYT38TQ/dnvW
5nwe9KPAKOAoLEhRDZ9+grV2eq3lUjcw2GvYAPIPgdnOXi1UuzoTvlOgpJRIK2mq
tr70zeRsoOnlrg/f+e77swk2ha3IFNVeqDkoT5d7mUX6KLh+hN+RAXBSfKGH+cYo
cn9419Z7x320iEXCGsRP
=0hVC
-----END PGP SIGNATURE-----
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.