
Обход SOP в WebKit NavigateEvent.canIntercept через межпортовый перехват — iOS 26.3.1 BSI (CVE-2026-20643)
| CVE | CVE-2026-20643 |
| Обнаружено | Thomas Espach (WebKit Bugzilla 306050) |
| Компонент | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| Затронуто | iOS 26.3.1 build 23D8133 (iPhone18,2) |
| Класс | Обход SOP |
| Взаимодействие | Клик / активация ссылки |
| Подтверждено | Бинарное сравнение уязвимого и исправленного WebCore |
NavigateEvent.canIntercept ошибочно возвращает true для навигаций между портами на одном сайте, которые различаются по источнику. Шлюз перехвата принимает любую цель из HTTP-семейства после проверки same-site, не проверяя, совпадают ли схема, хост и порт. Это позволяет странице, контролируемой атакующим, перехватывать или подавлять навигации, которые должны пересекать границу источника.
// WebCore::Navigation::innerDispatchNavigateEvent — 0x1a1303304 (iOS 26.3.1 / 23D8133)
if (!isSameSite && !isSameOrigin)
return false;
if (targetURL.protocolIsInHTTPFamily())
return true; // ← no port/host/scheme component equality check
// cross-port navigations (e.g. :8000 → :8800) slip through
Исправление в основной ветке WebKit добавляет строгую проверку равенства по каждому компоненту (схема / пользователь / пароль / хост / порт) перед разрешением перехвата.
Разместите poc_min.html на порту 8000 и откройте его на затронутом устройстве:
python3 -m http.server 8000
# http://127.0.0.1:8000/poc_min.html
Нажмите Run PoC. Страница запускает навигацию между портами (:8000 → :8800) и сообщает:
Vulnerable: canIntercept=true
Patched: canIntercept=false
| Файл | |
|---|---|
findings.md | Полное описание корневой причины и результаты реверс-инжиниринга |
poc_min.html | Автономный PoC для обнаружения уязвимости |