Кратко

  • Сайт отправлял Strict-Transport-Security по соединению HTTPS без ошибок, и браузер запоминал правило для следующих визитов. RFC 6797 прямо назвал первый HTTP-запрос к ещё неизвестному узлу уязвимым для посредника.
  • В 2011 году команда Chromium сообщила, что даже первый переход на Gmail будет происходить по HTTPS. В RFC 2012 года описан заранее установленный изготовителем браузера список HSTS для защиты первого обращения к выбранным доменам.

Сервер отвечал слишком поздно

В статье о ForceHTTPS 2008 года Коллин Джексон и Адам Барт предложили дать сайту или пользователю возможность требовать строгой обработки HTTPS. Их прототип расширения Firefox перенаправлял незащищённые соединения, прекращал сеанс при ошибках сертификата и блокировал небезопасные встроенные элементы. Исследователи боролись с компромиссом браузеров: ради совместимости с плохо настроенными сайтами предупреждения о безопасности оставались обходимыми. Новый механизм позволял владельцу сайта заявить, что такой компромисс ему не подходит.

RFC 6797 закрепил правило в ответном заголовке Strict-Transport-Security. Получив его по защищённому соединению без ошибок, браузер запоминал узел на срок max-age и переводил последующие запросы на HTTPS. Заголовок, доставленный по обычному HTTP, он обязан был игнорировать. Иначе атакующий на открытом участке мог бы устанавливать или сбрасывать правило, направленное против него.

У первого обращения такой памяти ещё не было. Человек мог набрать домен или перейти по ссылке http, а браузер считал сайт неизвестным. RFC назвал это уязвимостью начального контакта перед посредником. Инструкция сервера находилась в ответе, тогда как запрос уже пересёк сеть. Поздний переход на HTTPS не возвращал его назад.

Список уехал вместе с браузером

В сообщении от июня 2011 года команда Chromium описала два пути. Chromium 12 позволял опытным пользователям принудительно включать HTTPS для выбранных доменов. Для Chromium 13 команда объявила все соединения с Gmail защищёнными, включая первый переход после ввода gmail.com или mail.google.com без префикса. Она также описала ошибки сертификата, которые нельзя обойти нажатием кнопки. Правило уже находилось в браузере, когда сервер ещё молчал.

Раздел 12.3 RFC 6797 описал предустановленный список HSTS: администратор сайта мог обратиться к производителю браузера, чтобы тот поставлял политику вместе с программой. Документация Chromium объясняет окно при новой установке или удалении локального состояния и действие списка для внесённых доменов. Сайт отвечал за работающий HTTPS. Производитель решал, какие имена заранее попадут в браузер.

Первый запрос стал зависеть от распространения программы. Заголовок сервера действовал после успешной защищённой связи; встроенный список — до неё. Сохранённая версия списка Chromium 13 и измерения первых обращений показали бы точный охват. Исходные документы уже показывают, кто получил право решить раньше сервера.

Источники