Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Palimpsest — CVE-2026-74945، كشف غير مهيأ للذاكرة المكدسة (heap) عبر خط ويب مُصمَّم خصيصًا (sec-high) | Kitploit
أدوات/GitHubGitHub/defineid/palimpsest
توليد الحمولةتحليل الثغرات الأمنيةالاستغلالأمن الويب
GitHubdefineid/palimpsest

Palimpsest

CVE-2026-74945، كشف غير مهيأ للذاكرة المكدسة (heap) عبر خط ويب مُصمَّم خصيصًا (sec-high)

عرض المستودع
38منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-74945 · كشف ذاكرة كومة غير مهيأة عبر خط ويب مُصمَّم

يحتوي هذا الدليل على حزمة إعادة إنتاج صادقة لكشف ذاكرة غير مهيأة في معالجة الخطوط في Firefox. يقوم خط @font-face مُصمَّم بدفع تدفق مخرجات OTS إلى فجوة في كومة غير مهيأة، ويقرأ المحتوى العادي بايتات تلك الفجوة مرة أخرى عبر واجهة measureText في canvas. الغرض من ذلك هو تشغيله ضد نسخة Firefox المصابة التي تم تنزيلها محليًا باستخدام بيانات اصطناعية فقط. وهو لا يمس أي نظام حي أو تابع لطرف ثالث.

مستودع PoC المطابق: https://github.com/defineid/Palimpsest التحليل المكتوب: writeup-font-cmap-leak.html في هذه المجموعة.

بيانات وصفية للتنبيه الأمني

الحقلالقيمة
CVECVE-2026-74945
المكوّنCore / Graphics: Text
الفئةكشف ذاكرة غير مهيأة (CWE-908 · CWE-200)
الخطورةsec-high (كشف ذاكرة يمكن الوصول إليه عبر الويب)
تم إصلاحه فيFirefox 154 · ESR 140.14
العلّةbugzilla.mozilla.org/show_bug.cgi?id=2057808
التفاعللا يوجد · تحميل الصفحة فقط

الآلية

يقوم Firefox بتعقيم خطوط الويب عبر OTS قبل استخدامها. تتوافق ثلاثة عيوب مستقلة بحيث يترك خط مُصمَّم فجوة في كومة غير مهيأة داخل المخرجات المعقّمة، ويمكن للمحتوى قراءتها مرة أخرى:

  1. مُخصِّص مخرجات OTS لا يصفّر أبدًا. ينمو تدفق المخرجات المتوسّع باستخدام مُخصِّص إعادة تخصيص خام (moz_xrealloc) لا يملأ المساحة الجديدة بالأصفار.
  2. Seek لا يصفّر النطاق المتخطّى. جدول فرعي cmap بصيغة 14 مع nonDefaultUVSOffset كبير يجعل OTS ينقل تدفق مخرجاته للأمام عندما يعيد تسلسل الخط المعقّم. يُسلَّم النطاق المتخطّى بين البايتات المكتوبة وهدف seek إلى المستدعي حاملًا كومة غير مهيأة، ويضبط forget() حجم المخزن المؤقت إلى أعلى إزاحة تم الوصول إليها.
  3. البحث عن glyph بصيغة 4 يتحقق من الحدود مقابل الطول الخاطئ. يتحقق البحث بصيغة 4 من الحدود مقابل ما تبقى من جدول cmap بأكمله بدلًا من الجدول الفرعي، لذا فإن مقطعًا يتجاوز idRangeOffset الخاص به نهاية بيانات صيغة 4 لا يزال يجتاز التحقق ويقرأ في بايتات الجدول الفرعي المجاور غير المهيأة.

يجمع الخط المُصمَّم بين جدول فرعي بصيغة 4، يستخدم مقطعه الأخير (0xFFFF) قيمة idRangeOffset فردية ومتجاوزة، مع جدول فرعي بصيغة 14 يحمل nonDefaultUVSOffset كبيرًا، بالإضافة إلى maxp.numGlyphs = 65535 وقيمة hmtx advance مميزة لكل معرّف glyph (advance == glyph id). لذلك فإن قياس U+FFFF يُحلّ إلى معرّف glyph يُقرأ من الفجوة غير المهيأة، ويكشف عرض advance الخاص به، القابل للقراءة من السكربت، عن نحو بايتين من الكومة لكل قياس على نافذة تبلغ نحو 64 كيلوبايت.

نموذج التهديد

تخدم صفحة ويب عادية الخط المُصمَّم عبر @font-face وتستدعي ctx.measureText("￿"). لا حاجة إلى نقرة أو إذن أو إضافة أو تغيير في التفضيلات. يعمل OTS داخل العملية وليس ضمن المكتبات المعزولة، لذا فإن البايتات المكشوفة هي كومة عملية المحتوى التي قد تحتوي على مؤشرات أو أسرار.

الملفات

الملفالغرض
make_font.pyيبني leak.otf وleak.woff، وهما الخطّان المُصمَّمان.
trigger.htmlصفحة مجرّدة تُحمّل الخط عبر @font-face وتقرأ advance الخاص بـ U+FFFF مرة أخرى عبر measureText.

المتطلبات المسبقة

  1. نسخة مصابة: Firefox قبل 154 أو ESR قبل 140.14. يستخدم تحليل التحليل المكتوب Firefox 140.9.0esr؛ نزّل نسخة المنصة المطابقة من أرشيف Mozilla الرسمي على https://ftp.mozilla.org/pub/firefox/releases/140.9.0esr/.
  2. Python مع fontTools وbrotli، لبناء الخط:
    pip install fonttools brotli
    

البناء والتشغيل

python3 make_font.py        # writes leak.otf and leak.woff in this directory

ثم افتح trigger.html في البناء المصاب، من مسار file:// أو من خادم محلي ثابت تتحكم به، وانقر على Measure.

النتيجة المتوقعة

  • البناء المصاب (قبل 154 / ESR 140.14): يُحلَّل U+FFFF إلى معرّف glyph غير صفري مشتق من الفجوة غير المهيأة، ويتباين التقدم المُبلَّغ عنه من تشغيل إلى آخر. تستعيد كل عملية قياس حوالي بايتين من كومة الذاكرة (heap) الخاصة بالعملية.
  • البناء المُصلَّح (154 / ESR 140.14 وما بعده): يُحلَّل U+FFFF إلى معرّف glyph يساوي 0 (.notdef) ويكون التقدم 0. لا تُسرَّب أي فجوة، لأن تدفق الإخراج يُصفَّر وبحث الصيغة 4 محصور في جدوله الفرعي الخاص.

حالة التحقق

  • تم في هذه البيئة: نُفِّذ make_font.py هنا باستخدام fontTools 4.63.0 وأنتج leak.otf (393816 بايت) وleak.woff (132372 بايت). أُعيد تحليل الخط المُولَّد من البايتات الخام وتأكَّد كل مكوّن مُصمَّم: maxp.numGlyphs = 65535، وhhea.numberOfHMetrics = 65535، وتقدم hmtx مميز لكل معرّف glyph (التقدم == معرّف glyph)، وجدولان فرعيان لـ cmap (platform 3 encoding 1 format 4، وplatform 0 encoding 5 format 14)، والمقطع الأخير للصيغة 4 endCode = 0xFFFF مع idRangeOffset = 0x4001 فردي متجاوز، وnonDefaultUVSOffset = 0x8000 للصيغة 14.
  • لم يتم في هذه البيئة: لا يوجد أي بناء مصاب من Firefox هنا، لذا لم يُلاحَظ التسريب الفعلي ولم يُشغَّل ولم يُلتقط. لم يُحمَّل الخط في بناء مصاب ولم تُفصح أي بايتات من الكومة. شغِّل trigger.html بنفسك مقابل بناء مصاب محلي لملاحظة التسريب. تُظهر هذه الحزمة المدخل المُصمَّم ومسار إعادة القراءة؛ وهي ليست استغلالاً مسلَّحاً ولا تتضمن أي بدائية مُتحكَّم بها لتنفيذ الشيفرة.

النطاق والأخلاقيات

يستهدف هذا بناءً مُنزَّلاً محلياً ببيانات خطوط اصطناعية مُولَّدة ذاتياً، من أجل تقرير عن ثغرة CVE أبلغ عنها المؤلف بنفسه وتم ترقيعها بالفعل. وهو لا يهاجم أي خدمة حية أو تابعة لطرف ثالث.

تنزيل الأداة