
تجاوز سياسة SOP في WebKit NavigateEvent.canIntercept عبر الاعتراض بين المنافذ — iOS 26.3.1 BSI (CVE-2026-20643)
| CVE | CVE-2026-20643 |
| اكتُشف بواسطة | Thomas Espach (WebKit Bugzilla 306050) |
| المكوّن | WebKit — WebCore::Navigation::innerDispatchNavigateEvent |
| المتأثر | iOS 26.3.1 build 23D8133 (iPhone18,2) |
| التصنيف | تجاوز سياسة نفس الأصل |
| التفاعل | نقرة / تفعيل رابط |
| مؤكَّد | مقارنة ثنائية بين نسخة WebCore المصابة والنسخة المُصححة |
تُرجع NavigateEvent.canIntercept القيمة true بشكل غير صحيح لعمليات التنقل عبر المنافذ على نفس الموقع التي تختلف في الأصل. بوابة الاعتراض تقبل أي هدف من عائلة 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 | شرح كامل للسبب الجذري وأدلة الهندسة العكسية |
poc_min.html | إثبات مفهوم كشف مستقل بذاته |