
مستودع بحث منظم لثغرة CWE-20 في Chrome Dawn WebGPU: السبب الجذري، وdiff التصحيح، والتحقق الثابت، ومراجعة الخطورة، والدروس الأمنية.
هذا هو مستودع مشروع العمل. يغطي التحقيق والتحليل والعمل والتقارير في مستودع واحد (D088/D091).
هذا الملف هو وثيقة الدخول إلى المستودع/اللوحة. للاطلاع على النص الكامل لاتفاقيات المجلدات والمخرجات، راجع
docs/conventions.md. يتم تحديث النص الرئيسي (الحالة · الاستنتاجات · الروابط) عند ترقية عنصر التقرير (report). لا يقوم وكلاء التحقيق والتحليل والعمل بتعديل README الجذرية.
ملخص في سطر واحد: Dawn، تطبيق WebGPU في Google Chrome، لم يتحقق من قيود المعاملات التي تتطلبها مواصفة Vulkan عند إنشاء sampler YCbCr، مما سمح لمهاجم سيطر بالفعل على عملية العارض (renderer) بتمرير قيم مخالفة للمواصفة إلى عملية GPU (CWE-20). وُضع الإصلاح في طبقتين: تحقق إضافي وفرض في الواجهة الخلفية، وطُبّق في Chrome 150.0.7871.47.
توجد الوثائق التعليمية التفصيلية في docs/cve-2026-13934/ — كُتبت بحيث يمكن متابعة السبب والإصلاح والإثبات والدروس دون إعادة إنتاج.
الهدف: CVE-2026-13934 — Google Chrome / Dawn (تطبيق WebGPU)، نوع الثغرة CWE-20 (التحقق غير السليم من الإدخال). نُشر CVE في 2026-06-30، والإصدار المُصحَّح 150.0.7871.47. الأساس: research/20260804-cve-2026-13934-6bacf7/sources.md §1·§2.
مراحل التقدم — تمت المتابعة عبر أربعة خطوط: التحقيق (المعلومات العامة) · التحقيق (التصحيح والفرق) · التحليل (إعادة الإنتاج والإثبات) · التقرير (التلخيص التعليمي)، واكتملت جميع الخطوط الأربعة.
| الخط | الحالة | ما تم إحرازه |
|---|---|---|
التحقيق في المعلومات العامة ونطاق التأثير (research/…-6bacf7/) | مكتمل (4 مستندات) | بيانات CVE وNVD وإشعار البائع الوصفية، CWE وCVSS، حدود الإصدارات المتأثرة، أحكام معايير القرار |
مقارنة التصحيح والفرق (research/…-diff-92f928/) | مكتمل (4 مستندات) | تحديد commit الإصلاح، معايير مقارنة من 3 مستويات، دلتا الملفات والمنطق المعدَّلة، حكم مخاطر الالتفاف والمخاطر المتبقية |
إعادة الإنتاج والإثبات (cases/…-4d10a8/) | مكتمل (6 مستندات) — تم إجراء المقارنة الثابتة، لم تُلاحَظ على مستوى التنفيذ | بنية السبب، جدوى التنفيذ والقيود، قيم الملاحظة من المقارنة الثابتة للنسختين |
التقرير التعليمي (reports/…-8400bc/) | مكتمل (4 مستندات) | فهرس المحتويات وخريطة الاستشهادات، مسودة README الجذرية، قائمة مستندات docs/ |
ما تم تأكيده
150.0.7871.47 وcommit الإصلاح (Dawn 43055cbe…)، والملفات الثلاثة المعدَّلة وأسباب التغيير.cases/20260804-cve-2026-13934-4d10a8/report.md §3).ما لم يتم تأكيده بعد (لم نملأه بالتخمين)
VkSampler المُنشأة، وتقارير VUID من طبقة التحقق في Vulkan هي قيم متوقعة بناءً على أساس برمجي (cases/…-4d10a8/report.md §4).150.0.7871.46·.47·.63 تثبّت جميعها نفس نسخة Dawn، لكن CVE يُكتب "prior to .47". لم نتمكن من التحقق من أساس هذا الترميز.src الخاص بـ Chromium.513006636 التي تحتوي على السبب في حالة تقييد الوصول.الخطورة — تختلف باختلاف المصدر. التقييم الذاتي للبائع (Chromium) هو Medium، بينما CVSS v3.1 من CISA-ADP هو 9.6 CRITICAL (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H)، ولا يوجد تقييم ذاتي من NVD. نُدرجهما معًا دون الحكم على أيٍّ منهما — التفسير موجود في docs/cve-2026-13934/overview.md.
لا توجد خدمات منشورة (API أو واجهات خلفية أو قواعد بيانات وما إلى ذلك) في هذا المستودع. جميع المخرجات مستندات.
تتطلب مواصفة Vulkan بالنسبة إلى samplers ذات تحويل YCbCr أن تكون أوضاع العنونة على جميع المحاور CLAMP_TO_EDGE وأن يكون الترشيح متباين الخواص (anisotropy) معطَّلاً (VUID-VkSamplerCreateInfo-addressModeU-01646). لم يفحص Dawn قبل التصحيح هذا القيد، وبالتالي تمكنت معاملات مخالفة للمواصفة من اجتياز التحقق والوصول إلى إنشاء VkSampler.
الأمر الحاسم هو نموذج التهديد. يفترض الوصف العام مهاجمًا سيطر بالفعل على عملية العارض (renderer) ("a remote attacker who had compromised the renderer process"). من هذا الموقع، يمكن التلاعب المباشر بأوامر التواصل بين العمليات بدلًا من مسار واجهة برمجة تطبيقات الويب العادية، لذا فإن تحقق جانب العارض يقع خارج حدود الثقة. وتعمل الواجهة الخلفية Vulkan الخاصة بـ Dawn في عملية GPU ذات صلاحيات أعلى من العارض — ولهذا تشكّل هذه الثغرة سطحًا للهروب من صندوق الحماية.
الأساس: cases/20260804-cve-2026-13934-4d10a8/root_cause.md §2 · التفاصيل: docs/cve-2026-13934/root-cause-and-fix.md
commit الإصلاح هو Dawn 43055cbeadddca41a9c973a809f859d641077b2f ("Add YCbCr sampler validation", 2026-05-27, Bug: 513006636) ويغيّر ثلاثة ملفات.
| التغيير | الملف | الطبيعة |
|---|---|---|
إضافة 4 فحوصات لوضع العنونة وmaxAnisotropy إلى واصفات YCbCr | src/dawn/native/Sampler.cpp | تحقق في الواجهة الأمامية — رفض الطلبات المخالفة |
| فرض قيم مطابقة للمواصفة لوضع العنونة وanisotropy في المسارات ذات تحويل YCbCr | src/dawn/native/vulkan/SamplerVk.cpp | فرض في الواجهة الخلفية — عدم إنشاء حالة مخالفة مهما كان الإدخال |
إضافة اختبار الانحدار YCbCrSamplerRequiredParams | src/dawn/tests/unittests/validation/YCbCrValidationTests.cpp | منع تكرار الثغرة |
هذا الهيكل هو جوهر هذا CVE. بما أن العارض مُخترَق بالفعل، فإن التحقق وحده غير كافٍ، والطبقة الثانية التي تفرض القيم من الجانب الأعلى صلاحيات هي خط الدفاع الفعلي. إذا لُخّص الأمر بأنه "نقص التحقق من الإدخال فأُضيف التحقق"، فسيُفوَّت جوهر تصميم الدفاع.
حجم التغيير هو 53 سطرًا مضافًا، 0 سطرًا محذوفًا — وهو تصحيح يملأ الفحوصات المفقودة دون تعديل المنطق الحالي.
الأساس: research/20260804-cve-2026-13934-diff-92f928/report.md §3·§4 · cases/20260804-cve-2026-13934-4d10a8/patch_diff.md §4
قمنا بمقارنة مصادر لقطتي Dawn اللتين ثبّتهما Chrome فعليًا.
| عنصر الملاحظة | جانب الثغرة 54b4153c… | جانب الإصلاح 01249a97… | مستوى التأكد |
|---|---|---|---|
عدد DAWN_INVALID_IF في كتلة تحقق YCbCr | 2 (بوابة الميزة + تنسيق غير محدد) | 6 | قياس فعلي |
| فرض القيم المطابقة للمواصفة في الواجهة الخلفية Vulkan | غير موجود (حتى ربط pNext) | موجود | قياس فعلي |
اختبار الانحدار YCbCrSamplerRequiredParams | غير موجود (TEST_F 23) | موجود (24) | قياس فعلي |
| خطأ device عند طلب مخالف | لا يحدث | يحدث | متوقع (أساس برمجي) |
ما الذي اتضح هنا: كان لدى جانب الثغرة بالفعل فرع YCbCr وفحصان. لم يكن الخلل نقصًا في المسار، بل نقصًا في فحص القيود الشرطية داخل الفرع.