New issue
Advanced search Search tips

Issue 692052 link

Starred by 3 users

Issue metadata

Status: WontFix
Owner: ----
Closed: Feb 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: ----
Type: Bug-Security



Sign in to add a comment

Security: Chrome in Ubuntu accepts a certicate whose validity is "Wednesday, August 1, 2018 at 6:30:26 PM to Wednesday, August 1, 2012 at 6:30:26 PM"

Reported by chen...@stu.xidian.edu.cn, Feb 14 2017

Issue description


VULNERABILITY DETAILS
Generally, the validity of a certificate is like  "Wednesday, August 1, 2012 at 6:30:26 PM - Wednesday, August 1, 2018". However, when we reverse the "notBefore" and "notAfter", Chrome in Ubuntu accepts it without warning.

VERSION
Chrome Version: [54.0.2840.59] + [stable]
Operating System: [Ubuntu v1604-LTS x64]

REPRODUCTION CASE
1. To click the menu "settings" of Chrome.
2. To click "show advanced settings ...".
3. To click "HTTPS/SSL: Manage certificates ..."
4. To click the tab "Authorities" and to click "import". To select "ca.pem" which is attached to this report and to select "Trust this certificate for identifying websites".
5. To click the tab "Your Certificates" and to click "import...". To select "31.p12" which is also attached to this report and input the password "123654".
6. Chrome imports "31.p12" without warning and Chrome shows that "This certificate has been verified for the following useages: ...".
7. To view the imported "31.p12" and the tab "General" shows that the certificate is "Issued On Wednesday, August 1, 2018 at 6:30:26 PM" and "Expires On Wednesday, August 1, 2012 at 6:30:26 PM".
 
ca.pem
1.4 KB Download
31.p12
2.5 KB Download
Components: Internals>Network>Certificate
Labels: Needs-Feedback
On most platforms, certificate management is a responsibility of the operating system. 

The issue described here would only possibly be a security bug if the certificate with an invalid date range were actually usable to sign other certificates that would be accepted without error. Have you found some way for Chrome to accept a certificate chain that originates from the certificate with the invalid date range?
Certificate validation is an important way to guarantee the security of communications on the Internet. Flaws in in certificate validation results in insecurity of communications. We found in our experiments that Chrome accepts this certificate with a specially invalid date range. In our opinion, this is a latent security problem. Therefore, we reported it. 

As for the certificate chain, it is a part of our research. According to our plan, we will carry out related experiments in April or May. If we find useful bugs in the related experiments, we will report them to you. Thank you!
On Windows, certificates are managed by the system; Chrome doesn't "see" what you import at the time of import. If a chain were to build to the invalid root certificate, I'd expect the chain to be deemed invalid. A finding otherwise would be surprising and represent a security bug.

On Linux, Chrome maintains its own certificate manager; the certificate is loaded via CertificatesHandler::ImportServerFileRead, which presumably could do more validation on the imported certificate if it made sense. Again though, this only possibly represents a security bug if Chrome accepts (for the purposes of authenticating a HTTPS server) a certificate chain containing such an invalid certificate.
Cc: elawrence@chromium.org
elawrence@, what should we do with this bug for now, since we don't have any actionable cert chains?

Comment 5 by sleevi@google.com, Feb 23 2017

I'm fairly certain this is WontFix as described, but I do want to make sure I properly understand the report.

Why WontFix:
- The situation described is related to importation, not validation. If this was related to validation, it would need to be triaged, but based on the evidence so far, there's no report of attempts to validate with it.

To expand on that: We don't verify certificates when importing. This is because to import a certificate, you need access to the machine, and https://www.chromium.org/Home/chromium-security/security-faq#TOC-Why-aren-t-physically-local-attacks-in-Chrome-s-threat-model- generally captures why such 'attacks' aren't considered attacks.

To expand on why we don't validate when importing: It's not necessary, and it has a higher false positive rate but offers no tangible security benefit. This is because regardless of whether you verify at import, you will always need to verify at time of use. This is also because to import a client certificate, Chrome doesn't need to verify at import because it will _never_ verify the certificate, because its use will only be in shipping an opaque set of bytes to a server; it's the servers responsibility to validate. Further, we don't verify on the client because we don't know how the server will validate - it could be more relaxed (for example, accepting negative modulus RSA keys, such as were used in a whole host of Estonian national ID cards) or it could be more strict (e.g. checking revocation information dynamically on the server, which Chrome does not support on the client)

If you're able to demonstrate any attack in which such a certificate is used to authenticate a website, we'd be very happy to revisit. However, as described, this is just about adding strictness when importing, and that offers no security benefits, and questionable usability benefits.

Comment 6 by aarya@google.com, Feb 25 2017

Cc: sleevi@google.com
Status: WontFix (was: Unconfirmed)
No response, closing as WontFix.
Project Member

Comment 7 by sheriffbot@chromium.org, Jun 4 2017

Labels: -Restrict-View-SecurityTeam allpublic
This bug has been closed for more than 14 weeks. Removing security view restrictions.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Sign in to add a comment