Plain-Text Offenders Hits 1000
plaintextoffenders.com
plaintextoffenders.com
If a web site can sent you a "I forgot my password" reminder email which includes your plaintext password then the site operator is storing the password in a plaintext-equivalent format. If the password is stored as a plaintext-equivalent then attackers can steal your plaintext password when they "own" the site.
To address the encryption pedantry: If a site is using encryption to store the password but the key to decrypt the password is available in the site's servers then, arguably, the encryption just amounts to an encoding. Symmetric encryption requires that the key be kept secret. Keeping the key on the servers means that it's not secret and means that it's not really encryption.
Edit:
I see that the discussion is heading this way so I'll head it off at the pass: I would argue that there is no reason that any site operator ever needs the plaintext of a user's password to be stored persistently for any reason. There is no valid reason passwords should be stored in a reversible manner.
(Somebody is going to bring up storing credit card numbers with symmetric encryption, too. That's a broken system and, arguably, needs to be replaced with something based on asymmetric encryption instead of "secret numbers" that we have to transmit between quasi-trusted parties.)
Devil's advocate: why is it pedantry to ask for security alarms to be precise? We ask for e.g. the TSA to be precise about what it needs, should not computer security professionals be held to the same bar? Making bogus claims about a system's vulnerability (be it shoes at airports or passwords) damages the credibility of the next security alarm.
Note: I'm not defending the practice of sending passwords in the clear. But I don't think it's too much to ask for security professionals to make precise claims, when doing so is a 5-second op.
I agree that the Plain-Text Offenders site should state this plainly.
I didn't look for it under "About" because I'm used to that being for personal details about the project's people rather than intro or summary info.
How do you determine by external observation that a site's password handling is sufficiently bad to merit the Plain Text Offender title?
Not saying it's a good practice to send the password by email but it seems the website stretches the truth a bit.
You mean to say "the sites do not store the text in non-reversible format."
What passwords need is a secure password hashing method. It's a very special purpose sort of thing, different from ordinary hashing, encrypting, and key derivation. It's unfortunate that it doesn't have a proper name.
Neither "PBKDF2", B-"crypt", nor S-"crypt" are helping much with this terminology.
This is a vastly different claim than "these websites store passwords as plaintext." There are a lot of differences in assumptions and attack vectors, etc.
It usually pays for security alarms to be precise, and this site almost goes out of its way to be imprecise (and likely inaccurate). In this case, your verbiage would work great for the site in question. Why not say these are sites that don't use "secure password hashing methods" instead of making bogus unverifiable claims?
These are sites which are sending emails with passwords in the clear. They are also storing your password near the decryption key (if any), so a single security breach can compromise many passwords. That is to say: even if the rest of their infrastructure is NSA-level paranoid, whichever server(s) are sending out these password reminder emails are prime targets.
Please do not defend this behavior.
But please do not defend sloppy claims of security vulnerabilities.
> More reading on why even _just sending the password_ via email without storing it in plain text is bad.
Which has a hyperlink to
(http://plaintextoffenders.com/post/7006690494/whats-so-wrong...)
> What's so wrong about sending a new password in plaintext? It doesn't mean that the password is saved in plaintext...
Granted, it sends a randomly generated password. And granted: it's probably meant for one-time use only (I presume). However, logging in with the new password does not automatically prompt (or even force) to change it to something of my own choosing. Result: hit 'remember password' in Chrome and forget about it. Now my active HN password is in my inbox, in plain text.
The system provides functionality for (password reset via email|sending plaintext password reminder emails|other password-based credential recovery|other delegation or retention of password-based credentials) which strongly suggests that an attacker who succeeded in (cross site scripting (XSS)|cross site request forgery (XSRF)|obtaining production server access|obtaining production database access|obtaining back-up meda|observeing network traffic|actively injecting network traffic) would then be subsequently capable of (logging into this site with a targeted user's password-based credentials|mounting on-line attacks against (a specific user's|all users') password-based credentials|mounting (dictionary|non-dictionary) off-line brute-force attacks against (a specific user's|all users') password-based credentials)|passive decryption attacks|active man-in-the-middile attacks) (with little or no work factor).
This (is|is not) recommended for (urgent) remediation. It (is likely|is not) sufficient to meet Payment Card Industry (PCI) standards or other adequate standards of care in the industry.
Check all that apply.
Also see http://cwe.mitre.org/data/definitions/719.html , for example http://capec.mitre.org/data/definitions/55.html .
I will agree with you, however, that this site is being a bit sloppy with its claims and I am going along with it because it suits my purposes (i.e., errs on the side of being conservative). But this is how security needs to work. Those claiming a system is secure should usually end up with a healthy burden of proof, whereas those claiming it's probably not should be listened to carefully.
- "I'm not storing the password in plain text, I'm hashing it after sending the email confirmation"
- "I'm not storing it in plain text, I'm encrypting it."
And of course, they would entirely miss the point that the real issue is that they are sending the password by email.
In any case, sending a password by email is always bad, no doubt about it, but my point is that they claim these websites store passwords as plain text when, half of the time, they don't actually know. Although this is a useful website, they lose a bit in credibility by being more sensationalist than they need to be.
I agree that sending passwords by email is a bad idea, but I also believe that the folks behind this site should learn what it means to say "website storing a password in plain text" (from their about page). They're right, but for the wrong reasons.
1. You create your password ("ABCDEF").
2. Their system stores it to the database encrypted ("a;kdjfa;oisdurpoqiwur,m c3249um zxc,vmvsdflkgjad[fiualmdr23,4mo;icuzvlcm œ rtoqieuroier").
3. You click "I forgot my password".
4. Their system transforms the encrypted format to your original ("ABCDEF").
I think you mean to say "we know that they have not stored the password in a non-reversible format".
This is pedantic, but specifics matter when talking about security.
It also means they have the decryption key available to online systems. It's almost certainly exposed to the very same vulnerabilities that the rest of the database has.
A cipher is simply a means of converting a plaintext secrecy problem into a key distribution problem.
The reason precision matters with security is because taking the "conservative" approach (also known as the "chicken little approach") ensures that normal people will tune out and ignore security altogether. When making security claims, it pays to take 10 seconds and write what you mean. It's not hard in cases like this.
But if you think that there's a 10 second formulation to the multitude of subtleties involved here, well frankly that's dangerously simplistic.
That's precise, short, and easily understandable. It's also verifiable. I'm sure you can come up with something that hits those marks just as quickly. It's really not hard, which makes the sloppiness of this site's claims more annoying.
Your formulation is "precise, short, and easily understandable" but it's also wrong. You're making the mistake of measuring the thing that's easiest to measure rather that the thing that's most important to improve.
By definition, we don't know who has requested that the password be sent via plain text email because that party has not successfully authenticated as a known user.
In other words, what is technically correct doesn't convey an accurate impression.
If you're dealing with a bank that keeps their vault key in their vault door, or a member of the public choosing a bank, they might not have the nuanced understanding of security to understand the problem if you use too much technical jargon.
import requests, re, json
get_captions = lambda content: [post['caption'] for post in content['response']['posts'] if 'caption' in post]
get_domains = lambda captions: map(lambda caption: re.sub('<.*?>', '', caption.split('</p>')[0]), captions)
def process(url):
offset = 0
domains = []
while True:
resp = requests.get(url.format(offset))
if resp.status_code == 404:
return domains
domains.extend(get_domains(get_captions(json.loads(resp.content))))
offset += 20
domains = process('http://api.tumblr.com/v2/blog/plaintextoffenders.com/posts?notes_info=true&api_key=<mykey>&offset={0}')
with open('/tmp/domains', 'w') as dfile:
dfile.write('\n'.join(domains))The Plain-Text Offenders site is concerned with web sites that can email you back your original password in plain text. Personally, I'd be most concerned when these emails are in response to an "I forgot my password" request. (Initial registration emails that send you back your plaintext password are dumb, but don't necessarily indicate that the site operator can reconstruct your plaintext password.)
If you are physically incapable of reconstructing the user's plaintext password and emailing it back to them then I'd say you're in good shape. If you have enough information to reconstruct the plaintext password then you're doing it wrong.
Will it enable him to mount brute-force attacks against the users' plaintext passwords?
More pedantry: if you have a decent RDBMS like Postgres and connect to the DB always as some user A (using a Pg function with SECURITY DEFINER defined by a superuser to compare passwords with a delay, hashed or not) and use column-level permissions that disallow access to the password (or hash) column to non-superusers, they can sql inject all they want (any attempt to dump/select the password column will fail, unless they also manage to reconnect to the database as superuser).
I disagree, because what seems safe today might be unsafe tomorrow or in 10 years. Does anyone still remember Unix versions without a shadow passwd file? I do ... But why do we use that even today when modern Linux installations use SHA variants by default?
The Postgres function written to compare passwords/hashes can also limit the number of checks per time unit to prevent brute-forcing.
I think I posed a very real-world and relevant concrete scenario with considerations that are usually worth thinking about.
And why use a custom scheme when there's quite a few very good methods like bcrypt et al that we mention on the website?