OneLogin suffers breach–customer data said to be exposed, decrypted
arstechnica.com
arstechnica.com
Right now, I have everything in Keepass, and no good way to synchronize that between devices. Merging key repos is a royal pain, but mainly, I don't like the idea of trusting everything to an organization that I can't hold accountable. Running my own service on a generic tiny EC2 cluster feels like an improvement, although I would still worry a little about the virtual neighbors.
Lastpass is almost necessary for me to keep all my passwords moderately secure and still usable. But I really do not love trusting all of my info to a 3rd party.
You don't need to. You need to trust Lastpass's design.
A Lastpass database is an AES-256 encrypted blob, encrypted using a "slow" hash of your master password (PBKDF2, rounds are configurable). Lastpass don't know your password. When they authenticate you they test to see if your database is decryptable with the password you entered (after it is hashed). If you set 2F then they won't even allow attempts until 2F is satisfied (Google Authenticator is free).
Lastpass's biggest weakness is also applicable to this theoretical OpenSource alternative: Javascript. Javascript is delivered from Lastpass (for the browser extension) and after you decrypt your password database, that JS has full access to it. If a "bad guy" is able to inject evil JS between you and them, then they could trivially steal already decrypted passwords.
As I said, this weakness has nothing to do with Lastpass, it would equally apply to all password managers which integrate into the browser with an extension. In effect you've exchanged convenience for security. And you can already read the Lastpass browser extension's source code, being more open source doesn't make you immune from this issue.
So you can choose to trust Lastpass, or not, but the design is sound. Slapping the words "open source" onto something won't mitigate any of LastPass's inherent design issues, and you'd still want to follow a similar design since it is a good compromise between security and convenience. Coming up with a superior design that doesn't sacrifice convenience would be awesome, but it is a hard problem...
I would host my own in a google app engine or heroku and avoid a 3rd party who is more attractive to hackers due to the number of accounts they host and potential gain to criminals.
Any self hosting would need to be fully connected with automated update notifications from the "crowd" of contributors and reviewers.
I guess, it becomes a managed service at that point (since as you point out it should have reliable and secure production characteristics which does require a high level of competency). I am imagining a cloud of one for my passwords (a stateless, secure container, with disabled user access to the OS and which connects to an encrypted simple file store to keep my small sized but precious passwords).
I was just pointing out that Open Source in and of itself isn't a security protection. If you follow the same design you'll have the same design weaknesses, Open Source or closed. The "more eyes" thing, may be true, but I'd argue popularity is more important than license in determining the number of "eyes."
I'd also caution you in assuming an exploit would be against the server side. The server holds a bunch of really hard to decrypt blobs. The client is the real crown jewel. The client browser has all of the usernames/passwords decrypted, so if you were either able to deliver an "evil" extension update, or find an exploit in the existing extension, you could extricate those credentials.
That's the real rub: You turn off extension updates and you're more secure against "evil" extension updates; but you're now more vulnerable to situations where a bug is discovered in the legitimate extension and the organisation pushes a real update to patch that. Auto-updaters in particular are both a huge benefit and a huge security hole.
Is there a way to close the entry point for evil JS? For example, can you tell the extension to stop touching the DOM and injecting any code. That way the username/password can be only interacted with via the browser's chrome button?
I believe the Chrome Web Store does check an extension's signing certificate before updates are published, so security wise that's a good thing, but realistically it remains the weakest part of Lastpass's overall design.
Also, the extension queries the server to know the number of rounds to use while deriving the master key from the password before it'll deliver the encrypted blob to the client, so in theory if they really wanted to break your password they could tell the extension that it's encrypted with a single round of the hash function (IIRC the minimum is actually two) which would make bruteforcing a whole lot easier, although still very much non-trivial.
That's incorrect. When you change the round count your master password is re-computed, and database is re-encrypted with the new hash. The server needs to return the round count so the client can generate the correct master password hash, if you ignore that and simply calculate it for e.g. 2 rounds, the master password hash won't match and therefore the AES-256 database won't decrypt.
The way Lastpass works is straightforward... PBKDF2(password, rounds) -> AES256(hash, blob). If the rounds change then the resulting hash changes and therefore the database won't decrypt. Your second paragraph is quite confusing, in that I cannot make heads or tails of why you think you can use 2 rounds when e.g. 10,000 are specified previously. A correct round count is just as vital as a correct password in generating the correct hash.
Lastpass won't serve you the encrypted blob if you don't authenticate with their servers. To do this it computes a different key (using a different derivation function, but using the same "master" password as the encryption key) that it uses to log into the lastpass server.
This key cannot be used to decrypt the blob because of the different derivation function, but the client asks the server how many rounds of the kdf to use for a given user by posting its email to https://lastpass.com/iterations.php . As you can see it defaults to 5000, but the client will gladly accept any value.
Therefore the server can tell the client to send a key derived from only one iteration, it which case this code is run: https://github.com/lastpass/lastpass-cli/blob/623b344e898958...
In other words if an hostile party gets access to the lastpass server they can instruct your client to send your master password protected by two rounds of sha256. If you have a strong password (as you should) it's not an issue, but clearly you can't count on thousands of rounds of the KDF as you might think.
At which point they have full access to your database, don't they?
> And you can already read the Lastpass browser extension's source code
Of course, it's a bit more difficult, I'm betting it's minified.
High profile open source encourages people to read the source code, if nothing else. It's possible someone would've noticed that nasty cross-domain autofill bug from a while back (https://labs.detectify.com/2016/07/27/how-i-made-lastpass-gi...). It's also possible that the community would hold the codebase to a higher quality standard, and a lot of issues would go away (only a rumor, but I've heard that parts of the LastPass codebase are a mess).
Perhaps we could eliminate both problems, by handling authentication outside of the browser, and then injecting an auth cookie into a new browser tab?
1. `curl site.com/login` to get the login form as HTML
2. Extract the form submission URL and the name of the user/pass fields
3. Pipe a key from Vault, to a URL encoded HTTPS POST request (curl again)
4. Receive the resulting session cookie and the login-success URL from the login response
5. Insert or replace this cookie into Firefox's jar
6. Open a new browser tab to the login-success URL
This way, the browser never sees the password, and the clipboard never holds it. The session cookie is still just as vulnerable as ever, but is of a lower value, assuming that it alone does not grant the ability to change the user's password or PW recovery email address. The entire sequence could be scripted into an `authenticate my-user@site.com` command, which would depend on a connected Vault client (or some other backend scheme). I have no idea if this would work on mobile operating systems, it might not be possible to write to the FF cookie jar from another app.Even if it's open source, I'm in no position to effectively evaluate their crypto/etc. But I can do some basic reasoning about the possible attack surfaces.
With 1Password I hold all my data, and the software that I use to view it runs completely independently of anything else. Besides a takeover of my local machine or breaking the encryption, nobody gets my data.
With something like LastPass, they hold all my data. The software that I use to view it runs in my browser. The software handling all my passwords is running in the same program that I use to execute untrusted code from the internet thousands of times a day. This has bitten them in the ass a few times.
I'd love an open source password manager solution given the turn 1Password has taken towards being a "cloud service", but for the love of god can it please be useful without tying it to my web browser.
Something like a portable container that you can host anywhere and keeps syncing easy. What kinds of other features would you want?
Since pass supports versioning the passwords with git it would also be possible to use that, just push/pull the repository to keep it in sync. It would also give you access to the password even while offline, but I actually prefer the added security of not copying the passwords over, even encrypted.
Obviously if you want to access your passwords from, say, a Windows machine or a smartphone it won't quite do the trick.
You can also provide several PGP encryption keys if you want to share your passwords across several people. I believe pass lets you specify the keys on a per-directory basis, although I never actually tried to do that myself.
Also, how do they ensure that their systems are no longer compromised?
- an engineer stumbled upon clear evidence of a rootkit, like a leftover dotfile or shell history entries
- the exfiltrated data got used and someone noticed
(Different story for active intrusions, where the intruder is detected when they first breach a system. At least anecdotally, the passive after-the-fact detection above seems more common, though.)
I assume many startups use AWS or GCE (with auto scaling) and thus don't necessarily setup/SSH into each and every machine/VM. Wouldn't this make rootkit detection more difficult?
edit: how would an active intrusion detection take place?
[1] - https://en.wikipedia.org/wiki/Rkhunter
[2] - https://en.wikipedia.org/wiki/Chkrootkit
[3] - https://en.wikipedia.org/wiki/Host-based_intrusion_detection...
They're good for checking old backups to see if you were hacked in the 90s, not so useful for today.
It takes a good amount of setup because there are a lot of files that routinely change that you will want to ignore.
https://blog.lastpass.com/2015/06/lastpass-security-notice.h...
Some pass managers are better than others and on balance are better than the solutions non-technical (and many technical) would otherwise use. This is highly dependent on your threat model, degree of technical skill, actual data risk, and behavior.
Imagine that you're a company not necessarily known for security prowess. Now imagine that you want to be able to demonstrate to users / customers / investors that you take security seriously and work with reputable vendors. You could list off the vendors you use, but then they're just taking your word for it. Wouldn't it be better if the vendor listed you?
Alternately, perhaps there are common investors or board members exerting influence.
As a side note... I imagine well probably see some of those customers coming down soon.
But usually these lists of "customers" is just someone trawling the user database for @foocorp.com and anyone signed up from there makes the company a "customer".
Or the even simpler answer, which is that they didn't ask.
We put logo privileges in our standard contract just to see what would happen, and we got it a bunch.