Skip to content

Very difficult to avoid being upgraded to HTTPS in Chrome Beta #12

@dadrian

Description

@dadrian

We're in the process of launching https://github.com/dadrian/https-upgrade in Chrome. Right now, the feature is enabled for 50% of Chrome Beta, although you can also use it in stable (M113) by enabling #https-first-mode-v2 AND #https-upgrades on chrome://flags. We intend to enable this by default eventually, but we're not there yet.

HTTPS Upgrades optimistically upgrade any HTTP navigation to HTTPS. If HTTPS is unavailable, Chrome falls back to HTTP without an interstitial. The feature is not intended to protect against active adversaries.

Users can opt out of the upgrade feature on specific sites by adding the site to the "Insecure Content" "permission" accessible via chrome://settings/content or via the Page Info (Lock) Icon, and then navigating to an HTTP page on that site.

Putting this all together, what does this mean for NeverSSL?

  1. Any Omnibox navigation to neverssl.com, regardless of scheme, gets upgraded to HTTPS.
  2. Rather than serve a RST, NeverSSL sends a redirect to http://$RANDOM_SUBDOMAIN.neverssl.com
  3. The HTTPS Upgrades feature intercepts the redirect to HTTP, and upgrades it to HTTPS.
  4. NeverSSL happily serves https://$RANDOM_SUBDOMAIN.neverssl.com and the user is stuck on HTTPS
  5. (optional, terrible workaround) The user clicks Page Info (Lock Icon) -> Site Settings -> Insecure Content -> Allowed
  6. The user manually changes the scheme back to HTTP and forces a navigation (hits enter)
  7. NeverSSL is now accessible over HTTP

Certainly, the UX for disabling upgrades is not good, although it's not entirely clear if there's any good options. What I don't understand is why NeverSSL supports HTTPS at all? I understand you did it to work around the schemeless Omnibox upgrades to HTTPS that landed a couple years ago, but wouldn't it work equally well to have port 443 return a RST, so that Chrome and other browsers immediately fall back to HTTP?

Alternatively, is there some way to serve a RST on the $RANDOM_SUBDOMAIN.neverssl.com on port 443, so that the redirect continues to stay on HTTP?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions