zeroxjf/WebKit-NavigationAPI-SOP-Bypass
GitHub: zeroxjf/WebKit-NavigationAPI-SOP-Bypass
WebKit Navigation API同源策略绕过漏洞(CVE-2026-20643)的PoC,展示NavigateEvent.canIntercept在跨端口场景下错误返回true的安全缺陷。
Stars: 0 | Forks: 0
# WebKit-NavigationAPI-SOP-Bypass
**WebKit Navigation API — 通过跨端口拦截绕过同源策略 (CVE-2026-20643)**
| | |
|---|---|
| **CVE** | CVE-2026-20643 |
| **发现者** | Thomas Espach ([WebKit Bugzilla 306050](https://bugs.webkit.org/show_bug.cgi?id=306050)) |
| **组件** | WebKit — `WebCore::Navigation::innerDispatchNavigateEvent` |
| **受影响版本** | iOS 26.3.1 build `23D8133` (`iPhone18,2`) |
| **类别** | SOP bypass |
| **交互方式** | 点击 / 链接激活 |
| **确认方式** | 易受攻击版本与已修补版本 WebCore 的二进制差异 |
## 摘要
`NavigateEvent.canIntercept` 对于同站但跨端口(源不同)的导航错误地返回 `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 主线修复在允许拦截之前添加了严格的逐组件相等性检查(scheme / user / password / host / **port**)。
## PoC
在端口 `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`](findings.md) | 完整的根本原因说明和逆向工程证据 |
| [`poc_min.html`](poc_min.html) | 自包含的检测 PoC |
标签:CVE-2026-20643, Go语言工具, iOS安全, NavigateEvent, PoC, SOP绕过, WebCore, WebKit漏洞, Web安全, 中间人攻击, 二进制分析, 云安全运维, 信息泄露, 同源策略, 后端开发, 多模态安全, 暴力破解, 浏览器漏洞, 目录枚举, 移动安全, 编程工具, 蓝队分析, 跨端口攻击, 远程代码执行