5 ms·
Ok, I'm going to take the counterpoint on this. Heartbleed, and "goto fail" are bugs that any competent C developer could have found. You, me, the muffin man,
by drewcrawford 13y ago
Ok, I'm going to take the counterpoint on this.
Heartbleed, and "goto fail" are bugs that any competent C developer could have found. You, me, the muffin man, the NSA, a bright undergraduate student. Anyone. These aren't vulnerabilities that you read about in a crypto journal. They are basic implementation bugs.
So why weren't they found by amateurs? (Well, perhaps the premise is false. Perhaps they were found by amateur attackers.) However I submit to you if true it is because people who are actually experts in cryptography do not generally spend their time looking for dumb implementation bugs. I'm sure some do, but many don't. Which is understandable--we want those people looking for weaknesses in AES or curve25519 or something.
Meanwhile we have a culture of abstinence-only crypto education, where everything crypto touches is a forbidden land that we shame any ordinary software developer for venturing into. Nobody found this bug because ordinary developers aren't there to find it. They're not there because they're told to leave.
You suggest "double down on amateurish" facetiously but I claim that amateur hour would have actually caught these two bugs, because any amateur can see them. Maybe it would have created more bugs, maybe not, but I think it would have stopped these two early.
What I think we need to do, and what we should have done a long time ago, is recognize that abstinence-only crypyotgraphy doesn't work. We need to define levels of risk. Writing your own crypto algorithm is Threat Level Red. Implementing a strong one from a spec is Threat Level Yellow. Implementing a high-level authentication scheme like TLS from a spec is Threat Level Green. Porting OpenSSL to a new architecture is Threat Level Blue.
Abstinence-only crypto education doesn't recognize that some people are going to do crypto anyway. It also doesn't recognize that "not enough eyes" is a threat model that objectively produces THE most serious vulnerabilities we have faced in recent years. Putting all our eggs in OpenSSL and telling ordinary developers to use it and not ask questions literally burned down the internet. I don't know what kind of bad scenario we were trying to avoid, but the one that actually happened was worse.
Some type of risk-aware model encourages people to get involved in a skill-appropriate way. That needs to be the goal of the crypto community right now; to capture the energy from software developers interested in cryptography (particularly due to recent world events) and do something useful with it; not turn them away and say "nothing to see here".
- hueving 13y ago>objectively produces THE most serious vulnerabilities I think you mean subjectively. From my perspective vulnerabilities that permit immediate root access are still an order of magnitude worse. >literally burned down the internet I don't think you know what that word means.
- duncan_bayne 13y agoBurned and literally are both candidates for that statement.
- drewcrawford 13y agoThis is a cross-vendor, cross-platform vulnerability that requires one to assume that almost any password used over https, any SSL session, or almost any SSL certificate used in the last year, hell, anything in server memory in the last year is compromised. I'm quite confident there are many systems that relied solely on SSL to gate immediate, root access, and some of those are still right now, as we speak, exploitable. If that's not "burned down the internet" nothing possibly qualifies.
- hueving 13y agoSame thing would apply to a vulnerability in Apache2 or nginx.
- tptacek 13y ago"Not enough eyes"? OpenSSL is among the most aggressively reviewed codebases in the industry. Everyone reads OpenSSL. The problem with OpenSSL isn't that it didn't get "enough eyes". The problem is that the code is bad. It's disorganized, serves too many interests, and (particularly in the TLS portion of the tree) is a grab bag of functionality. OpenSSL implements twenty two TLS extensions. NSS, the library used by Firefox and Chrome, implements 11. Why was it possible for some dude in Germany to specify a TLS extension that nobody really needed and then implement it in OpenSSL as the client default? Because OpenSSL is a bazaar, not a cathedral, and nobody really claims ownership of what the code in openssl-1.0.1e/ssl is supposed to do. Also: check your availability bias. "Burned down the Internet"? This was a bad bug, but it wasn't unique; nginx had the same bug just a couple years ago (I know this because we found it). But shove all that aside, because these are all codebases that have hosted remote code execution flaws.