Eddy Nigg wrote, On 2008-09-18 03:43:
> On 09/18/2008 07:22 AM, Nelson B Bolyard:
>> In the case of AIA cert fetching, we have a cert for which we have no
>> issuer cert.  We cannot know that the the cert we are trying to validate
>> was signed by a real trusted CA.
> 
> But you trust the CA certificates the server send to you, do you?

After verifying that the signatures are valid in the chain, all the
way to a trusted root, then yes.  If the signatures don't pass the test,
then no.  The crucial difference is that when using certs from the SSL
server, we can construct the chain, and validate all its signatures,
without doing fetches from URLs in the certs first.  But when trying to
complete a chain by fetching certs from URLs in AIA extensions, we cannot
validate the signature in the cert from which the URL is taken until
after we've gone and attempted to fetch certs from the URL in the
unvalidated cert, a URL supplied by the (potential) attacker.

>> Even if its issuer name matches that of
>> a known and trusted CA, it may be a cert crafted by an attacker
> 
> Really? Please enlighten me how...I would like to see a real example!

Isn't this obvious?

Think about this.  Using certutil, I can construct a certificate that
has an issuer name that exactly matches (every bit) the subject name
of one of your CA's CA certs, but that has an AIA extension containing
a URL that does not go to the server your real AIA's use, but goes to
a completely different server.  The cert I create will not have a
signature that can be validated with your real CA cert, but as an attacker,
I don't care because the damage will be done before the relying party
discovers that my cert was not really issued by your CA.

I can provide a more detailed description, and even a live example, if
necessary, but really, by now this should be obvious.

> But in that case the server can send also such a specially crafted CA 
> certificate which chains to a builtin root, right? 

Not unless it has the private key of the builtin root.  It can create a
cert that has an issuer name that matches a built-in root, but the signature
will not validate.  The security or vulnerability is all
controlled by which operation is done first, the signature verification
of the chain, or the fetching or external data (certs, CRLs, OCSP) based
on the contents of those certs.

> There is no difference between relying on a server sending the missing
> chain or NSS fetching it.

Again the obvious difference is that in once case, the relying party
goes out and fetches from URLs in a cert of unknown origin, and in the
other case, it does not.

> In the end it must in both case validate up to a known root.
[snip]
> There is no higher risk that relying on the CA chain the server sends. 
> In moth cases the parties might be interesting in spoofing....

Let me try to clarify the nature of the vulnerability.
The concern is NOT that the relying party will be fooled into accepting
a bogus cert as legitimate.  The concern is that, before the relying
party determines that the cert is bogus, it will have acted as a proxy
for the attacker by fetching from an attacker-supplied URL.  Being able
to be tricked into acting as such a proxy is a vulnerability.
_______________________________________________
dev-tech-crypto mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to