Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cloudify CLI stores user password in plaintext #910

Open
esmcelroy opened this issue Jan 24, 2019 · 6 comments
Open

Cloudify CLI stores user password in plaintext #910

esmcelroy opened this issue Jan 24, 2019 · 6 comments

Comments

@esmcelroy
Copy link

esmcelroy commented Jan 24, 2019

When a user's profile is saved, it dumps the yaml profile settings into plaintext;

def save(self, destination=None):
if not self.profile_name:
raise CloudifyCliError('No profile name or Manager IP set')
workdir = destination or self.workdir
# Create a new file
if not os.path.exists(workdir):
os.makedirs(workdir)
target_file_path = os.path.join(
workdir,
constants.CLOUDIFY_PROFILE_CONTEXT_FILE_NAME)
with open(target_file_path, 'w') as f:
f.write(yaml.dump(self))

This presents a security risk on shared systems, with multiple users.

@isaac-s
Copy link
Contributor

isaac-s commented Jan 26, 2019

@esmcelroy thank you. I have escalated internally.

@esmcelroy
Copy link
Author

As discussed with @isaac-s elsewhere, this isn't necessarily a bad behaviour, but it does not provide the flexibility to circumvent this on a shared system.
Potential workarounds would include:

  • allow reading passwords from some environment variable
  • allow user-input of passwords on execution

@esmcelroy
Copy link
Author

This means, specifically, allowing profile creation without passwords, and implementing a read of an environment variable for user passwords (or user-inputted passwords)

@geokala
Copy link
Contributor

geokala commented May 21, 2019

@esmcelroy Worth noting that the env var approach is not a good workaround if we're positing that the multiple users have the ability to read each others home directories, etc, as that implies they can probably also read /proc//environ. The prompting for a password could be good though.

@esmcelroy
Copy link
Author

Another potential implementation could see the user prompted for a password on first run - at which point, the CLI requests a token, which it can cache with a timeout timestamp, creating a session that will remain valid for the length of the token. On token expiry, it requests the user password again

@geokala
Copy link
Contributor

geokala commented Sep 27, 2019

@esmcelroy Perhaps better for that approach would be something similar to the old gmail app-specific-passwords- probably in the form of tokens, but then that would allow issuing something that, e.g. a CLI on a shared machine could use which could later be revoked/disabled.

I'm not sure what the internal visibility on this issue is at the moment, but I'll pass it on for attention.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants