
Bypass de SOP en WebKit NavigateEvent.canIntercept mediante interceptación entre puertos — iOS 26.3.1 BSI (CVE-2026-20643)
WebKit Navigation API — Omisión de la Política de Mismo Origen mediante interceptación entre puertos (CVE-2026-20643)
| CVE | CVE-2026-20643 |
| Descubierto por | Thomas Espach (WebKit Bugzilla 306050) |
| Componente | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| Afectado | iOS 26.3.1 build 23D8133 (iPhone18,2) |
| Clase | Bypass de SOP |
| Interacción | Clic / activación de enlace |
| Confirmado | Diff binario de WebCore vulnerable vs parcheado |
NavigateEvent.canIntercept devuelve incorrectamente true para navegaciones entre puertos del mismo sitio que difieren en el origen. La puerta de interceptación acepta cualquier destino de la familia HTTP tras una comprobación de mismo sitio sin verificar que el esquema, el host y el puerto coincidan. Esto permite que una página controlada por un atacante intercepte o suprima navegaciones que deberían cruzar el límite de origen.
// 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
La corrección en la rama principal de WebKit añade una igualdad estricta por componente (esquema / usuario / contraseña / host / puerto) antes de permitir la interceptación.
Sirve poc_min.html en el puerto 8000 y ábrelo en un dispositivo afectado:
python3 -m http.server 8000
# http://127.0.0.1:8000/poc_min.html
Haz clic en Run PoC. La página desencadena una navegación entre puertos (:8000 → :8800) e informa:
Vulnerable: canIntercept=true
Patched: canIntercept=false
| Archivo | |
|---|---|
findings.md | Análisis completo de la causa raíz y evidencia de ingeniería inversa |
poc_min.html | PoC de detección autocontenido |