Resumo

  • Um site enviava Strict-Transport-Security sobre uma conexão HTTPS sem erros. O navegador guardava a regra para contatos futuros; a RFC 6797 identificou a primeira visita HTTP a um domínio desconhecido como uma janela de ataque.
  • Em 2011, o Chromium anunciou que até a navegação inicial para o Gmail usaria HTTPS. A RFC de 2012 descreveu listas HSTS pré-instaladas por fornecedores de navegadores para proteger esse primeiro contato com sites selecionados.

O pedido saía antes da ordem

O artigo ForceHTTPS de 2008, de Collin Jackson e Adam Barth, propôs que um site ou o usuário pudesse exigir tratamento rigoroso de HTTPS. A extensão experimental para Firefox convertia conexões não seguras, encerrava sessões diante de erros de certificado e impedia conteúdo embutido sem proteção. Os autores atacavam um compromisso comum dos navegadores: manter sites mal configurados funcionando mesmo que isso transformasse avisos de segurança em obstáculos contornáveis. A proposta dava a um site uma maneira de recusar esse compromisso.

A RFC 6797 tornou a exigência um cabeçalho de resposta, Strict-Transport-Security. Recebido por HTTPS sem erros, ele fazia o navegador lembrar o domínio pelo período max-age e elevar os pedidos seguintes para HTTPS. Recebido por HTTP, devia ser ignorado. O atacante que controlasse a parte aberta da conexão não poderia escrever a regra destinada a detê-lo.

Na primeira visita, porém, o navegador ainda podia não saber nada sobre o domínio. Um endereço digitado sem esquema ou um link http punha a requisição inicial na rede antes da resposta do site. A RFC chamou essa situação de vulnerabilidade de inicialização perante um intermediário. O servidor tinha a ordem correta, mas só conseguia enviá-la depois que o pedido já havia saído. Um redirecionamento posterior não recuperava aquele instante.

A lista veio dentro do navegador

O anúncio de junho de 2011 do Chromium separava dois caminhos. No Chromium 12, usuários avançados podiam impor HTTPS a domínios escolhidos. Para o Chromium 13, a equipe declarou que todas as conexões ao Gmail seriam HTTPS, inclusive a primeira navegação de quem digitasse gmail.com ou mail.google.com sem prefixo. Também descreveu erros de certificado que não poderiam ser ignorados com um clique. A política já estava no navegador antes da resposta do site.

A seção 12.3 da RFC 6797 descreveu a lista HSTS pré-carregada: administradores podiam pedir aos fornecedores de navegadores que distribuíssem a política de seus sites com o programa. A documentação do próprio Chromium explica a lacuna para instalações novas ou para quem apaga o estado local e o papel da lista pré-instalada. O site tinha de oferecer HTTPS; o fornecedor escolhia quais nomes chegariam ao usuário com uma ordem pronta.

A primeira visita passou a depender de uma decisão de distribuição. O cabeçalho do servidor governava quem já chegara com segurança. A lista do navegador agia antes da viagem. Uma cópia da lista do Chromium 13 e medições do tráfego inicial mostrariam a extensão concreta da proteção; os registros originais mostram quem ganhou o poder de antecipá-la.

Fontes