
Contournement de la SOP de NavigateEvent.canIntercept de WebKit via interception inter-ports — iOS 26.3.1 BSI (CVE-2026-20643)
| CVE | CVE-2026-20643 |
| Découvert par | Thomas Espach (WebKit Bugzilla 306050) |
| Composant | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| Affecté | iOS 26.3.1 build 23D8133 (iPhone18,2) |
| Classe | Contournement SOP |
| Interaction | Clic / activation de lien |
| Confirmé | Différence binaire entre WebCore vulnérable et corrigé |
NavigateEvent.canIntercept renvoie incorrectement true pour les navigations inter-ports de même site qui diffèrent par leur origine. Le contrôle d'interception accepte toute cible de la famille HTTP après un contrôle de même site, sans vérifier que le schéma, l'hôte et le port correspondent tous. Cela permet à une page contrôlée par l'attaquant d'intercepter ou de supprimer des navigations qui devraient franchir une frontière d'origine.
// 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
Le correctif principal de WebKit ajoute une vérification stricte d'égalité par composant (schéma / utilisateur / mot de passe / hôte / port) avant d'autoriser l'interception.
Servez poc_min.html sur le port 8000 et ouvrez-le sur un appareil affecté :
python3 -m http.server 8000
# http://127.0.0.1:8000/poc_min.html
Cliquez sur Run PoC. La page déclenche une navigation inter-ports (:8000 → :8800) et rapporte :
Vulnerable: canIntercept=true
Patched: canIntercept=false
| Fichier | |
|---|---|
findings.md | Analyse complète de la cause racine et preuves de rétro-ingénierie |
poc_min.html | PoC de détection autonome |