
PoC تكشف عن ثغرة حرجة في IndexedDB تمكّن من هجوم disk flooding من خلال استغلال غياب القيود.

IFA هو إثبات فكرة (PoC) يوضح كيف يمكن للمهاجم استغلال واجهة برمجة تطبيقات IndexedDB في متصفحات الويب الشائعة لتنفيذ هجوم إغراق القرص. يستغل هذا الهجوم تحديدًا عدم وجود قيود في IndexedDB، مما يسمح للمتصفح بتخزين البيانات دون حدود فعالة، مما يمكن أن يستهلك بسرعة مساحة قرص المستخدم عن طريق حقن مئات الميغابايت في الثانية. يمكن أن يؤدي ذلك إلى تدهور كبير في أداء النظام، واستنزاف التخزين، وفي الحالات القصوى، انهيار كامل للنظام.
في عالم نعتمد فيه بشكل متزايد على تطبيقات الويب للإنتاجية والترفيه، فإن ثغرة يمكنها أن تجعل جهازك غير قابل للاستخدام في غضون دقائق تشكل تهديدًا خطيرًا. يكشف IFA كيف يمكن استغلال عدم وجود قيود في IndexedDB لخلق سيناريو يفقد فيه المستخدم السيطرة على نظامه بسبب نص برمجي بسيط.
يمكن أن يؤدي تنفيذ IFA إلى التأثيرات المدمرة التالية:
تدهور هائل في الأداء: يؤدي التخزين الهائل والمستمر للبيانات في IndexedDB إلى تشبع عمليات الإدخال/الإخراج للقرص، مما يؤدي إلى انخفاض كبير في سرعة النظام. سيواجه المستخدمون أوقات استجابة بطيئة للغاية، مما يصعب استخدام أجهزتهم بشكل طبيعي.
استنزاف سريع للتخزين: في غضون دقائق، يمكن للهجوم استهلاك غيغابايتات من مساحة القرص. بمجرد استنفاد التخزين، يصبح النظام غير قادر على تنفيذ العمليات الأساسية مثل حفظ المستندات أو تثبيت التحديثات أو حتى فتح تطبيقات جديدة.
عدم استقرار النظام وتعطله: عندما يمتلئ القرص بالكامل، قد يصبح نظام التشغيل غير مستقر أو حتى يتعطل، مما يؤدي إلى فقدان البيانات غير المحفوظة وربما إتلاف ملفات النظام الهامة. قد يواجه المستخدمون المتأثرون الحاجة إلى استعادة النظام أو حتى إعادة تثبيت نظام التشغيل بالكامل.
يؤثر IFA على مجموعة واسعة من المتصفحات:
يستخدم IFA استراتيجية مصممة بعناية لاستغلال عدم وجود قيود في واجهة برمجة تطبيقات IndexedDB، مما يزيد من تأثير الهجوم مع منع المتصفح من التعطل قبل الأوان:
توليد معرفات فريدة: يقوم البرنامج النصي بإنشاء قواعد بيانات متعددة بأسماء عشوائية، مما يضمن عدم وجود تعارضات وأن كل قاعدة بيانات يمكنها تخزين كميات كبيرة من البيانات.
حقن كتل بيانات بحجم 8 ميغابايت: يستخدم IFA كتل بيانات (blobs) بحجم 8 ميجابايت مكونة من نص متكرر وبيانات صور. هذا الاختيار للحجم أمر بالغ الأهمية لأنه يسمح بتخزين كميات كبيرة من البيانات بكفاءة دون التسبب في تعطل المتصفح فورًا. باستخدام كتل بيانات بحجم محدد، يمكن لـ IFA إغراق قرص المستخدم بشكل ثابت ومستمر، متجاوزًا آليات الأمان القائمة على مخزن الذاكرة المؤقتة للمتصفح التي قد توقف الهجوم إذا تم اكتشاف عمليات كتابة مفرطة أو سريعة.
حلقات تخزين البيانات: يتم تخزين كتل البيانات بحجم 8 ميجابايت بشكل متكرر في كائن IndexedDB، مما يخلق تدفقًا مستمرًا من البيانات يملأ مساحة القرص بسرعة. يقوم IFA بحقن مئات الميغابايت في الثانية، مما يضمن استهلاكًا سريعًا لمساحة تخزين المستخدم مع تجنب تعطل المتصفح الفوري.
تشبع القرص: تستمر العملية إلى ما لا نهاية، تخزين البيانات حتى استنفاد مساحة القرص، مما يؤدي إلى سلسلة من المشكلات التي يمكن أن تشل النظام.
يُظهر استغلال IFA كيف يمكن تسليح ثغرة خطيرة في IndexedDB API. فيما يلي بعض السيناريوهات حيث يمكن للمهاجم استغلال إثبات الفكرة هذا لإحداث أضرار كبيرة:
الاستغلال عبر البرمجة النصية عبر المواقع (XSS): إذا اكتشف المهاجم ثغرة XSS على موقع ويب شرعي، فيمكنه حقن برنامج IFA النصي في الموقع. عندما يزور المستخدمون الصفحة المخترقة، سيتم تنفيذ البرنامج النصي تلقائيًا في متصفحاتهم، مما يملأ مساحة القرص بسرعة. يمكن أن يؤدي ذلك إلى بطء كبير في النظام أو حتى تعطل، خاصة بالنسبة للمستخدمين غير المدركين للهجوم.
مكتبات JavaScript تابعة لجهات خارجية مخترقة: تعتمد العديد من المواقع وتطبيقات الويب على مكتبات JavaScript من جهات خارجية. إذا تمكن المهاجم من اختراق إحدى هذه المكتبات عن طريق حقن برنامج IFA النصي، فإن أي موقع يستخدم المكتبة المتأثرة قد يصبح عن غير قاصد ناقلًا للهجوم. سيؤدي ذلك إلى إغراق واسع للقرص على أي جهاز للمستخدم يقوم بتحميل البرنامج النصي المخترق.
إضافات المتصفح الضارة: يمكن للمهاجمين تطوير أو اختراق إضافات المتصفح لتضمين برنامج IFA النصي. بمجرد التثبيت، يمكن للإضافة تنفيذ البرنامج النصي بصمت في الخلفية، مما يملأ مساحة قرص المستخدم في كل مرة يفتحون فيها المتصفح. هذا السيناريو خطير بشكل خاص لأن إضافات المتصفح غالبًا ما تحتوي على أذونات واسعة.
الإعلانات المصابة على الويب: يمكن للمهاجم وضع إعلان ضار يحتوي على برنامج IFA النصي على موقع ويب شرعي. عندما يقوم المستخدمون بتحميل الصفحة مع الإعلان المصاب، سيتم تنفيذ البرنامج النصي ويبدأ في استهلاك مساحة القرص. يمكن أن تستهدف هذه الطريقة عددًا كبيرًا من المستخدمين، خاصة على مواقع الويب ذات الزيارات العالية.
حملات التصيد: يمكن للمهاجمين إرسال رسائل بريد إلكتروني تصيدية توجه الضحايا إلى موقع ويب يستضيف برنامج IFA النصي. بمجرد أن يزور الهدف الموقع الضار، سيتم تنفيذ البرنامج النصي ويبدأ في ملء مساحة القرص. يمكن أن تكون هذه الطريقة فعالة بشكل خاص في الهجمات الموجهة ضد الأفراد أو المؤسسات.
لمساعدتك على فهم تأثير IFA بشكل أفضل، قمت بإنشاء عرض توضيحي على موقع ويب مخصص. تم تصميم هذا العرض التوضيحي على الويب لتسهيل رؤية الاستغلال أثناء العمل وفهم آثاره المحتملة.
استكشف العرض التوضيحي المباشر: قم بزيارة https://ifa.run للتفاعل مع العرض التوضيحي المباشر. سيتيح لك ذلك تجربة مباشرة لكيفية تأثير هذا الهجوم على متصفحك ونظامك. لقد أنشأت هذا العرض التوضيحي لضمان أن يتمكن أي شخص من اختبار ورؤية عواقب الاستغلال بسهولة. يُرجى تذكر إجراء هذا الاختبار بحذر وفي بيئة خاضعة للرقابة.
عرض توضيحي للحقن المخفي: للحصول على عرض توضيحي أكثر دقة، قم بزيارة https://ifa.run/hidden.html. يعمل هذا الإصدار بشكل غير مرئي، ويقوم بتنفيذ الحقن مباشرة دون أي رسومات أو واجهة مستخدم مرئية مثل العرض التوضيحي الرئيسي.
شاهد فيديو إثبات الفكرة: إذا كنت تفضل شرحًا موجهاً، فقد أنشأت أيضًا فيديو توضيحيًا. في الفيديو، أرشدك خلال تنفيذ IFA وأظهر لك التأثيرات التي يمكن أن يسببها: فيديو إثبات الفكرة.
إذا كنت مهتمًا باختبار إثبات الفكرة محليًا، اتبع هذه الخطوات المباشرة. سنرشدك خلال تضمين برنامج IFA.js النصي وتشغيل الاستغلال ببيانات مخصصة.
أولاً، تحتاج إلى تضمين البرنامج النصي IFA.js في ملف HTML الخاص بك. لديك خياران:
<script src="IFA.js"></script>
<script src="https://cdn.jsdelivr.net/gh/jofpin/IFA/IFA.js"></script>
يعد استخدام رابط CDN مفيدًا بشكل خاص لاختبار الاستغلال على مواقع أو تطبيقات ويب مختلفة دون الحاجة إلى استضافة البرنامج النصي بنفسك.
بمجرد تضمين البرنامج النصي، تكون جاهزًا لتشغيل الاستغلال. يسمح لك برنامج IFA النصي بتخصيص البيانات التي سيتم حقنها. إليك كيفية القيام بذلك:
أدخل صورتك المشفرة بـ Base64: قم بتحويل صورة إلى تنسيق Base64 وأدخلها في حقل img.
أدخل نصك المخصص: أدخل أي نص تريد استخدامه في حقل txt.
فيما يلي مثال لكيفية تشغيل الاستغلال:
IFA.run({
img: "data:image/webp;base64,UklGRpZBAwBXRUJQV...", // Insert your Base64 image here
txt: "IFA" // Insert your custom text
});
img: هذا هو المكان الذي تضع فيه الصورة المشفرة بـ Base64. سيتم حقن الصورة مباشرة، مما يضمن تشغيل الاستغلال بشكل أسرع وأكثر كفاءة من خلال تجنب طلبات الخادم الخارجية.
txt: هنا تقوم بإدخال النص الذي سيتم تخزينه في قاعدة البيانات. يمكنك تخصيص هذا النص لاختبار سيناريوهات مختلفة.