
크로스 포트 인터셉션을 통한 WebKit NavigateEvent.canIntercept SOP 우회 — iOS 26.3.1 BSI (CVE-2026-20643)
WebKit Navigation 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와 패치된 WebCore의 바이너리 diff |
NavigateEvent.canIntercept는 출처가 다른 동일 사이트(same-site)의 교차 포트(cross-port) 내비게이션에 대해 잘못 true를 반환합니다. 가로채기(interception) 게이트는 동일 사이트 확인 후 scheme, host 및 port가 모두 일치하는지 검증하지 않고 모든 HTTP 계열 대상을 허용합니다. 이로 인해 공격자가 제어하는 페이지가 출처 경계를 넘어야 하는 내비게이션을 가로채거나 억제할 수 있습니다.
// 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 메인라인 수정은 가로채기를 허용하기 전에 구성 요소별 엄격한 동등성 검사(스킴 / 사용자 / 비밀번호 / 호스트 / 포트)를 추가합니다.
poc_min.html을 포트 8000에서 서빙한 후 영향을 받는 기기에서 엽니다:
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 | 근본 원인에 대한 전체 문서 및 RE 증거 |
poc_min.html | 자체 포함형 탐지 PoC |