WebKit 导航 API — 通过跨端口拦截绕过同源策略(CVE-2026-20643)
| CVE | CVE-2026-20643 |
| 发现者 | Thomas Espach (WebKit Bugzilla 306050) |
| 组件 | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| 受影响版本 | iOS 26.3.1 build 23D8133 (iPhone18,2) |
| 类型 | SOP 绕过 |
| 交互方式 | 点击 / 链接激活 |
| 确认方式 | 对存在漏洞与已修补的 WebCore 进行二进制差异分析 |
NavigateEvent.canIntercept 错误地对同站、跨端口且源(origin)不同的导航返回 true。拦截门控在同站检查后接受任何 HTTP 系列目标,却不验证协议(scheme)、主机(host)和 端口(port) 是否全部匹配。这使攻击者控制的页面能够拦截或抑制本应跨越源边界的导航。
// 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
WebKit 主线修复在允许拦截之前增加了严格的逐组件相等性检查(协议 / 用户 / 密码 / 主机 / 端口)。
在端口 8000 上提供 poc_min.html 服务,并在受影响设备上打开:
python3 -m http.server 8000
# http://127.0.0.1:8000/poc_min.html
点击 Run PoC。页面会触发一次跨端口导航(:8000 → :8800)并报告:
Vulnerable: canIntercept=true
Patched: canIntercept=false
| 文件 | |
|---|---|
findings.md | 完整的根因分析和逆向工程证据 |
poc_min.html | 独立的检测 PoC |