
Bypass de SOP do WebKit NavigateEvent.canIntercept via interceptação entre portas — iOS 26.3.1 BSI (CVE-2026-20643)
API de navegação do WebKit — bypass da Same-Origin Policy via interceptação entre portas (CVE-2026-20643)
| CVE | CVE-2026-20643 |
| Descoberto por | Thomas Espach (WebKit Bugzilla 306050) |
| Componente | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| Afetado | iOS 26.3.1 build 23D8133 (iPhone18,2) |
| Classe | SOP bypass |
| Interação | Clique / ativação de link |
| Confirmado | Diff binário do WebCore vulnerável vs corrigido |
NavigateEvent.canIntercept retorna incorretamente true para navegações same-site entre portas que diferem em origem. O ponto de interceptação aceita qualquer destino da família HTTP após uma verificação de same-site sem verificar se scheme, host e porta correspondem. Isso permite que uma página controlada pelo atacante intercepte ou suprima navegações que deveriam cruzar a fronteira de origem.
// 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
A correção no mainline do WebKit adiciona igualdade estrita por componente (scheme / usuário / senha / host / porta) antes de permitir a interceptação.
Sirva poc_min.html na porta 8000 e abra-o em um dispositivo afetado:
python3 -m http.server 8000
# http://127.0.0.1:8000/poc_min.html
Clique em Executar PoC. A página aciona uma navegação entre portas (:8000 → :8800) e relata:
Vulnerable: canIntercept=true
Patched: canIntercept=false
| Arquivo | |
|---|---|
findings.md | Explicação completa da causa raiz e evidência de RE |
poc_min.html | PoC de detecção autocontido |