خطأ ماجلان: تجاوز سعة المخزن المؤقت أو رحلة حول العالم باستخدام SQLite FTS

لقد تحايلت بطريقة ما على خطأ ماجلان الأخير في حبري ونقاط الضعف المرتبطة به ، وسأحاول إصلاح هذا الإغفال.


قليلا من التاريخ


  • في 1 تشرين الثاني (نوفمبر) 2018 ، وصل تقرير الأخطاء رقم 900910 إلى Chromium: "مشكلات متعددة في SQLite عبر WebSQL." تم الإبلاغ عن الخطأ بواسطة Wenxiang Qian من فريق Tencent Blade.
  • في 5 نوفمبر 2018 ، تم إغلاق الخطأ في قلب مكتبة SQLite (FTS3) ، حيث يعيش فعليًا تقريبًا منذ وقت إنشاء الوحدة ، أي منذ نوفمبر 2009.
  • 28 نوفمبر 2018 يندمج في Chromium
  • بعد ذلك بقليل ، ينشر فريق Tencent Blade Team رسالة خطأ ، ويعطيها اسم Magellan ، خاصة دون الكشف عن التفاصيل ، ويشير إلى أن نشر مآثر جاهزة و PoC لم يتم التخطيط لها بعد.
  • بعد أسبوع ، أصبحت شبكة الإنترنت مليئة بـ PoC ، أو Chrome ، أو Electron dev-framework ، إلخ. الأدلة وأي معلومات أخرى تفيد بأنه تم استخدام الثغرة الأمنية لأغراض ضارة لا تزال غير موجودة.
  • أكدت DRH الشكوك في Hacker News بوجود ثغرة أمنية (على الأقل إذا كان تنفيذ استعلام SQL "أجنبي" مسموحًا به ، أو حقن SQL لسيناريو مشابه).

ما يمكن أن يكون عرضة للخطر؟


يحتمل أن تكون جميع الأجهزة والبرامج التي تستخدم SQLite (مع تمكين FTS) أو تستخدم أو تعتمد عليها (مثل Chromium). يعتمد مدى إمكانية تأثرها وتأثير "الخسارة" المحتملة على ما إذا كان قد تم العثور على ناقل هجوم مناسب.


أكثر قليلاً عن Magellan SQLite BUG


يرتبط الخطأ بتجاوز مجموع الأعداد الصحيحة ويعرف أيضًا باسم تجاوز عدد صحيح ، والذي يمكن أن يحدث في النظام الفرعي FTS3 / 4 عن طريق تغيير فهرس جدول FTS ، والذي بدوره قد يؤدي إلى إعادة كتابة الذاكرة أو الإنهاء مع استثناء.


يؤدي التطبيق المصطنع المستهدف لهذا الفائض الصحيح ، من خلال "التشذيب" المختص لمخازن الكتابة المؤقتة ، إلى تجاوز سعة الذاكرة ، ويمكن استخدامه في المستقبل من خلال استعلامات SQL التي تم إنشاؤها خصيصًا.


نتيجة لذلك ، من الناحية النظرية ، يمكن أن تكون العديد من التطبيقات التي تستخدم SQLite (مع جداول FTS افتراضية) ، وبصفة خاصة ، المتصفحات الشائعة التي تدعم SQLite على أساس SQLite مع تمكين FTS (على سبيل المثال ، Google Chrome ، Chromium ، Opera ، Slimjet Browser ، SRWare Iron ، Torch ، يمكن أن تكون ضعيفة). كمودو دراجون ، كولنوفو ، متصفح ياندكس ، فيفالدي ، إلخ).


تحظى قواعد بيانات SQLite بشعبية كبيرة بشكل عام ، حيث يتم توفيرها عن طريق أكثر من اثنتي عشرة لغة برمجة ، وسلسلة أدوات ، وأطر عمل ، وما إلى ذلك ، وتستخدم من قبل التطبيقات لكل من الأجهزة المحمولة وأجهزة الكمبيوتر المتكاملة ، وغالبًا ما توجد حتى في حلول الخادم. لذلك ، على سبيل المثال ، متصفحات الويب الشهيرة مثل Google Chrome و Mozilla Firefox و Yandex Browser ، والعديد من برامج المراسلة الفورية (على سبيل المثال ، WhatsApp و Viber و WeChat وغيرها) تخزن البيانات بهذا التنسيق ، إلخ. الخ


يستخدم Fossil SCM نفسه ، على سبيل المثال ، قاعدة بيانات SQLite لتخزين محفوظات المراجعة ويسمح لك باستخدام فهرسة النص الكامل من خلال FTS (ويوفر الوصول إليها من كمامة واجهة المستخدم / الويب ، حيث توجد على سبيل المثال إمكانية إنشاء استعلامات SQL الخاصة بك ، على سبيل المثال تقارير التذاكر المخصصة الخ).


تحديث: DRH ، كونه مؤلفًا مشاركًا ومطورًا لـ Fossil ، ظاهريًا على ما يبدو نفس الشيء ، و " أغلق الحفرة " بالفعل من خلال تحديث SQLite إلى 3.26.0


مثل هذا الفائض "المتنبأ به" ليس شيئًا لطيفًا بحد ذاته ، ولكن إذا كنت تتذكر بالضبط ما يمكن تخزينه في البنك نفسه (من محتويات المجلات إلى الجداول نفسها) ...
لذلك ، لا تكون رفاق كسول ... ويتم تحديثها وتحديثها.


أين يمكن الحصول على الإصلاح؟


يتم توفير التصحيح [940f2adc8541a838] كجزء من تحديث SQLite 3.25.3 (الذي تم تحديث Chromium and co. أيضًا ، على سبيل المثال ، Chrome في الإصدار 71.0.3578.80).


يوفر SQLite الإصدار 3.26 أيضًا ميزات أمان إضافية لحاويات FTS ، على سبيل المثال:

دعم جداول الظل للقراءة فقط عند تمكين الخيار SQLITE_DBCONFIG_DEFENSIVE

ما هو خطر هذا الضعف؟


حرجة. يسمح تنفيذ التعليمات البرمجية عن بعد. احتمال حدوث تسرب للذاكرة وتعطل البرنامج أيضًا.


هل هناك أي أمثلة على مآثر جاهزة لاستغلال الثغرة الأمنية؟


نعم


على وجه الخصوص ، يدعي فريق Tencent Blade Team أنهم نفذوا بنجاح هجومًا على Google Home باستخدام مشكلة عدم الحصانة هذه (تم إغلاق الوصول إلى وصف المشكلة في Google bug tracker) ، وكما ذكر أعلاه ، لا توجد خطة للكشف عن رمز استغلال في الوقت الحالي.


شروط استخدام الضعف؟


يمكن إجراء ثغرة أمنية عن بُعد ، على سبيل المثال ، عندما يتم استدعاء صفحة ويب معينة في متصفح ، أو في أي سيناريو مشابه ، على سبيل المثال ، السماح بتنفيذ عبارات SQL (إذا لم يتم تعطيل FTS ، إذا تم اكتشاف متجه هجوم محتمل و / أو وجود أو وجود بعض العوامل الأخرى التي تسهل الاستغلال نقاط الضعف).


هذا ، بالمناسبة ، ليس الخطأ الأول في تجاوز سعة التخزين المؤقت للنوع وتجاوزه في SQLite على وجه التحديد وفي وحدة FTS بشكل خاص (على سبيل المثال [56be976859294027] ) ، لكنه على الأرجح هو الأكبر من نوعه في الأهمية والتأثير النظري و "النطاق" النسبي في طرق التطبيق الممكنة وتقييم النتائج. من هذا.

Source: https://habr.com/ru/post/ar433596/


All Articles