
Bypass della SOP di WebKit NavigateEvent.canIntercept tramite intercettazione cross-port — iOS 26.3.1 BSI (CVE-2026-20643)
WebKit Navigation API — bypass della Same-Origin Policy tramite intercettazione cross-port (CVE-2026-20643)
| CVE | CVE-2026-20643 |
| Scoperta da | Thomas Espach (WebKit Bugzilla 306050) |
| Componente | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| Versioni interessate | iOS 26.3.1 build 23D8133 (iPhone18,2) |
| Classe | bypass SOP |
| Interazione | Clic / attivazione del link |
| Conferma | Binary diff tra WebCore vulnerabile e corretto |
NavigateEvent.canIntercept restituisce erroneamente true per navigazioni same-site cross-port la cui origin differisce. Il controllo di intercettazione accetta qualsiasi destinazione della famiglia HTTP dopo un controllo di stesso sito, senza verificare che schema, host e porta corrispondano. Ciò consente a una pagina controllata dall'attaccante di intercettare o sopprimere navigazioni che dovrebbero attraversare un confine di origin.
// 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
Il fix nel mainline di WebKit aggiunge un controllo rigoroso di uguaglianza per ogni componente (schema / utente / password / host / porta) prima di consentire l'intercettazione.
Servi poc_min.html sulla porta 8000 e aprilo su un dispositivo interessato:
python3 -m http.server 8000
# http://127.0.0.1:8000/poc_min.html
Clicca su Run PoC. La pagina attiva una navigazione cross-port (:8000 → :8800) e segnala:
Vulnerable: canIntercept=true
Patched: canIntercept=false
| File | |
|---|---|
findings.md | Analisi completa della causa principale e prove di reverse engineering |
poc_min.html | PoC di rilevamento autonomo |