Chrome на Android сломал чужие MitM-сертификаты, но это можно исправить

Прозрачность сертификатов (CT) — отличный проект компании Google, который сейчас фактически стал стандартом де-факто в интернете. Серверы CT показывают все выпущенные EV-сертификаты в открытых и общедоступных источниках.
Всё работает отлично до тех пор, пока не сломается.
В частности, в последнее время браузер Chrome создал ряд проблем под Android, фактически заблокировав работу сторонних приложений, таких как снифферы, MitM-прокси и средства разработки. Эти программы устанавливают в систему собственные доверенные сертификаты для перехвата и разбора трафика.
Первые признаки проблемы появились в мае 2022 года. Примерно в этом время в документации Chrome Enterprise v99 под Android возникло следующее примечание о прозрачности сертификатов:

Написано, что CT уже действует на десктопах, а сейчас распространится на всех пользователей Android Chrome.
Проблема в том, что после таких изменений у нас перестанут работать многие полезные инструменты, в том числе на рутованных устройствах.

После внедрения CT все эти инструменты при попытки проанализировать HTTPS-трафик или совершить другое действие от имени своего корневого сертификата получат одинаковую ошибку: «Требуется прозрачность сертификата» (на скриншоте).
ERR_CERTIFICATE_TRANSPARENCY_REQUIRED
Что такое Certificate Transparency (CT)
Certificate Transparency (RFC 6962, а недавно принята вторая версия RFC 9162) — стандарт безопасности для мониторинга цифровых сертификатов в интернете. Он работает через систему публичных журналов, куда в конечном итоге попадают все сертификаты, выданные центрами сертификации.
Однако в публичный лог не попадёт ваш личный самоподписанный сертификат, который вы сделали для использования на своём собственном смартфоне. В этом и проблема.
Модель угрозы
Понятно, от какой угрозы CT защищает пользователей.
Различные злоумышленники пытаются установить в систему доверенные сертификаты своих собственных центров сертификации. Так пытаются сделать некоторые VPN-сервисы, китайские зловреды, национальные провайдеры и др. В этом случае система глобального доверия может оказаться подорвана, потому что MiTM-актор с корневым сертификатом сможет читать и подменять любую информацию в канале HTTPS, то есть к любому защищённому сайту, включая Google, Gmail и др.
Жертва такой атаки будет нормально подключаться к настоящим сайтам. В то же время трафик можно прослушать третьему лицу. Браузер не заметит подделки и будет сигнализировать «замочком» HTTPS, что всё нормально. Это очень опасно. Отдельные люди годами сидят на такой «прослушке» и ничего не замечают.
Поэтому прозрачность сертификатов введена неспроста. Общий прозрачный лог сертификатов в виде глобального дерева Меркла хранит все документы от каждого глобального центра сертификации, с метками времени (SCT), а браузеры проверяют эти SCT. Данные метки служат определённым доказательством, что сертификат предъявлен общественности и внесён в открытую базу. Ну и любой желающий всегда может посмотреть эту базу и проверить SCT.
Но бывают исключительные ситуации, когда установка MiTM-прокси реально необходима. Например, для дебаггинга трафика при разработке мобильных и веб-приложений, для реверс-инжиниринга, пентестинга. Есть целый класс инструментов, таких как mitmproxy и HTTP Toolkit специально для подобных целей. Они в процессе работы выдают поддельные сертификаты для серверов, к которым подключается клиент (с разрешения клиента, то есть браузера). Работа таких инструментов теперь затруднена, потому что браузер больше не даёт разрешения.
От «принудительной защиты» со стороны Chrome пострадают в первую очередь профессиональные разработчики, тестеры, специалисты по безопасности, исследователи.
Хранилища сертификатов
На устройстве Android в реальности установлено несколько разных хранилищ сертификатов (CA):
- /system/etc/security/cacerts/
- /data/misc/user/0/cacerts-added/
- CA отдельного приложения
Но с версии Android Chrome 99 браузер начинает проверять метки SCT для всех сертификатов, которые выдаёт ваш MitM-прокси, на каждой страничке выбрасывая ошибки NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED .
Как исправить
В Chromium это не признали багом (статус WontFix ), поэтому решать проблему придётся самостоятельно.

Разработчики HTTP Toolkit поясняют, что нам просто нужно запустить Chrome с флагом —ignore-certificate-errors-spki-list=$YOUR_SPKI_FINGERPRINT . Они предлагают такой обходной путь (на рутованном смартфоне):
-
Сделайте отпечаток SPKI своего сертификата:
openssl x509 -in $YOUR_CA_CERTIFICATE -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
- /data/local/chrome-command-line
- /data/local/android-webview-command-line
- /data/local/webview-command-line
- /data/local/content-shell-command-line
- /data/local/tmp/chrome-command-line
- /data/local/tmp/android-webview-command-line
- /data/local/tmp/webview-command-line
- /data/local/tmp/content-shell-command-line
На этом проблема решена.

- Android Chrome
- Certificate Transparency
- MitM
- мониторинг сертификатов
- CT
- mitmproxy
- Chromium
Для Google Chrome вышло экстренное обновление с устранением опасной уязвимости
Американская корпорация Google выпустила экстренное обновление для браузера Chrome, которое исправляет опасную уязвимость. В компании рекомендуют как можно скорее обновить браузер.
Выйти из полноэкранного режима

Развернуть на весь экран
Фото: Анатолий Жданов, Коммерсантъ
В патче семь исправлений безопасности, однако самой опасной из уязвимостей является CVE-2023-6345, связанная с целочисленным переполнением в графической библиотеке Skia 2D,— она используется в Android, Chrome, Chrome OS, Flutter и другом ПО.
В Google заявили, что эксплойт уже известен хакерам и используется. Браузер Google Chrome обновляется автоматически, после чего предлагает пользователю перезапустить приложение, однако в Google советуют не ждать автоматического обновления и обновиться через настройки. В 2023 году это уже шестая уязвимость нулевого дня, которую в экстренном порядке закрывают в Google Chrome.
Скачайте Chrome для Windows
Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.
Для Windows 8.1/8/7 32-bit.
Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.
Для Windows 8.1/8/7 64-bit.
Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.
Скачайте Chrome для macOS
Для macOS 10.15 и более поздних версий
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Для macOS 10.13/10.14
Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.
Скачайте Chrome для Linux
Выберите пакет для скачивания:
DEB (64-разрядная версия для Debian/Ubuntu)
RPM (64-разрядная версия для Fedora/openSUSE)
Not Debian/Ubuntu or Fedora/openSUSE? There may be a community-supported version for your distribution here.
Скачайте Chrome для iOS
Get Chrome for chromeOS
Get Chrome for android
Установить Google Chrome в качестве браузера по умолчанию
Разрешить автоматическую отправку статистики использования и отчетов о сбоях, чтобы помочь улучшить Google Chrome. Подробнее…
Примечание. Чтобы система могла автоматически обновлять браузер, при установке Google Chrome также будет добавлено хранилище Google. Если вам не нужна эта функция, перед установкой пакета выполните команду sudo touch /etc/default/google-chrome.
Принять условия и установить
Принять условия и установить
Принять условия и установить
Скачать Chrome
Скачать для смартфона или планшета
Скачать для другой платформы
- Windows 11/10 64-bit
- Windows 10 32-bit
- macOS 10.15 и более поздние версии
- Linux
- Windows XP
- Windows Vista
- Windows 8.1/8/7 32-bit
- Windows 8.1/8/7 64-bit
- Mac 10.6 — 10.8
- Mac 10.9
- Mac 10.10
- Mac 10.11 — 10.12
- Mac 10.13 — 10.14
Похоже, вы уже используете браузер Chrome. Отлично!
На вашем устройстве установлена операционная система ChromeOS со встроенным браузером Chrome. Это означает, что вам не нужно устанавливать или обновлять его вручную. Подробнее об автоматических обновлениях…
Везде как дома с Chrome

Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.
Для Windows 8.1/8/7 32-bit.
Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.
Для Windows 8.1/8/7 64-bit.
Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.
Для macOS 10.15 и более поздних версий
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Google Chrome больше не будет обновляться на этом компьютере, так как поддержка macOS 10.6 – 10.12 прекращена.
Для macOS 10.13/10.14
Это устройство не будет получать обновления, так как Google Chrome не поддерживает установленную на нем операционную систему.