
WebKit-NavigateEvent.canIntercept-SOP-Bypass durch portübergreifendes Abfangen — iOS 26.3.1 BSI (CVE-2026-20643)
| CVE | CVE-2026-20643 |
| Entdeckt von | Thomas Espach (WebKit Bugzilla 306050) |
| Komponente | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| Betroffen | iOS 26.3.1 Build 23D8133 (iPhone18,2) |
| Klasse | SOP-Bypass |
| Interaktion | Klick / Link-Aktivierung |
| Bestätigt | Binärdiff von verwundbarem vs. gepatchtem WebCore |
NavigateEvent.canIntercept gibt fälschlicherweise true für Same-Site-Navigationen mit unterschiedlichen Ports zurück, die sich im Ursprung unterscheiden. Das Interceptions-Gate akzeptiert nach einer Same-Site-Prüfung jedes Ziel aus der HTTP-Familie, ohne zu verifizieren, dass Schema, Host und Port übereinstimmen. Dadurch kann eine angreiferkontrollierte Seite Navigationen abfangen oder unterdrücken, die eine Origin-Grenze überschreiten sollten.
// 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
Der WebKit-Hauptzweig-Fix fügt vor der Zulassung der Interception einen strikten Komponentenvergleich hinzu (Schema / Benutzer / Passwort / Host / Port).
Stelle poc_min.html auf Port 8000 bereit und öffne es auf einem betroffenen Gerät:
python3 -m http.server 8000
# http://127.0.0.1:8000/poc_min.html
Klicke auf Run PoC. Die Seite löst eine Cross-Port-Navigation aus (:8000 → :8800) und meldet:
Vulnerable: canIntercept=true
Patched: canIntercept=false
| Datei | |
|---|---|
findings.md | Vollständige Root-Cause-Dokumentation und RE-Beweise |
poc_min.html | Eigenständiger Erkennungs-PoC |