WebKit сливает реальный IP и DNS мимо прокси и iCloud Private Relay
Фото: WebKit project (logo) / LGPL
Утечка IP и DNS в WebKit сводит на нет приватность, ради которой на iOS ставят браузеры с прокси. Исследователи Mysk 4 августа 2026 года показали: три разные функции WebKit открывают соединения напрямую с устройства, игнорируя прокси, который браузеру велели использовать. Те же три пути обходят и Apple iCloud Private Relay.
Речь не об удалённом эксплойте. Странице не нужно ничего ломать: она просто пользуется обычными возможностями веб-платформы и смотрит, откуда приходит трафик.
Три функции, которые обходят прокси
| Функция | Что утекает | Появилась |
|---|---|---|
| DNS prefetch | Реальные DNS-резолверы и запрашиваемое имя хоста | iOS 26.0, сентябрь 2025 |
| WebAuthn related origin requests | Реальный IP-адрес устройства | iOS 18.0, сентябрь 2024 |
| WebTransport | Реальный IP-адрес устройства | iOS 26.4, март 2026 |
DNS prefetch - это оптимизация скорости. Страница подсказывает, что скоро понадобится имя хоста, и движок резолвит его заранее. На iOS это разрешение идёт через обычный DNS-путь устройства, а не через прокси. Сайт может подставить в подсказку уникальное имя для каждого посетителя, а потом читать запросы, приходящие на его собственный авторитативный DNS-сервер прямо из реальной сети посетителя.
WebAuthn related origin requests утекают иначе. WebKit передаёт работу с passkey системному сервису учётных данных, и уже этот сервис сам скачивает у сайта файл /.well-known/webauthn. Запрос уходит от системы, а не от браузера, поэтому настройки прокси в браузере тут вообще не участвуют.
WebTransport из этой тройки самый прямолинейный. Его создание открывает QUIC-соединение напрямую с устройства до адресата, без прокси посередине.
Почему iCloud Private Relay здесь не спасает
Private Relay часто описывают как VPN для Safari. Это не так. Он проксирует трафик страниц Safari через два узла, чтобы ни одна сторона не видела одновременно и кто вы, и что вы запросили. Защита распространяется на обычный путь загрузки страницы, а все три утечки живут вне его. Когда системный сервис учётных данных или QUIC-сокет выходит в сеть сам по себе, Private Relay в этой цепочке отсутствует.
Та же логика объясняет, почему на iPhone проблема острее, чем где-либо ещё. Правила App Store требуют, чтобы любой браузер на iOS использовал WebKit, поэтому браузер с упором на приватность не может подставить другой движок, который направлял бы эти пути правильно. Браузеры на основе Tor для iOS наследуют утечку по построению, как и любое приложение, которое строит анонимность поверх внутреннего прокси.
Что чинится на сегодня
Пока меры принимают разработчики приложений, а не сам движок. Psylo выпустил версию 1.3.1: она вырезает подсказки dns-prefetch со страниц и по умолчанию отключает WebTransport и WebAuthn, оставляя их как переключатели по желанию. Это обход на уровне приложения: каждому затронутому браузеру придётся самому заметить проблему и по одной отключать полезные функции. Публичного заявления Apple нет, объявленных изменений в WebKit, которые закрывали бы все три пути сразу, тоже нет.
Почему системный туннель не затронут
Здесь важно, на каком уровне обеспечивается приватность. Прокси, настроенный внутри браузера, покрывает только тот трафик, который браузер сам решил через него отправить, поэтому всё, что открывает другой компонент системы, проходит мимо. Полноценный туннель работает иначе: его обеспечивает сетевой стек операционной системы, и каждый пакет любого процесса уходит через один и тот же интерфейс - неважно, породила его загрузка страницы, сервис учётных данных или сырой QUIC-сокет. Поэтому полнотуннельные VPN не затронуты всеми тремя утечками, а браузерные прокси затронуты, и это полезное напоминание, что приватность на уровне браузера и приватность на уровне сети решают разные задачи.
Тем, кто сегодня полагается на браузер с прокси, шаги простые, но реальные: обновить приложение, если его разработчик уже выпустил защиту, не считать Private Relay средством анонимности и проверить, что именно раскрывает ваш браузер, вместо того чтобы доверять индикатору в интерфейсе.