Passwords in plain text
plaintextoffenders.com
plaintextoffenders.com
You're welcome to ask me questions, though we've covered most on our about page (http://plaintextoffenders.com/about). The one we haven't is usually "Is there an API/better search/new site coming?" to which the answer is that we're both doing this in our spare time and though we really want to create something better to host this very important content, we can't spare the time. If you've got time and want to volunteer to create this new site, please let me know. :)
One of Such Volunteers (wow!) made a Chrome Extension that scrapes addresses from PTO and shows you a red banner if you're on a site that's featured PTO!
https://chrome.google.com/webstore/detail/plain-text-offende...
- HTTPS, HSTS support
- Password hashing (and type of hashing if available)
- Third party auth support (OpenID/Persona)
- 2FA
- ...
Is this something you would like to go towards? I would love to help (depending on the backend of the site, I may offer technical help too)
Have you thought about reporting on other aspects of password security, such as misguided length limits or character requirements?
Edit: sorry, I guess you've just about covered my first point.
- Submit offenders - Spread the word (we're also on Facebook and Twitter (@plntxtoffenders) - Contact offending sites and let them know they're on the list
I am not sure that's appropriate. I know systems that send you the mail with your password after registration/password change and then save the passwords to database hashed.
You cannot deduce that they save passwords in plaintext because they send you the password after registration/password reset.
TL;DR - it's still a security issue (albeit smaller), we've included it in our mandate, please don't do it.
Only if you're dumb enough to not delete any password emails.
Granted, preferable any site sending you your password in an email should either send a reset link or "your password is 'red*'"
You delete it from your MUA, but how can you be sure that it wasn't stored in any of the intermediate servers?
Doesn't mean it is a good idea though.
Correct me if I'm wrong but wouldn't this mean that only the email stored on the recipient's email provider's server was then unencrypted.
email = input.email
plainPassword = input.password
hashed = hash(plainPassword)
saveToDb(email, hashed)
sendGreetingEmail(email, plainPassword)
Emailing a plain text password during registration is not the same as storing it forever in a database.But then you can start listing non-HTTPS sites, too. You disclose your password in plaintext to many servers every time you login on those.
"But what if someone hacks your email, they know all your passwords!"
What if someone hacks your 1password account? It's the same exact scenario. Having a single point of failure that one can be extra vigilant with guarding is much better than the alternative of having a hundred unique passwords one must remember.
OR, we should just accept that there's a whole magnitude of difference between sending a password by email on a single occasion, and storing it in plain-text, and focus on the latter problem first.
Who does that? That's even worse than storing it in plain text on the backend.
[1] http://www.assosfactoryoutlet.com/customer/account/create/
HN does this too, by the way. If you request a new password for an account, it's being sent in plaintext. No problem here, what comes to storing it.
At least it's better than asking for your mother's maiden name.
HN passwords are not high security. If we lose an HN account, not only can it be easily restored by an admin, it's really not a huge loss - start again. There doesn't need to be extreme practices.
Oh, you use the same password across sites? (which is the source of 99% of password security concerns). That is crazy, and you shouldn't do that. That's on you. (You being the conceptual person up in arms)
Actually it changes a lot. Password reset links are one time only, and they get sent before you change your password. Mailing your password in plaintext after you've just changed it means it's good even if someone gets a hold of it months or years later. That's significantly worse.
Say a user forgot their password and they click some link to reset their password:
Generate the password text, then create an email with that password, send the email, and then store the password, connected to the User object, in the default Django way, which is SHA'd.
You should create a token, and mark the account with it, send the token to the user, and if the user sends the token back to you (at the URL, normally), you let him replace his password. The password itself is never communicated back to the user.
Otherwise the email could be found later and used to gain access.
If you are changing the password/registering, the password is in plaintext in the memory on the server anyway; it just has to be. So they can just mail it to you.
Emailed Passwords are a failure from a tech point of view, but they allow users to create more complex passwords without punishing them when they forget that password.
As it is, I have situations now when the complexity requirements of a password combined with the fact that I need to sign in to a separate mobile App and I'm given no way of seeing what the password was when I created it that I just throw my metaphorical hands in the air, and reset it to generic password "Green!12Letmein." on yet another account.
This is wrong of me. I know it's wrong, I'm aware of password remembering services and I'm technical but I still do it.
If I'm doing this, and you're doing this, then most of the world is doing it. By discounting passwords sent through email, then we may be making overall security worse instead of better.
Additionally, allowing passwords to be e-mailed is even worse than this, because there's a good chance the password is not encrypted in transit, which means that it can be intercepted on the way to your mailbox. In that case, the attacker doesn't even need to compromise the database to get your password, no matter how complex it is. Storing passwords in plaintext removes security even if it makes people use less complicated passwords.
At least one website on the current front page is there because it sent a temporary password in plain text. I assume this happened because the user forgot his password. This says nothing about how they store passwords and after all how else would you handle a password reset? Send a password reset link? That's the same thing.
Sending passwords in plaintext back to the user after he has set/changed his password is clearly a security risk but when it comes to temporary passwords or password resets how else would that info be sent?
This is much better than just sending a new password because:
* It can have a TTL.
* The user has to change it, they can't just keep using the plaintext one forever.
* You can perform some kind of verification, was the request for a new password sent from the same country/IP/device as the person generating a new password.
The website I noticed on the front page (sunsuper.com.au) was doing precisely this (although their TTL was 90 days which is indeed far too long and it's impossible to tell whether they forced a password reset or simply recommended a password change).
Ideally, we should have a self-owned OAuth service implemented by browsers or operating systems. And the APIs of this service should be standardized. Also, the storage should be locally available with remote sync optionally available for backup and cross-device syncing.
The plan is to use Persona for ones FxA:
> One we get the basics down and enable single sign-on for relying Mozilla Services with your Firefox Account, we hope integrate Firefox Accounts with Persona on the Web and Firefox user agents to make logging in everywhere as painless as it should be.
I would disagree. It's common knowledge (backed by many A/B tests) that shorter sign-up forms see less traffic drop. So, if OAuth can replace a number of things (name, email, password, email verification, and so on) by a couple of clicks, I as a website owner will be very happy. Also, when sending interesting emails to inactive users, I see quite a few come back but drop again after a few unsuccessful login attempts. Again, OAuth will help.
The reasons website owners (at least I) don't use facebook or google's OAuth are following:
1. They brand their service too much. The button itself says Login with Facebook/Google. I don't want my users' mind share to be consumed by them. Everything from login/logout to account management happens on pages in the context of their brand. Browser/OS providing this service is much less problematic, and even they should have pluggable services for replacing their default implementations, just like the ability to change the default browser on any OS.
2. They own the data and not the user. I have faced an incident in the past where one of my games was blocked by facebook because they thought it was gambling. I lost 95% of my users in one stroke. It took me two weeks haggling with FB to get my game whitelisted again. Still, the damage was done and we could never fully recover. The data must be owned by the end user and stored in open format so that user can take it freely from one place to another, just like I can take my contacts in vCard format to wherever I like.
3. Any such solution (especially when so heavily branded) will naturally turn other big players hostile. for example, facebook and google will have their own separate implementations instead of having a common one. This will almost ensure that standardization will hot take place. One button each for signup with Facebok/Google/LinkedIn/OpenID/... doesn't make for great UX and it's unnecessary overhead for website owners.
Mozilla persona is a good initiative. Hope they prefer standardization over trying to use it to promote their own browser.
Well, there's this:
https://groups.google.com/forum/#!topic/mozilla.dev.identity...
But then, how would you log into e.g. gmail from a cybercoffee in a foreign country? (Assuming you dare do so in spite of the risk of key loggers.)
This still applies with any other authentication schemes...
Anyone from Mozilla, EcmaScript, GnuPG and thelike here? Don't miss your monthly "password reminder" mail...
P.S. Just save ONLY a salted hash. Hash functions are designed to be one-way, so no one but you can re-store your password. EVER.
Name and shame, that's the minimum to make them change.
My concern is that this is a great source of websites with poor security for potential hackers to exploit.
Usenet provider
Forgot password asks you to type a password, in which it instantly emails back to you in plaintext.
Doesn't mean it stores it in plaintext.
AWS cannot view or provide you your private key at any time - once you click 'ok' on that javascript window, that private key is gone for good.
So to directly address your concern, you can't download the keypair at any point in time, it's just a one time thing. To me that seems much more secure than emailing out a root password and enabling password authentication by default.
We'd like to refrain from asking people to hack into sites just to figure out their hashing scheme :)
You could also always ask too. I was reading through the forums of another site and stumbled upon a thread of someone asking HTTPS support for the site. The staff was pretty reluctant about the idea, which made me wonder about other security concerns. Looking around a bit, I noticed that the site cookies contain a "pass" value that looks very much like an MD5 hash. I got someone who used to be staff to ask the current staff how passwords are hashed, and the answer was "salted MD5".
Also, why is my initial post getting downvoted? Generic hashing algorithms are built for speed, which is bad for passwords. Key derivation functions exist for a reason. Hell, just a while back there was a user database leak from a site called MangaTraders, and they used unsalted MD5 for password hashing. It didn't take long before the vast majority of passwords had been cracked.
How so?
http://www.troyhunt.com/2012/06/our-password-hashing-has-no-...
Then note that it was posted two years ago. GPUs surely haven't gotten any slower since then.
At minimum, you need to add unique salt to each password. It forces the attacker to run dictionary on each account separately. It is also recommended to use different slower hash function or iterate MD5/SHA1 thousands times, so he will be much slower.
good: http://en.wikipedia.org/wiki/PBKDF2
gooder: http://en.wikipedia.org/wiki/Scrypt
Maybe avoid using SHA256 with them because of Bitcoin ASICs. If your passwords get leaked in hashed form, even with these, you'll still want to tell your users and advise/force them to change their passwords. Forcing makes more sense if you have 2FA to something not likely to be accessible with their previous password (SMS maybe?)