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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
edk2-security — نتائج أمنية في EDK2 BrotliCustomDecompressLib — إفصاح منسّق | Kitploit
أدوات/GitHubGitHub/lukr54/edk2-security
أمان الأنظمة المدمجةماسحات الثغرات الأمنيةتحليل الثغرات الأمنيةالاستغلالأمان الأجهزة وإنترنت الأشياءالأوراق والأبحاثتحليل البرامج الثابتةاستغلال الملفات الثنائية
GitHublukr54/edk2-security

edk2-security

نتائج أمنية في EDK2 BrotliCustomDecompressLib — إفصاح منسّق

عرض المستودع
17منذ يوم واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

EDK2 BrotliCustomDecompressLib — تجاوز سعة المخزن المؤقت في الكومة (غير مُصلح)

ثغرة تجاوز سعة المخزن المؤقت في الكومة (heap-buffer-overflow) في طبقة الربط الخاصة بفك ضغط Brotli داخل EDK2 (MdeModulePkg/Library/BrotliCustomDecompressLib)، موجودة منذ 2017، وغير مُصلحة عند HEAD حتى 2026-10-25. مؤكَّدة عبر ASAN مع إثبات مفهوم (proof-of-concept) وعرض تلف مُتحكَّم به من البداية إلى النهاية.

الملخص

تقرأ طبقة الربط الخاصة بـ Brotli في EDK2 حجم المخرجات المفكوكة من ترويسة قسم موجَّه (GUIDed section header) يتحكم بها المهاجم، ثم تقتطع الحجم من UINT64 إلى UINT32 دون أي حماية، وتمرّره إلى نواة DXE التي تخصّص مخزنًا مؤقتًا بذلك الحجم. بعد ذلك يقوم BrotliDecompressInternal بفك الضغط داخل ذلك المخزن المؤقت دون حدود — إذ يستمر حتى ينتهي تدفق Brotli، فيكتب خارج حدود التخصيص.

النتيجة: تجاوز سعة المخزن المؤقت في الكومة (بدائية كتابة) في مرحلة DXE، قبل اكتمال التحقق من Secure Boot. يمكن للمهاجم الذي يتحكم في صورة البرنامج الثابت (flash أو capsule أو ESP) أن يكتب فوق كائنات التجمع (pool) المجاورة — مؤشرات الدوال، وأعلام الأمان، وبُنى البروتوكولات — ببايتات مختارة.

هذه هي الثغرة الشقيقة المنسية لـ Brotli المقابلة لـ CVE-2021-28211 (حصل LZMA على حماية >MAX_UINT32 في 2021؛ أما Brotli فلم يحصل عليها قط). يؤكد مسح للمتغيرات أن Brotli هو الوحيد من مفككات ضغط EDK2 الذي يفتقر إلى كلٍّ من حماية الاقتطاع وحدّ المخرجات.

الكود المتأثر

الملفما يفعله
BrotliDecompress.c:238يحوّل الحجم المفكوك UINT64 إلى UINT32 — دون حماية MAX_UINT32
BrotliDecompress.c:118–157يفك الضغط داخل المخزن المؤقت الهدف دون أي فحص للحدود
GuidedSectionExtraction.cيستدعي GetInfo ثم Decompress — ويثق بالحجم المُعلَن
CoreSectionExtraction.c:1597يخصّص المخزن المؤقت الهدف بالحجم المُعلَن

كلها في tianocore/edk2، MdeModulePkg/Library/BrotliCustomDecompressLib.

الأدلة

الأثرالوصف
harness/edk2_brotli_overflow_poc.cإثبات مفهوم ASAN: تدفق بحجم 4096 بايت داخل مخزن مؤقت بحجم 64 بايت
harness/asan_output.txtمخرجات ASAN: heap-buffer-overflow عند BrotliDecompressInternal → memcpy
harness/edk2_brotli_overflow_demo.cعرض من البداية إلى النهاية: تلف مُتحكَّم به لكائنات التجمع المجاورة
harness/demo_output.txtمخرجات العرض: اختطاف مؤشرات الدوال، تعطيل Secure Boot
harness/lvfs_brotli_scan.pyماسح برامج ثابتة LVFS (قياس نطاق التأثير)
harness/lvfs_scan_output.txtنتائج المسح: 0/200 من صور البرامج الثابتة تستخدم Brotli
evidence/نسخ من ملفات مصدر EDK2 المعرّضة للثغرة عند HEAD
FINDINGS.mdالتقرير الكامل: مراجع الأسطر، بحث الأعمال السابقة، مسح المتغيرات، تدقيق LZMA

نطاق التأثير

ضيّق. وجد مسحان مستقلان صفر منصات تستخدم أقسام Brotli الموجَّهة في الواقع العملي:

  • البحث في كود GitHub (جميع المستودعات العامة): 0 ملفات DSC لمنصات تشير إلى BrotliCustomDecompressLib. كل نتيجة هي MdeModulePkg.dsc نفسه.
  • مسح برامج LVFS الثابتة (200 صورة مُشحونة، 9 بائعين): وُجد Brotli GUID في 0/200 صورة. بينما وُجد LZMA (الضابط الموجب) في 161/200.

الكود المعرّض للثغرة يُشحن في شجرة EDK2 لكنه كود ميت اليوم — أُضيف في 2017، ولم تعتمده شركات IBV أو OEMs قط. الثغرة حقيقية وقابلة للاستغلال من حيث المبدأ؛ وإذا ازداد اعتماد Brotli، تصبح قابلة للوصول فورًا.

الإصلاح

تغييران، مطابقان لما يمتلكه LZMA وTiano بالفعل:

  1. إضافة حماية MAX_UINT32 إلى BrotliUefiDecompressGetInfo (BrotliDecompress.c:238): رفض الأحجام المفكوكة > MAX_UINT32، كما يفعل LzmaDecompress.c:149 منذ CVE-2021-28211.
  2. تقييد المخرجات في BrotliDecompressInternal: تتبّع البايتات المكتوبة والتوقف عند DestinationSize، كما يفعل مفكك ضغط Tiano مع mOrigSize.

إعادة الإنتاج

ابنِ إثبات المفهوم على Linux باستخدام libbrotli وGCC:

# ASAN proof (aborts at the overflow)
gcc -fsanitize=address -g -O1 -o poc harness/edk2_brotli_overflow_poc.c \
    -lbrotlienc -lbrotlidec
./poc

# Controlled-corruption demo (completes the overflow, shows the damage)
gcc -g -O1 -o demo harness/edk2_brotli_overflow_demo.c \
    -lbrotlienc -lbrotlidec
./demo

الأعمال السابقة

  • CVE-2021-28211 — الشقيق LZMA، الذي تم إصلاحه في 2021. وقد غُفل عن مسار Brotli.
  • CVE-2026-111497 — خلل منفصل في وحدة فك ترميز Brotli في المنبع (9.2). EDK2 متأثر أيضًا (issue #13378)، لكن ذلك اكتشاف مختلف.
  • لا توجد أي CVE أو استشارة أو issue أو PR عامة تعالج تجاوز سعة glue الخاص بـ Brotli. تم التحقق من: جميع GHSAs الخاصة بـ EDK2 وعددها 14، وجميع issues الخاصة بـ Brotli وعددها 29، وجميع PRs الخاصة بـ Brotli وعددها 28، وCVE/NVD، وEDK2 HEAD.

الإفصاح

إفصاح عام كامل، 2026-10-26. لم تُمنح فترة إفصاح منسّق إلى TianoCore. وقد أثر في هذا القرار نطاق التأثير الضيق (عدم تأثر أي برنامج ثابت مُشحون) وكون خلل LZMA الشقيق علنيًا منذ 2021.

المؤلف

@lukr54

تنزيل الأداة