News for hackers. Stuff that matters.
Re:Linode Security Advisory by msbarnett on Friday February 19, 2016 @05:16PM (#11137089)
> SHA-2 for password hashes

They're moving on from them, but they're going to leave SHA-2s sitting there and wait until everyone logs in to upgrade to bcrypt hashes at rest.

Not getting a super competent vibe off of these folks.

Re:Linode Security Advisory by stephendicato on Friday February 19, 2016 @05:35PM (#11137243)
To add to that, bcrypt is not the best recommendation if choosing a password hash today. In theory they should be adopting Argon2 (or maybe scrypt).

In practice, I suspect that either the bindings for Argon2/scrypt don't exist or aren't easily adoptable given their use of ColdFusion. They do exist in Python.

Either way, it seems like a sub-optimal decision.

Re:Linode Security Advisory by technion on Friday February 19, 2016 @08:05PM (#11138066)

    they should be adopting Argon2
I'm saying this as a proponent of Argon2, who has invested a lot of time trying to improve the codebase[0].

It currently isn't ready in large production. Efforts to stabilise the API are being spearheaded by someone apparently outside the project[1]. If you're reading this @lucab, thank you.

In the meantime, my Ruby bindings have been broken on three separate occasions due to API changes. You could easily say "Don't track master", but the one release has a tag of 20151206, and it's just an arbitrary a tag as any particular commit id. There is no branch from which you could apply "bugfix only" updates.

Two separate commits broke compilation. This commit[2] was a shambles.

Most importantly, they have commits going in two days ago that change the test vectors[3]. That means if you update your library, verifying existing passwords breaks. The hash identifier doesn't change ( in the way that bcrypt had $2, then changed it to $2a then $2y when they changed the algorithm) which means you can't just write an "upgrade hash" function. I can't find any documentation relating to this change.

It's important to note that none of this means your passwords are easily broken, or that it's insecure, which is the implication I often see thrown around when discussing Argon2 being "new".

[0] https://github.com/P-H-C/phc-winner-argon2/commits/master?au... [1] https://github.com/P-H-C/phc-winner-argon2/issues/61 [2] https://github.com/P-H-C/phc-winner-argon2/issues/87 [3] https://github.com/P-H-C/phc-winner-argon2/commit/37e031213e...

Re:Linode Security Advisory by mnordhoff on Friday February 19, 2016 @05:48PM (#11137332)
All three are good choices, with their own advantages and disadvantages. Argon2 may be clearly the best choice a few years from now, but both the algorithm and software implementations are immature. It's makes sense to be conservative and go with the more battle-tested options.

(Also last I looked Python has no good scrypt bindings.)

https://paragonie.com/blog/2016/02/how-safely-store-password... https://news.ycombinator.com/item?id=11118720

Re:Linode Security Advisory by stephendicato on Friday February 19, 2016 @05:59PM (#11137410)
You're right. I agree. In practice I'd heavily weight the decision based on whatever is best supporting in the Python libraries they are adopting.
Re:Linode Security Advisory by monster2control on Saturday February 20, 2016 @11:31PM (#11143302)
Just an FYI, NIST still recommends SHA-2 for password hashing, they still don't see enough benefit from Bcrypt with the advent of super fast ASIC and FPGAs. Scrypt and Argon2 are too immature. Coldfusion isn't a reason for not using either as cold fusion can run any Java code very easily. Python can run C code easily. So bindings for any language is never a reason as long as you know how to use your tools. Bcrypt does add some extra benefits over SHA-2 for typical offline password hacking. So it's still a good step. It would be foolish to go with Agon2 as it only won the Password Hashing contest a little over 6 months ago. Bcrypt has been found to be solid for other 15 years now and has had tons of eye balls on it. Scrypt has had issue in the past and hasn't been nearly as scrutinized as Bcrypt. The fact of the matter is, the good guys aren't working as hard as the bad guys when it comes to good security.
Re:Linode Security Advisory by elbee on Friday February 19, 2016 @05:36PM (#11137251)
Waiting until login until you upgrade to bcrypt is a requirement is compotent password storage. At this point in time all Linode should know is SHA-2(password) and they can't use that to derive bcrypt(password).

The way upgrade should work is that the user provides their password, which is verified with SHA-2 and then hashed with bcrypt and stored again.

In order to do this without people logging in Linode would have to bcrypt hash the SHA-2 hashed passwords and then keep doing that for all password validations.

Re:Linode Security Advisory by msbarnett on Friday February 19, 2016 @05:44PM (#11137304)
> Waiting until login until you upgrade to bcrypt is a requirement is compotent password storage

It's not even remotely competent. This blog makes it clear they're not even sure how their secret key was stolen. These hashes could be walking out their backdoor as I type this. Keeping vulnerable hashes at rest is insane.

It would be far more competent to bcrypt the SHA-2s, so that at least when the hashes wander out the backdoor they haven't really found, peoples passwords aren't trivially attackable.

> In order to do this without people logging in Linode would have to bcrypt hash the SHA-2 hashed passwords and then keep doing that for all password validations.

No, they'd just have to replace Bcrypt(SHA-2(password)) with Bcrypt(password) once the customer finally logs in.

It's an immediate net upgrade to the resistance of at-rest Hashes to brute force attacks with zero downside.

Re:Linode Security Advisory by elbee on Friday February 19, 2016 @06:03PM (#11137432)
That will work as a way to strengthen the hashes (a few other people pointed that out as well).

My point was that if you have a system which can go straight from SHA2(password) to bcrypt(password) then the system must be storing the plaintext of the password, which would be very bad.

Re:Linode Security Advisory by msbarnett on Friday February 19, 2016 @06:36PM (#11137624)
> My point was that if you have a system which can go straight from SHA2(password) to bcrypt(password) then the system must be storing the plaintext of the password, which would be very bad.

Yes, I understand that. It's just completely irrelevant to the question of whether or not it's competent practice to store vulnerable hashes indefinitely, awaiting customer log in.

Again, it is not a competent practice. Wrap vulnerable hashes in strong ones immediately; they're a huge liability to leave sitting in your storage even when you don't have evidence that there's a backdoor in your systems that you cannot seem to find.

Re:Linode Security Advisory by eatonphil on Friday February 19, 2016 @06:18PM (#11137508)
I don't see anything to indicate they are converting directly from sha2 to bcrypt. When the user logs in next, if it matches the sha2 hashed password, insert the bcrypt hashed password in the bcrypt hash password field and use that from now on.
Re:Linode Security Advisory by stock_toaster on Friday February 19, 2016 @05:54PM (#11137373)

  > At this point in time all Linode should know is 
  > SHA-2(password) and they can't use that to derive
  > bcrypt(password).
  > ...
  > In order to do this without people logging in Linode would have
  > to bcrypt hash the SHA-2 hashed passwords and then keep doing
  > that for all password validations.
They just could make the intermediate step bcrypt(SHA-2(password)) via some lockstep code/db backend update. Then on next user login after verifying against bcrypt(SHA-2(password)), update the db to the more straightforward bcrypt(password). At the very least this would increase the difficulty of brute forcing in the meantime.
Re:Linode Security Advisory by maxerickson on Friday February 19, 2016 @05:41PM (#11137282)
Why can't they bcrypt(SHA-2(password)) right away and then update to bcrypt(password) on the first login?
Re:Linode Security Advisory by ryanlol on Saturday February 20, 2016 @03:47PM (#11141876)
>The way upgrade should work is that the user provides their password, which is verified with SHA-2 and then hashed with bcrypt and stored again.

Er no, forcing email password resets and blocking the old passwords is the only way you should ever handle breaches like this.

to the downvoter: do you think it's cool to fuck over every single one of your customers that hasn't logged in recently?