On Fri, Oct 11, 2019 at 2:10 PM Clint Wilson <cl...@wilsonovi.com> wrote:
> Apologies, but this isn't entirely clear to me. I'm guessing (hoping) my > misunderstanding centers around a difference between the Applicant fully > delegating DNS to the CA vs the Applicant only configuring a single CNAME > record? If the Applicant has configured > _validation.sleevi.example 3600 IN CNAME <DOMAIN-ID>.ca.example > then the CA wouldn't be able to use any other <DOMAIN-ID> value to > complete the full lookup to include the TXT record, without the Applicant > directly changing the CNAME value. > > However, if the CA is fully managing this DNS, and therefore able to > independently reconfigure: > _validation.sleevi.example 3600 IN CNAME <DOMAIN-ID>.ca.example > to > _validation.sleevi.example 3600 IN CNAME > <EVIL-HACKER-DOMAIN-ID>.ca.example > that's clearly a very different story. > Is it correct to think of these as two different scenarios? In my mind, > the first scenario is the one I'm most interested in. > It's my fault for not being clearer of the example. You can think of <DOMAIN-ID> as an ID computed from the domain being requested - e.g. "sleevi.example" - rather than the account doing the requesting (the Applicant). In that scenario, when Evil Hacker, the Applicant, requests a cert for sleevi.example, the CA doesn't look at the Applicant-ID. They look to see if the domain - e.g. sleevi.example - is one that is signed up to use their service. If so, they modify the records, and now Evil Hacker has access. I tried to clarify this later on, that it's possible to design around; for example, by using <SUBSCRIBER-ID>.ca.example. This is closer to what AWS does. There are /still/ risks with that approach though, in terms of greater centralization of risk. Using the AWS example, if you wanted to get a malicious cert for sleevi.example, you'd either need to compromise my DNS provider, my DNS registrar, or my AWS account. Using the <SUBSCRIBER-ID> example, with the CA hosting, you'd either need to compromise my DNS provider, my DNS registrar, or... well, the CA's systems. Allowing the CA to do this sort of flow creates real challenges, because they're the only ones that can issue certs. For example, the CA could refuse to use that TXT method for anyone who doesn't point to them (e.g. who uses AWS instead of the CA). It might seem odd to suggest that CAs might refuse issuance, but we see it all the time. After all, the whole reason we have so many trusted CAs is because there are a number (particularly the European CAs) that want to refuse issuance on grounds of who is applying or how they're applying (e.g. ETSI EN 319 411-et-al forbidding automation entirely!). So we know CAs can try to lock folks in, and we also know that CAs' incentives, around user/account security, are not necessarily the same as might exist with a third-party provider like AWS. I realize that seems like I'm suggesting a lot of ill-intent. I'm simply trying to threat-model both the systemic weaknesses and the economic incentives. If we allow the CAs to do this, it seems like we'd need even stronger rules regarding Subscriber/CA authentication and identification, and that... would likely be controversial and complex, to say the least ;) Would there be a benefit to something like having <DOMAIN-ID> (or > <ACCOUNT-GUID> as discussed further below) published in CAA as well? i.e. > the Applicant publishes a whitelist of valid <ACCOUNT-GUID> values to be > used in this type of validation-delegation-schema? I haven't thought this > through fully, but it seems like it could help with explicitly codifying > the requirements, especially if the CAA record is published at > sleevi.example? > That's functionally what AWS is doing - it's using <ACCOUNT-GUID> instead of <DOMAIN-ID> as the binding, and pushing that in the hop. > This would suggest that we don't want the CA doing it, because the CA is >> not the Applicant, and the goal of 3.2.2.4 is to make sure the Applicant >> can demonstrate control. >> >> Another way of looking at this is imagining the following? >> - Do we think it's allowed by the BRs for the domain operator to set their >> MX to be the CA, so the CA can auto-answer their own emails sent under >> 3.2.2.4.4.? >> > - Do we think it's allowed by the BRs for the domain operator to give the >> CA FTP/SSH/file upload access to /.well-known/pki-validation, so that the >> CA can place the answer file on the server, and then request it as the CA, >> under 3.2.2.4.6? >> - Do we think it's allowed by the BRs for the domain owner to set an email >> of domain-id@ca.example using 3.2.2.4.13 / 3.2.2.4.14, and allowing the >> CA >> to self-acknowledge that e-mail? >> >> I seem to recall that there is a provision in the BRs that would prohibit >> this, at least in that none of the above (in the CA-controlled example) >> are >> demonstrating the Applicant themselves has control. And we certainly know >> from the above example that it could go quite poorly if naively >> implemented, so that's probably the right thing. >> > > Agreed with the conclusion, though I can't find a clear statement to this > effect so it remains more of a grey area than I'd like :( > The way I understand it is that currently the BRs are written such that > only when the CA is itself the Applicant can the CA compliantly perform the > 3 flows you outlined above (and there's some stuff about affiliates that > expands that a bit, but not much). But making that even clearer would be > pretty nice. > Yeah, that's my recollection/understanding as well, and agree, we can make it clearer that this is/should be prohibited, and then discuss how we can go allowing it. > That said, the solution Amazon uses here might be a useful solution to >> allowing it. Rather than <DOMAIN-ID>, AWS uses something like >> <ACCOUNT-UNIQUE-ID>, so that _validation.sleevi.example points to >> <SLEEVI-ACCOUNT-UNIQUE-ID>.ca.example. In that setup, only the >> <SLEEVI-ACCOUNT-UNIQUE-ID> can get new certs for sleevi.example, and any >> other accounts would fail, because _validation.sleevi.example wouldn't be >> pointing to <EVIL-HACKER-ACCOUNT-UNIQUE-ID>.ca.example, which is the one >> the CA would update. But if we're going to go that route, we probably >> would >> minimally want to codify that as the expectation, similar to the intent of >> 3.2.2.4.12 of making sure it's actually the same person. >> >> > It seems like a provision to the effect of "The CA can't modify DNS > records in an Applicant's DNS Zone(s)" is minimally necessary for this to > be safe? That is, even if the Applicant delegates their DNS fully to a CA > and points _validation.sleevi.example to > <SLEEVI-ACCOUNT-UNIQUE-ID>.ca.example, regardless of whether the CA is > technically capable of independently doing so, only the Applicant should be > authorized to initiate a change where _validation.sleevi.example points to, > but the CA can modify the DNS records in the zone(s) it owns (ca.example). > The chain of DNS lookups need to remain transparent and explicit. > The use of <ACCOUNT-GUID> works just as well for us as the <DOMAIN-GUID> > since architecturally a Domain ID is directly tied to an Account ID, so > would be supportive of requiring the <ACCOUNT-GUID> (and doing so seems > like it would fit in better with BR language around Applicants). > Just to clarify: the risk scenario I was trying to describe is where <DOMAIN-ID> is *not* linked to <ACCOUNT-ID>. If you don't have that, all bets are off. So it seems that, before saying it's copacetic, we need language to make clear the Right Way and the Dangerous Way, at least with respect to CAs. > With regards to changes in the BRs, it seems like we need to encapsulate > some specifics to how the DNS delegation can operate and identify what > safety guards are necessary for this be equivalent to current methods. As a > more minor change, would we also need to update the definition of Random > Value so that it can be something used by the CA's Validation system > directly, instead of something only specified to the Applicant? > Thanks, that's another good point about why prohibited - the Random Value is specified to the Applicant, which is true in the AWS case (AWS is the Applicant, DigiCert is the CA), but not true in the CA-hosting-the-CNAME case. But yeah, I agree with the overall approach: In order to say this is safe and good, we'd need to specify a clear and precise algorithm that made sure the relevant safe guards were in place. _______________________________________________ dev-security-policy mailing list dev-security-policy@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-security-policy