Компания Google представила релиз web-браузера Chrome 86. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается использованием логотипов Google, наличием системы отправки уведомлений в случае краха, возможностью загрузки модуля Flash по запросу, модулями для воспроизведения защищённого видеоконтента (DRM), системой автоматической установки обновлений и передачей при поиске RLZ-параметров. Следующий выпуск Chrome 87 запланирован на 17 ноября.

Основные изменения в Chrome 86:

  • Добавлена защита от небезопасной отправки форм ввода на страницах, загруженных по HTTPS, но отправляющих данные по HTTP, что создаёт угрозу перехвата и подмены данных при совершении MITM-атак. Защита сводится к трём изменениям:
    • Отключено автозаполнение любых смешанных форм ввода, по аналогии с тем, как уже достаточно давно отключено автозаполнение форм аутентификации на страницах, открываемых по HTTP. Если ранее признаком для отключения служило открытие страницы с формой по HTTPS или HTTP, теперь учитывается и применение шифрования при отправке данных обработчику формы. Работа менеджера паролей для смешанных форм аутентификации не отключена, так как риск от использования ненадёжного пароля и повторного применения паролей на разных сайтах превышает риск потенциального перехвата трафика.
    • При начале ввода в смешанных формах обеспечен вывод предупреждения, информирующего пользователя об отправке заполненных данных через незашифрованный канал связи.
    • При попытке отправки смешанной формы выводится отдельная страница с уведомлением о потенциальном риске передачи данных через незашифрованный канал связи. В прошлых версиях для индикации смешанных форм использовался индикатор замка в адресной строке, но подобная пометка была не очевидной для пользователей и эффективно не отражала возникающие риски.

  • Блокирование небезопасной загрузки (без шифрования) исполняемых файлов дополнено блокировкой небезопасной загрузки архивов (zip, iso и т.п.) и выводом предупреждений при небезопасной загрузке
    документов (docx, pdf и т.п.). В следующем выпуске ожидается блокировка документов и вывод предупреждения для изображений, текстовых и мультимедийных файлов. Блокировка реализована, так как загрузка файлов без шифрования может использоваться для совершения вредоносных действий путём подмены содержимого в процессе MITM-атак.

  • В контекстном меню по умолчанию показана опция «Всегда показывать URL полностью», для включения которой ранее требовалось изменение параметров на странице about:flags. Полный URL также можно просмотреть кликнув два раза на адресной строке. Напомним, что начиная с Chrome 76 по умолчанию адрес стал показываться без протокола и поддомена www. В Chrome 79 была удалена настройка по возвращению старого поведения, но после недовольства пользователей в Chrome 83 был добавлен новый экспериментальный флаг, добавляющий в контекстное меню пункт для отключения скрытия и показа полного URL в любых условиях.
  • Для небольшого процента пользователей запущен эксперимент по отображению по умолчанию в адресной строке только домена, без элементов пути и параметров запроса. Например, вместо «https://example.com/secure-google-sign-in/» будет показано «example.com». Доведение предложенного режима до всех пользователей ожидается в одном из следующих выпусков. Для отключения указанного поведения можно использовать опцию «Всегда показывать URL полностью», а для просмотра всего URL можно кликнуть на адресной строке. В качестве мотива изменения указывается желание защитить пользователей от фишинга, манипулирующего параметрами в URL — злоумышленники пользуются невнимательностью пользователей для создания видимости открытия другого сайта и совершения мошеннических действий (если для технически грамотного пользователя подобные подмены бросаются в глаза, то неискушённые обыватели легко покупаются на подобные простые манипуляции).
  • Возобновлена инициатива по удалению поддержки FTP. В Chrome 86 FTP отключён по умолчанию примерно для 1% пользователей, а в Chrome 87 охват отключения будет увеличен до 50%, но поддержку можно будет вернуть при помощи флага «—enable-ftp» или «—enable-features=FtpProtocol». В Chrome 88 поддержка FTP будет полностью отключена.
  • В версии для Android по аналогии с версией для настольных систем в менеджере паролей реализована проверка сохранённых логинов и паролей по базе скомпрометированных учётных записей с выводом предупреждения в случае выявления проблем или попытке использования тривиальных паролей. Проверка выполняется по базе, охватывающей более 4 миллиардов скомпрометированных аккаунтов, фигурировавших в утечках пользовательских баз. Для сохранения приватности применяется сверка хэш-префикса на стороне пользователя, а сами пароли и их полные хэши не передаются во вне.
  • В версию для Android также перенесены кнопка «Проверка безопасности» (Safety check) и расширенный режим защиты от опасных сайтов (Enhanced Safe Browsing). Кнопка «Safety check» показывает сводку о возможных проблемах с безопасностью, таких как использование скомпрометированных паролей, состояние проверки вредоносных сайтов (Safe Browsing), наличие неустановленных обновлений и выявление вредоносных дополнений. Расширенный режим защиты активирует дополнительные проверки для защиты от фишинга, вредоносной активности и прочих угроз в Web, а также включает дополнительную защиту для учётной записи в Google и сервисов Google (Gmail, Drive и т.п.). Если в обычном режиме Safe Browsing проверки выполняются локально по периодически загружаемой на систему клиента БД, то в Enhanced Safe Browsing информация о страницах и загрузках в режиме реального времени отправляется для проверки на стороне Google, что позволяет оперативно реагировать на угрозы сразу после их выявления, не дожидаясь пока обновится локальный чёрный список.
  • Добавлена поддержка файла-индикатора «.well-known/change-password», при помощи которого владельцы сайтов могут указать адрес web-формы для смены пароля. В случае выявления компрометации учётных данных пользователя Chrome теперь сразу предложит пользователю форму для изменения пароля, определённую на основе информации из данного файла.
  • Реализован вывод нового предупреждения «Safety Tip», отображаемого при открытии сайтов, домен которых очень похож на другой сайт и эвристика показывает, что велика вероятность спуфинга (например, открыт goog0le.com вместо google.com).
  • Реализована поддержка кэша перехода (Back-forward cache), обеспечивающего мгновенный переход при использовании кнопок «Назад» и «Вперёд» или при навигации по ранее просмотренным страницам текущего сайта. Кэш включается при помощи настройки chrome://flags/#back-forward-cache.
  • Проведена оптимизация потребления ресурсов CPU окнами
    вне области видимости. Chrome проверяет не перекрывается ли окно браузера другими окнами и исключает отрисовку пикселей в областях перекрытия. Указанная оптимизация была включена для небольшого процента пользователей в Chrome 84 и 85, а теперь активирована повсеместно. По сравнению с прошлыми выпусками также устранена несовместимость с системами виртуализации, из-за которой показывались пустые белые страницы.

  • Усилено урезание ресурсов для фоновых вкладок. Подобные вкладки теперь не могут потреблять больше 1% ресурсов CPU и могут активироваться не чаще одного раза в минуту. После пяти минут нахождения в фоне вкладки замораживаются, за исключением вкладок в которых воспроизводится мультимедийное содержимое или ведётся запись.
  • Возобновлена работа по унификации HTTP-заголовка User-Agent. В новой версии для всех пользователей активирована поддержка механизма User-Agent Client Hints, развиваемого в качестве замены User-Agent. Новый механизм подразумевает выборочную отдачу данных о конкретных параметрах браузера и системы (версия, платформа и т.д.) только после запроса сервером и дающий пользователям возможность выборочно предоставлять подобную информацию владельцам сайтов. При использовании User-Agent Client Hints идентификатор не передаётся по умолчанию без явного запроса, что делает невозможным проведение пассивной идентификации (по умолчанию указывается только название браузера).
  • Изменена индикация наличия обновления и необходимости перезапуска браузера для его установки. Вместо цветной стрелки в поле аватара учётной записи теперь появляется надпись «Update».

  • Проведена работа по переводу браузера на применение инклюзивной терминологии. В именах политик слова «whitelist» и «blacklist» заменены на «allowlist» и «blocklist» (уже добавленные политики продолжат работать, но для них будет выводиться предупреждение о переводе в разряд устаревших). В коде и именах файлов упоминания «blacklist» заменены на «blocklist».
    Видимые пользователю упоминания «blacklist» и «whitelist» были заменены ещё в начале 2019 года.

  • Добавлена экспериментальная возможность редактирования сохранённых паролей, активируемая при помощи флага «chrome://flags/#edit-passwords-in-settings».
  • Переведён в разряд стабильных и общедоступных API Native File System, позволяющий создавать web-приложения, взаимодействующие с файлами в локальной ФС. Например, новый API может быть востребован в запускаемых в браузере интегрированных средах разработки, редакторах текста, изображений и видео. Для получения возможности прямой записи и чтения файлов или использования диалогов для открытия и сохранения файлов, а также для навигации по содержимому каталогов, приложение запрашивает у пользователя специальное подтверждение.

  • Добавлен CSS-селектор «:focus-visible», который использует ту же эвристику, что используется браузером при принятии решения о показе индикатора смены фокуса (при перемещении фокуса на кнопку клавиатурными комбинациями индикатор появляется, а при клике мышью — нет). Ранее доступный CSS-селектор «:focus» всегда подсвечивает фокус.
    Кроме того, в настройки добавлена опция «Quick Focus Highlight», при включении которой рядом с активными элементами будет показываться дополнительный индикатор фокуса, который остаётся видимым даже если на странице через CSS отключены элементы стиля для визуального выделения фокуса.

  • В режиме Origin Trials (экспериментальные возможности, требующие отдельной активации) добавлено несколько новых API. Origin Trial подразумевает возможность работы с указанным API из приложений, загруженных с localhost или 127.0.0.1, или после прохождения регистрации и получения специального токена, который действует ограниченное время для конкретного сайта.
    • API WebHID для низкоуровневого доступа к HID-устройствам (Human interface device, клавиатуры, мыши, геймпады, сенсорные панели), позволяющим реализовать логику работы с HID-устройством на JavaScript для организации работы с редкими HID-устройствами без наличия в системе специфичных драйверов.
      Прежде всего новый API нацелен на предоставление поддержки геймпадов.

    • API Screen Information, расширяет возможности API Window Placement поддержкой конфигураций с несколькими экранами. В отличие от window.screen новый API позволяет манипулировать размещением окна в общем экранном пространстве многомониторнных систем, не ограничиваясь текущим экраном.
    • Мета-тег battery-savings, при помощи которого сайт может информировать браузер о необходимости активации режимов снижения энергопотребления и оптимизации нагрузки на CPU.
    • API COOP Reporting для информирования о потенциальных нарушениях режимов изоляции Cross-Origin-Embedder-Policy (COEP) и Cross-Origin-Opener-Policy (COOP), без применения фактических ограничений.
    • В API Credential Management предложен новый тип учётных данных PaymentCredential, обеспечивающий дополнительное подтверждение совершаемой платёжной операции. Проверяющая сторона, например, банк, имеет возможность сгенерировать открытый ключ PublicKeyCredential, который может быть запрошен продавцом для дополнительного безопасного подтверждения платежа.
  • В API PointerEvents для определения наклона стилуса добавлена поддержка углов высоты (угол между стилусом и экраном) и азимута (угол между осью X и проекцией стилуса на экран), вместо углов TiltX и TiltY (углы между плоскостью из стилуса и одной из осей и плоскостью из осей Y и Z). Также добавлены функции преобразования между высотой/азимутом и TiltX/TiltY.
  • Изменено кодирование пробела в URL, при его вычислении в обработчиках протокола — метод navigator.registerProtocolHandler() теперь заменяет пробелы на «%20» вместо «+», что унифицирует поведение с другими браузерами, такими как Firefox.
  • В CSS добавлен псевдо-элемент «::marker», позволяющий настроить цвет, размер, форму и тип чисел и точек для перечислений в блоках <ul> и <ol>.
  • Добавлена поддержка HTTP-заголовка Document-Policy, позволяющего задать правила доступа к документам, похожие на механизм sandbox-изоляции для iframe, но более универсальный. Например, через Document-Policy можно ограничить использование некачественных изображений, отключить медленные JavaScript API настроить правила загрузки iframe, изображений и скриптов, ограничить общий размер документа и трафик, запретить методы, приводящие к перерисовке страницы, отключить функцию Scroll-To-Text.
  • В элемент <fieldset> добавлена поддержка параметров ‘inline-grid’, ‘grid’, ‘inline-flex’ и ‘flex’, задаваемых через CSS-свойство ‘display’.
  • Добавлен метод ParentNode.replaceChildren() для замены всех дочерних элементов родительского узла на другой DOM-узел. Ранее для замены узлов можно было использовать комбинацию из методов node.removeChild() и node.append() или node.innerHTML и node.append().
  • Расширен спектр схем URL, допустимых для переопределения при помощи registerProtocolHandler(). В список схем включены децентрализованные протоколы cabal, dat, did, dweb, ethereum, hyper, ipfs, ipns и ssb, что позволяет определять ссылки на элементы независимо от сайта или шлюза, предоставляющего доступ к ресурсу.
  • В API Asynchronous Clipboard добавлена поддержка формата text/html для копирования и вставки HTML через буфер обмена (при записи и чтения в буфер обмена выполняется чистка опасных конструкций HTML). Изменение, например, позволяет организовать в web-редакторах вставку и копирование отформатированного текста с изображениями и ссылками.
  • В WebRTC добавлена возможность подключения собственных обработчиков данных, вызываемых на стадиях кодирования или декодирования WebRTC MediaStreamTrack. Например, указанную возможность можно использовать для добавления поддержки сквозного шифрования данных, передаваемых через промежуточные серверы.
  • В JavaScript-движке V8 на 75% ускорена реализация Number.prototype.toString. В асинхронные классы добавлено свойство .name с пустым значением. Удалён метод Atomics.wake, который в своё время был переименован в Atomics.notify для соответствия спецификации ECMA-262. Открыт код инструментария fuzzing-тестирования JS-Fuzzer.
  • В задействованном в прошлом выпуске начальном (baseline) компиляторе Liftoff для WebAssembly включена возможность использования векторных инструкций SIMD для ускорения вычислений. Судя по тестам, оптимизация позволила ускорить прохождения некоторых тестов в 2.8 раз. Другая оптимизация позволила значительно ускорить вызов из WebAssembly импортированных функций JavaScript.
  • Расширены инструменты для web-разработчиков: В панель Media добавлены сведения о проигрывателях, применяемых для воспроизведения видео на странице, включая данные о событиях, логи, значения свойств и параметры декодирования кадров (например, можно определить причины потери кадров и проблем при взаимодействии из JavaScript).

    В контекстном меню панели Elements добавлена возможность создания скриншотов выбранного элемента (например, можно создать скриншот оглавления или таблицы).

    В web-консоли панель с предупреждением о проблемах заменена на обычное сообщение, а проблемы со сторонними Cookie скрыты по умолчанию во вкладке Issues и включаются специальным флажком.

    Во вкладке Rendering добавлена кнопка «Disable local fonts», позволяющая симулировать отсутствие локальных шрифтов, а во вкладке Sensors появилась возможность симулировать неактивность пользователя (для приложений, использующих API Idle Detection).

    В панели Application предоставлена детальная информация о каждом iframe, открытом окне и pop-up-ах, включая данные об изоляции Cross-Origin при помощи COEP и COOP.

  • Началась замена реализации протокола QUIC на вариант, развиваемый в спецификации IETF, вместо Google-варианта QUIC.

Кроме нововведений и исправления ошибок в новой версии устранено 35 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. Одна уязвимость (CVE-2020-15967, обращение к освобождённой области памяти в коде для взаимодействия с Google Payments) помечена как критическая, т.е. позволяет обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 27 премий на сумму 71500 долларов США (одна премия $15000, три премии $7500, пять премий $5000, две $3000, одна $200 и две премии $500). Размер 13 вознаграждений пока не определён.