> In this adversarial example, where a rogue CSR is obtained, such as for one 
> of these BygoneSSL-style expired/unregistered domains, the fundamental 
> question it seems we’re asking is: is signing a CSR for that name an 
> authorization for that key to be used with that name?

I have no problem with the idea of treating a CSR that contains SAN(s) as 
authorization by the key holder for certificate(s) to be issued that contain 
both the corresponding public key and those SAN(s); but I do have a problem 
with the idea of later treating that same CSR as authorization by the key 
holder for the key to be considered proven-compromised just because somebody 
(who may or may not be the key holder) happens to be in possession of a copy of 
that CSR.

Corey's BygoneSSL scenario isn't the one I was thinking of.  My concern is that 
the nature of a "Subscriber" might not always be as simple as we might like.

Consider this scenario:
Alice generates a CSR and leaves a copy of it in a public GitHub repository.
Alice requests a certificate for her domain by providing the CSR to a 
certificate reseller, who forwards it to the CA.
The CA, who considers the reseller to be the Subscriber, asks the reseller to 
prove domain control.
The reseller works with Alice to prove domain control.
The CA issues the certificate.
The CA sends the certificate to the reseller.
The reseller forwards the certificate to Alice.
Alice installs her certificate and expects it to work until expiry.
Alice leaves a copy of her CSR in a public GitHub repository.
Eve discovers Alice's CSR and grabs a copy of it.

Attack 1 (where the CA treats anyone's proof-of-possession of the CSR as 
equivalent to proof-of-possession of the private key):
Eve goes directly to the CA and requests revocation of Alice's cert, selecting 
Key Compromise as the reason, and presenting Alice's CSR as "proof".
The CA accepts this "proof".
The CA revokes Alice's cert.
Alice is surprised!

Attack 2 (where the CA treats only the Subscriber's proof-of-possession of the 
CSR as equivalent to proof-of-possession of the private key):
Eve correctly guesses that Alice obtained her cert via a particular certificate 
reseller.
Eve requests a certificate by providing Alice's CSR to the same certificate 
reseller, who forwards it to the CA.
The CA notices that it already has suitable validation records for this 
Subscriber (the reseller) that are < 398 days old.
The CA issues the certificate (without requiring the reseller to again prove 
control of Alice's domain name).
The CA sends the certificate to the reseller.
The reseller forwards the certificate to Eve.
Eve can't use the certificate, but that was never her intent anyway.
Eve asks the reseller to revoke her cert, selecting Key Compromise as the 
reason, and presenting Alice's CSR as "proof".
The reseller forwards this revocation request to the CA.
The CA accepts this "proof".
The CA revokes Eve's cert.
The CA also revokes Alice's cert, since it has the same key as Eve's cert and 
belongs to the same Subscriber (the reseller).
Alice is surprised!

________________________________
From: Ryan Sleevi <r...@sleevi.com>
Sent: 04 February 2022 16:31
To: Corey Bonnell <corey.bonn...@digicert.com>
Cc: Doug Beattie <doug.beat...@globalsign.com>; Jesper Kristensen 
<jesperm...@gmail.com>; Kathleen Wilson <kwil...@mozilla.com>; Rob Stradling 
<r...@sectigo.com>; dev-security-policy@mozilla.org 
<dev-security-policy@mozilla.org>; r...@sleevi.com <r...@sleevi.com>
Subject: Re: Revocation Reason Codes for TLS End-Entity Certificates


CAUTION: This email originated from outside of the organization. Do not click 
links or open attachments unless you recognize the sender and know the content 
is safe.



On Fri, Feb 4, 2022 at 9:38 AM Corey Bonnell 
<corey.bonn...@digicert.com<mailto:corey.bonn...@digicert.com>> wrote:

Hi Ryan,

I agree with Rob that a CSR contains all the SANs of a certificate request is 
not necessarily sufficient PoP. A bit of PKI fan fiction to illustrate:

I think you may be conflating my remarks with Doug’s? I wasn’t proposing an 
“all sans” rule, but a “subscriber” rule - see below.


There are mitigations that the CA can put in place to lower the chances of that 
from happening (such as binding a submitted public key to a specific Subscriber 
account), but even that may be flawed since it’s essentially TOFU (the first 
Applicant to submit the CSR “wins”). Given these concerns, I don’t think it 
necessarily follows that a CSR that contains all SANs of a given certificate 
request constitutes PoP in all cases.

To be clear, I was suggesting that the question of “have they proven POP” is 
about whether the subscriber, who provided the CSR and validated the domain, is 
the one who initiates the revocation request.

In this adversarial example, where a rogue CSR is obtained, such as for one of 
these BygoneSSL-style expired/unregistered domains, the fundamental question it 
seems we’re asking is: is signing a CSR for that name an authorization for that 
key to be used with that name? And, if it is, what privileges are afforded to 
the Subscriber account?

I think you and Rob are arguing either that
a) A CSR shouldn’t be seen as authorization for that domain to use that key

or

b) That zero privileges are afforded and some separate demonstration of control 
is needed

I’m not sure how b would work though, because even systems like bootstrapping a 
revocation key are still working on the assumption that the entity who 
presented the CSR and performed the domain validation challenge is authorized 
to bootstrap said key. If the CSR isn’t the source of that authorization, where 
does it flow?

It would seem that, if we take the CSR out of the mix, you’re looking to 
bootstrap some form of challenge-response protocol, similar to DNS 
challenge/response. Which, to be fair, a CSR can be as well, as we saw with 
.onion. But how well does that align with how the WebPKI works today, and has 
worked for decades?

Is there a connection I’m failing to make here?

-- 
You received this message because you are subscribed to the Google Groups 
"dev-security-policy@mozilla.org" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dev-security-policy+unsubscr...@mozilla.org.
To view this discussion on the web visit 
https://groups.google.com/a/mozilla.org/d/msgid/dev-security-policy/MW4PR17MB4729369B095106D92DA04C3AAA299%40MW4PR17MB4729.namprd17.prod.outlook.com.

Reply via email to