Chrome, Chromium and Certificate Caching

Just like a good System Administrator, I set on one day to replace the current certificate for the main site that's used for HTTPS. I issue a new CSR, I send it to the Certificate Authority, I get the Signed Certificate, Revoke the old one and after a total of 5-10 minutes I have the web server serving the new certificate to all connecting clients.

Of course, I need to verify that I do indeed serve the new certificate and everything went correctly. I had the website open in Google Chrome on Mac OS X and I had not refresh it yet after the certificate change. I click the https:// before the URL and I examine the certificate. Everything is fine, since the certificate is the old one. I press ⌘+R, which is refresh for all you Windows / Linux / BSD users to refresh the page, I click the certificate and I still see the old version. I ssh into the web server again, reload the configuration, refresh again, and still it shows the old certificate. I even try restarting the entire web server, still nothing. I go to Chrome, press ⌘+Shift+R, which is Force Refresh (purge cache), and I still see the same certificate. I type the URL again, press Enter, still the same. I open a new Tab, a new Window, still the old certificate. Every other browser could perfectly see the new certificate so it must be something with caching.

I open a new Bug Report in Chromium Issue Tracker and soon I am told that this "cannot be exploited" since Google Chrome does not refresh the UI only when the certificate changes from a trusted state to another trusted state. After a bit of discussion, I mention Domain Validation and Extended Validation certificates, as well as their differences in the UI representation. The guys let me know that by the time the user is shown the visual difference, her cookies are already sent to the attacker server and therefore she has already been compromised.

However, what if the user accesses a service like PayPal for example that logs out the user after every session? What if the attacker wants to trick the user into logging in? Let's assume that somehow he managed to get a DV Certificate and is sitting in the middle of PayPal and the User. He intercepts the original connection, he presents a PayPal clone but the user notices she doesn't see the PayPal, Inc. [US] in the address bar and doesn't login.

Now what if the attacker exploits this bug? What if Google Chrome or Chromium never shows the user a simple https:// and instead shows PayPal, Inc. [US]? She will have no way of knowing and telling the two sites apart. This is the impact of the bug. Since both DV and EV certificates use the same protocol (HTTPS), but have different visual warnings, and that's the only way to distinguish the difference, forcing the browser not to show even that can have an impact in the user decision on whether to enter that e-mail and that password or not.