Состоялся релиз web-браузера Firefox 74, а также мобильной версии Firefox 68.6 для платформы Android. Кроме того, сформировано обновление ветки с длительным сроком поддержки 68.6.0. В ближайшее время на стадию бета-тестирования перейдёт ветка Firefox 75, релиз которой намечен на 7 апреля (проект перешёл на 4-5-недельный цикл разработки). Для бета-ветки Firefox 75 началось формирование сборок для Linux в формате Flatpak.

Основные новшества:

  • В сборках для Linux задействован механизм изоляции RLBox, нацеленный на блокирование эксплуатации уязвимостей в сторонних библиотеках функций. На данном этапе изоляция включена только для библиотеки Graphite, отвечающей за отрисовку шрифтов. RLBox выполняет компиляцию C/C++ кода изолируемой библиотеки в низкоуровневый промежуточный код WebAssembly, который затем оформляется в виде WebAssembly-модуля, полномочия которого задаются в привязке только к этому модулю. Собранный модуль работает в отдельной области памяти и не имеет доступа к остальному адресному пространству. В случае эксплуатации уязвимости в библиотеке атакующий будет ограничен и не сможет обратиться к областям памяти основного процесса или передать управление вне изолированного окружения.
  • Режим DNS поверх HTTPS (DoH, DNS over HTTPS) включён по умолчанию для пользователей из США. В качестве DNS-провайдера по умолчанию предлагается CloudFlare (mozilla.cloudflare-dns.com занесён в списки блокировки Роскомнадзора), а в качестве опции доступен NextDNS. Изменить провайдера или включить DoH в странах, отличных от США, можно в настройках сетевого соединения. Подробнее о DoH в Firefox можно прочитать в отдельном анонсе.

  • Отключена поддержка протоколов TLS 1.0 и TLS 1.1. Для обращения к сайтам по защищённому каналу связи сервер должен предоставить поддержку как минимум TLS 1.2. По данным Google в настоящее время около 0.5% загрузок web-страниц продолжает осуществляться с использованием устаревших версий TLS. Отключение произведено в соответствии с рекомендациями IETF (Internet Engineering Task Force). Причиной отказа от поддержки TLS 1.0/1.1 является отсутствие поддержки современных шифров (например ECDHE и AEAD) и требование поддержки старых шифров, надёжность которых на современном этапе развития вычислительной техники поставлена под сомнение (например, требуется поддержка TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, для проверки целостности и аутентификации используется MD5 и SHA-1). При попытке использования TLS 1.0 и TLS 1.1 начиная с Firefox 74 будет выводиться ошибка. Вернуть возможность работы с устаревшими версиями TLS можно через настройку security.tls.version.enable-deprecated = true или при помощи кнопки на странице с ошибкой, выводимой при заходе на сайт со старым протоколом.

  • В примечании к выпуску рекомендовано дополнение Facebook Container, которое автоматически блокирует размещаемые на сторонних сайтах виджеты Facebook, применяемые для аутентификации, отправки комментариев и лайков. Параметры идентификации Facebook изолируются в отдельном контейнере, затрудняя отождествление пользователя с посещаемыми сайтами. Возможность работы с основным сайтом Facebook сохраняется, но производится его изоляция от остальных сайтов.

    Для более гибкой изоляции произвольных сайтов предлагается дополнение Multi-Account Containers с реализацией концепции контекстных контейнеров. Контейнеры предоставляют возможность изоляции различных типов контента без создания отдельных профилей, что позволяет отделить между собой информацию отдельных групп страниц. Например, можно создать отдельные, изолированные друг от друга, области для персонального общения, работы, покупок и банковских операций или организовать одновременное использование разных аккаунтов пользователя на одном сайте. В каждом контейнере используются отдельные хранилища для Cookies, Local Storage API, indexedDB, кэша и содержимого OriginAttributes.

  • В about:config добавлена настройка «browser.tabs.allowTabDetach», позволяющая запретить отсоединение вкладок в новые окна. Случайное отсоединение вкладки является одной из самых раздражающих недоработок Firefox, устранения которой добивались 9 лет. Браузер позволяет мышью перетащить вкладку в новое окно, но при определённом стечении обстоятельств вкладка отсоединяется в отдельное окно и в процессе работы при неосторожном движении мыши во время клика на вкладку.
  • Прекращена поддержки дополнений, устанавливаемых обходным путём и не привязанных к пользовательским профилям. Изменение касается только установки дополнений в общие каталоги (/usr/lib/mozilla/extensions/, /usr/share/mozilla/extensions/ или ~/.mozilla/extensions/), обрабатываемые всеми экземплярами Firefox в системе (без привязки к пользователю). Подобный метод обычно применяется для предустановки дополнений в дистрибутивах, для непрошенной подстановки вместе со сторонними приложениями, для интеграции вредоносных дополнений или для обособленной поставки дополнения со своим инсталлятором. В Firefox 73 ранее принудительно установленные дополнения были автоматически перенесены из общего каталога в индивидуальные профили пользователей и теперь могут быть удалены через штатный менеджер дополнений.
  • Во входящем в состав браузера системном дополнении Lockwise, предлагающем интерфейс «about:logins» для управления сохранёнными паролями, появилась поддержка сортировки в обратном порядке (от Z к A).
  • В WebRTC повышена защита от утечки сведений о внутреннем IP-адресе во время голосовых и видеовызовов при помощи механизма «mDNS ICE», скрывающем локальный адрес за динамически генерируемым случайным идентификатором, определяемым через Multicast DNS.
  • Изменено расположение переключателя режима просмотра «картинка в картинке», который перекрывал кнопку перехода к следующему изображению в интерфейсе пакетной загрузки фотографий в Instagram.

  • В JavaScript добавлен оператор «?.», предназначенный для единовременной проверки всей цепочки свойств или вызовов. Например, указав «db?.user?.name?.length» теперь можно обратиться к значению «db.user.name.length» без предварительных проверок. Если какой-то элемент обработан как null или undefined на выходе будет выдано значение «undefined».
  • Прекращена поддержка на сайтах и в дополнениях метода Object.toSource() и глобальной функции uneval().
  • Добавлено новое событие languagechange_even и связанное с ним свойство onlanguagechange, которые позволяют вызвать обработчик при смене пользователем языка интерфейса.
  • Включена обработка HTTP-заголовка Cross-Origin-Resource-Policy (CORP), позволяющего сайтам запретить вставку ресурсов (например, изображений и скриптов), загружаемых с других доменов (cross-origin и cross-site). Заголовок может принимать два значения: «same-origin» (разрешает только запросы ресурсов с той же схемой, именем хоста и номером порта) и «same-site» (разрешает только запросы с того же сайта).

    Cross-Origin-Resource-Policy: same-site

  • Включён по умолчанию HTTP-заголовок Feature-Policy, позволяющий управлять поведением API и включением определённых возможностей (например, можно отключить доступ к Geolocation API, камере, микрофону, переходу на полный экран, автовоспроизведению, encrypted-media, анимации, Payment API, синхронному режиму работы XMLHttpRequest и т.п.). Для блоков iframe отдельно предложен атрибут «allow», который может применяться в коде страницы для назначения прав для определённых блоков iframe.

    <iframe src=»https://example.com» allow=»fullscreen»></iframe>

    Feature-Policy: microphone ‘none’; geolocation ‘none’

    В случае разрешения сайтом через атрибут «allow» работы с ресурсом для определённого iframe, и поступлении запроса из iframe на получения полномочий для работы с этим ресурсом, браузер теперь выводит диалог предоставления полномочий в контексте основной страницы и делегирует подтверждённые пользователем права в iframe (вместо отдельного подтверждения для iframe и основной страницы). Но, если основная страница не имеет полномочий на ресурс, запрошенный через атрибут allow, доступ для iframe к ресурсу сразу блокируется, без вывода диалога пользователю.

  • Включена по умолчанию поддержка CSS-свойства ‘text-underline-position’, определяющее позицию подчёркивания текста (например, при вертикальном отображении текста можно организовать подчёркивание слева или справа, а при горизонтальном не только снизу, но и сверху). Дополнительно в управляющих стилем подчёркивания CSS-свойствах text-underline-offset и text-decoration-thickness добавлена поддержка использования значений в процентах.
  • В CSS-свойстве outline-style, определяющем стиль линии вокруг элементов, по умолчанию разрешено использование значения «auto» (ранее было отключено из-за проблем в GNOME).
  • В отладчик JavaScript добавлена возможность отладки вложенных Web Worker-ов, выполнение которых может быть приостановлено и пошагово отлажено с применением точек останова.

  • В интерфейсе для инспектирования web-страниц обеспечено отображение предупреждений для CSS-свойств, зависящих от позиционируемых элементов z-index, top, left, bottom и right.

  • Для Windows и macOS реализована возможность импорта профилей из браузера Microsoft Edge на базе движка Chromium.

Кроме новшеств и исправления ошибок в Firefox 74 устранено 20 уязвимостей, из которых 10 (собраны под CVE-2020-6814 и CVE-2020-6815) помечены как потенциально способные привести к выполнению кода злоумышленника при открытии специально оформленных страниц. Напомним, что проблемы с памятью, такие как переполнения буферов и обращение к уже освобождённым областям памяти, с недавних пор помечаются как опасные, но не критические.