I can't believe that they not only decided not to implement ACME (the protocol behind Let's Encrypt), but also not to at least reuse large portions of ACME, like the way HTTP ownership validation was implemented. It's simply mind-boggling how they would discard a protocol that has received a lot of attention from various security experts. What's more, this design could not have been reviewed by anyone familiar with how the web works - allowing users to chose the path for HTTP domain validation is so incredibly dangerous ... sigh.
If you're curious if there are any rules for CAs that describe how domain validation must be performed, the current Baseline Requirements can be summarized with "do something that's safe" on that topic. A working group within the CA/B Forum[1] is currently working on revising the document and adding explicit rules declaring which methods are permitted. I believe [2] is the latest draft.
My guess is simple. As software design and development was not part of their product life-cycle, they outsourced both client and API to whomever bid least on Upwork.
I really don't understand why they wouldn't just implement ACME first if they really do plan on getting around to it. What benefit do they really have of trying to go out on their own on this?
"What benefit do they really have of trying to go out on their own on this?"
Apparently, "substantially negative".
Grabbing an open-source ACME implementation really is the canonical value proposition for open source. Work together to make it secure, every individual contributor (once it exists) does less work over all, and even had they successfully implemented StartEncrypt the first time, the value would be in hosting it and attaching their reputation to it, not the API design. So even the usual objections to using open source in a commercial setting hardly apply. There's not much in the way of "look and feel", and no matter how this was going to happen the actual "polish" was going to be done by creating a new website that they could make as polished as they like with no trouble.
In other words, they have comprehensively flubbed this. Even once the code is fixed, the reputation damage is done.
tl;dr: StartSSL would issue certificates for sites like Github and Dropbox, and practically any site offering OAuth2, without having to have control over the domain.
StartEncrypt by StartCom/StartSSL has a LetsEncrypt-like verification process wherin the ownership of the domain is verified by doing a HTTP request, and having the listening webserver return a specific token.
The problem was that they allowed the user to choose the path on the domain, and so when you for example would host a raw file on Github or Dropbox, you could issue a certificate for that domain. Also, it would follow redirects, even to other domains, and with OAuth2 practically mandating open redirects, this was easy to do on many sites.
Is there any way to semi-blacklist CAs in the browser?
I'd like to be warned about certificates from certain CAs without access to that site being blocked. That way I can still reach these sites, but know not to trust them with confidential data. It also allows me to ask those sites to use a CA I trust.
The point being to be able to punish CAs less harshly than the death-sentence that is root removal.
Yeah, I'd like that too. For a while I was running with StartSSL removed entirely, but eventually I run into sites that used them, that I just couldn't live without.
The issue with that solution is that it will treat such certificates as essentially self-signed. This means that it will essentially blocks access to sites. I want a softer approach. Say one that strikes through the https in the URL.
Yeah, IMO it would have been entirely reasonable for StartCom to revoke the cert for free and cancel the account.
Also, the flip side of this is that occasionally (but very rarely), people want their private key to be a publicly accessible. See http://readme.localtest.me/, where everything else .localtest.me resolves to 127.0.0.1, and they tried to post a wildcard, but it got revoked.
Certificate authorities are the (shaky af) basis of the entire trust chain of the web.
Because its root certificate is in everybody's CA bundle, StartCom had a moral responsibility to understand the security around this product. This is negligence.
I don't have any StartCom certificates right now, but I sure won't have any in the future after this display.
What would a "CA death penalty" look like? They're a "root" CA, is there an entity that signed their root certificate that could issue a revocation? Or would we have to get all the OS and browser vendors to agree to phase out their root after some time?
Let's Encrypt had a similar vulnerability late last year.[1] That was successfully exploited in a malware attack. There's also a potential BGP attack.[2]
Validating that a host is on the correct domain is very hard in the presence of attacks. DNS can be spoofed. If there was an easy way to verify domains, CA-issued SSL certs would be unnecessary.
> How was this attack carried out? The malvertisers used a technique called “domain shadowing”. Attackers who have gained the ability to create subdomains under a legitimate domain do so, but the created subdomain leads to a server under the control of the attackers. In this particular case, the attackers created ad.{legitimate domain}.com under the legitimate site.
That's quite different. The attackers appear to have had full control of DNS in that case. Being able to control DNS is essentially the definition of domain ownership. Fraudulent issuance would be the smallest problem for a site affected by this. They'd have gotten a certificate from practically any CA issuing DV certificates.
Domain validation is messy and far from perfect, but this vulnerability is just inexcusable.
Those are not comparable. For better or worse, the attacks you speak of are not covered by DV's threat model, and all DV-issuing CAs--not just Let's Encrypt--suffer from them.
The Startcom vulnerabilities, on the other hand, are much easier to exploit and clearly violate DV's threat model.
Welcome to the world of certificate authorities, where the dumbest decision maker means the whole system is a joke.
If you're a government authority or even just a individual looking to get a nice signed certificate for some big domains you need look no further than that giant CA list. Any one of thousands. It's damn hard to have one developer write something reasonably secure, how hard do you think it is to have thousands write everything perfect?
It's unlikely that they'll suffer any consequences. The CA death penalty (i.e. root removal) is usually only used in cases of massive breaches, like in the case of DigiNotar. Sometimes, root programs force CAs to adopt things like Certificate Transparency or limit CAs to certain TLDs as a result (i.e. a CA that primarily issues certificates for a specific country might be name-constrained to that ccTLD to minimize the risk for other TLDs), but that wouldn't apply here as StartCom already uses Certificate Transparency and they don't really have a "primary" ccTLD they issue for.
So this is actually huge. The StartCom CA is trusted in almost every damn browser (mobile or otherwise).
This is basically saying the CA's private key has been leaked. Because the end result is the same: I can now issue a certificate for any damn domain I want and have it trusted.
Shame that these elemental security issues were present in the first case, and that StartCom went live with such an 'untested' and 'unaudited' product without doing a public-beta like Lets-Encrypt did (with non-trusted-by-default certificates).
It's also a shame they designed their own protocol instead of just using ACME[1], which is a standards-track IETF draft which has received significant security scrutiny. By ignoring ACME, they even managed to replicate my duplicate signature key selection vulnerability that was fixed in ACME nearly a year ago!
First of all, how do you define "untrustworthy"? Usually you delegate that decision to your browser vendor or OS distribution. If you no longer trust them for a specific CA, why trust them for any of the others?
Browsers may rely on the certificate store and trust settings provided by your OS. For example, Firefox always uses their own certificate store, while Chrome relies on the system.
certsimple has this guide on how to remove or distrust certificates in various browsers:
Does anyone know how browsers go about deciding which CAs to trust? It seems like browsers should be auditing CAs if they are going to be making this decision on our behalf. An audit should have caught this design flaw.
SSL/info sec/whatever noob here. Why can they produce certificates for, say, google.com without the permission of Google? Or am I reading the article wrong?
Slightly simplified: Each and every CA that's trusted by your browser is capable of issuing a certificate for every single domain on the internet. A certificate is basically nothing more than a document saying "StartSSL has verified that the certificate you're seeing right now belongs to the owner of google.com", with some crypto sprinkled on top.
The only thing that's preventing you from getting a certificate for any domain are software checks implemented on their end. If one of these checks fail (i.e. because the methodology is broken, or there's a bug, or they can be bypassed), you can get a certificate for any domain.
The CA determines "permission of Google" by "can put something on a web page at google.com". This is well-accepted, and as long as the CA's own connection to the internets is hard to MITM, it's pretty reasonable for what domain-validated SSL does. (If you want more security than that, try EV, or something other than SSL.)
Usually, "a web page at google.com" means to put a specific, CA-picked string at a specific, CA-picked URL. The ACME protocol has you put it under /.well-known/, which is reserved for this sort of thing. Other CAs will give you a randomly-generated filename. The intention is that you shouldn't be able to, say, upload a file to GitHub or some forum and claim control of it; you actually have to operate the site.
StartEncrypt neglected to enforce that check.
For google.com in particular, when you click "Sign in with Google" to a third-party service, it sends you to a URL on google.com, and google.com will redirect you back to the third-party site when it's done. What the attacker does is they set up their own website and enable Google sign-in on it (which anyone can do without Google's permission). Then they sign in, and save the URL that's redirecting them back, and send that URL to StartEncrypt. StartEncrypt dutifully follows the redirect when fetching content from google.com, and tricks itself into thinking the file was actually at google.com.
If you're curious if there are any rules for CAs that describe how domain validation must be performed, the current Baseline Requirements can be summarized with "do something that's safe" on that topic. A working group within the CA/B Forum[1] is currently working on revising the document and adding explicit rules declaring which methods are permitted. I believe [2] is the latest draft.
[1]: https://cabforum.org/mailman/listinfo/validation
[2]: https://github.com/cabforum/documents/pull/25/files?short_pa...