
تحليل تقني لـ CVE-2024-20154، وهو تجاوز سعة المخزن المؤقت المعتمد على المكدس في البرنامج الثابت للنطاق الأساسي MediaTek MT6769 NB-IoT، يغطي الهندسة العكسية وسلسلة الاستغلال.
التصنيف: CWE-121 — تجاوز سعة المخزن المؤقت المعتمد على المكدس
الخطورة: حرجة (نشرة MediaTek) · 8.8 عالية، متجه الهجوم: مجاور (CISA-ADP)
النوع: تنفيذ تعليمات برمجية عن بُعد — دون تفاعل المستخدم، ودون ارتباط مسبق
الإفصاح: نشرة MediaTek الأمنية، 6 يناير 2025 https://corp.mediatek.com/product-security-bulletin/January-2025
الهدف المُحلَّل: Samsung Galaxy A14 SM-A145R — عائلة MT6769 (Helio G80)، ضمن قائمة الشرائح المتأثرة لدى MediaTek - تمت محاكاة البرنامج الثابت في ظروف آمنة.
الحالة: تم الترقيع.
كان هذا أول بحث منشور لي في النطاق الأساسي. أنا آتي من خلفية بعيدة عن البنية التحتية للاتصالات، وطبقات الوساطة للاعتراض القانوني، وتحليل stingray و IMSI-catcher، وأمن الأجهزة المدمجة — لم أكن قد قمت سابقًا بهندسة عكسية معمّقة للبرنامج الثابت على مودم خلوي. أردت أن أثبت لنفسي أن منهجية تحليلية منظمة تتكيف عبر الأهداف المختلفة، وأن الإلمام بمنصة معينة يمكن استبداله بتتبع سلسل صارم. برز NB-IoT لأنه يقع عند تقاطع خطير حقًا: البروتوكول مصمم لأجهزة إنترنت الأشياء محدودة الموارد، وسطح الهجوم قبل الارتباط، وتعالجه حزمة المودم بغض النظر عما يفعله مستخدم الهاتف.
عند تحليل البرنامج الثابت المُرقَّع والتأكد من غياب النمط الثغرة، فإن نظام الذكاء الاصطناعي المستخدم للتحليل الشامل للبرنامج الثابت قبل استهداف وظائف محددة
طابق بشكل مستقل فئة الخطأ المُعاد بناؤها، والظروف، وعائلة البرنامج الثابت المتأثرة مع وصف CVE-2024-20154.
الاستنتاجات التقنية هي استنتاجات المحلل نفسه.
يحتوي الهاتف في جيبك على حاسوبين منفصلين على الأقل. الذي تتفاعل معه يشغّل Android. والآخر — النطاق الأساسي — يعمل بشكل مستقل تمامًا، ويتعامل مع جميع الاتصالات اللاسلكية، ويكاد يكون غير مرئي تمامًا لنظام التشغيل الذي يعلوه. قد يكون Android مُرقَّعًا بالكامل. قد يكون المتصفح معزولًا. قد لا ينقر المستخدم أبدًا على رابط ضار. لا شيء من ذلك يهم إذا كان الكود الثغرة موجودًا في البرنامج الثابت للمودم الذي يعالج الإشارات اللاسلكية قبل أن يكون معالج التطبيقات متورطًا.
CVE-2024-20154 هو بالضبط هذا النوع من الثغرات.
تسبب بث معلومات نظام NB-IoT مشوّه في قبول البرنامج الثابت لمودم MediaTek لعدد جدولة يتحكم فيه المهاجم، وتمرير هذا العدد عبر مسار تكوين RRC-to-L1 دون تقييده أبدًا، واستخدامه في النهاية كحد للحلقة لحلقة كتابة على المكدس داخل معالج قناة البث NB-IoT. عندما يتجاوز العدد سعة المصفوفات الوجهة، تكتب الحلقة خارجها، وتصل إلى السجلات المحفوظة على المكدس، وتستبدل عنوان العودة المحفوظ. ثم تستعيد الدالة القيمة التالفة في سجل عنوان العودة وتقفز إليها.
ما يجعل الخطورة على ما هي عليه:
نُشرت الثغرة في نشرة MediaTek الأمنية بتاريخ 6 يناير 2025 بتصنيف خطورة حرجة، وتؤثر على عائلة مودم LR12A من بين أخرى. أدرجت Samsung الإصلاح في إصدار الصيانة الأمنية لشهر فبراير 2025.
لا ينشر هذا المنشور استغلالًا مسلحًا وليس قابلًا لإعادة الإنتاج من ما هو منشور هنا. الهدف هو إظهار أين تنكسر السلسلة، ولماذا فشلت كل طبقة في إيقافها، وما يتطلبه التحقق من خطأ النطاق الأساسي بمسؤولية عندما لا يمكنك إرفاق مصحح أخطاء بالمودم الحي.
الهدف الأساسي: Samsung Galaxy A14 (SM-A145R). يُدار النظام الفرعي اللاسلكي بواسطة معالج النطاق الأساسي من MediaTek في عائلة شرائح MT6769 (Helio G80). عائلة MT6769 مدرجة صراحةً في قائمة الشرائح المتأثرة لدى MediaTek لـ CVE-2024-20154.``` AP/CP firmware: A145RXXU1AWD1 Modem software: MOLY LR12A.R3.TC10.6M.A14.PR.SP.V1.P5 Build date: 2023-04-18
قاعدة البرمجيات الثابتة (firmware) ليست كود Android. إنها نظام مضمّن منفصل على النظام الفرعي الراديوي في SoC، بمعالج خاص بها، ونظام تشغيل زمن حقيقي (RTOS) خاص بها، ومساحة ذاكرة خاصة بها، خارج صندوق حماية عمليات Android.
### 2.2 معمارية المودم
يُظهر تحليل الملف الثنائي المستخرج أن معالج المودم يعمل بمعمارية MIPS32 مع تعليمات MIPS16e2 المضغوطة في وضع little-endian. إن MIPS16e2 هو امتداد ترميز 16-بت لتقليل حجم الكود المضمّن — بما يتوافق مع نهج MediaTek لقواعد النطاق الأساسي من جيل Helio، وهو ما تؤكده أبحاث النطاق الأساسي المنشورة المستقلة على هذه العائلة من SoC.
نظام التشغيل هو Nucleus RTOS، الذي يوفر جدولة المهام، وقوائم انتظار رسائل IPC، ومخصّص ذاكرة قائم على التجمعات (pool-based). لا يوجد فصل صلاحيات بين النواة/المستخدم، ولا فرض لوحدة حماية الذاكرة بين المهام، ولا آلية حماية مكدس عتادية.
جميع العناوين في هذا المنشور هي عناوين افتراضية، كما تم تحميلها في Ghidra عند القاعدة `0x90000000`.
### 2.3 إجراءات التخفيف (الملاحظة في البناء المُحلَّل)
| إجراء التخفيف | الحالة | التأثير |
|---|---|---|
| ASLR | غائب | عناوين البرمجيات الثابتة ساكنة وقابلة للتنبؤ من الصورة |
| Stack canary | غائب | تخزّن `SAVE`/`RESTORE` السجلات المحفوظة من المستدعي دون قيمة حماية |
| NX / W^X | غائب | ذاكرة المكدس قابلة للتنفيذ |
| CFI | غائب | لا يتم التحقق من عناوين العودة مقابل أي سياسة |
### 2.4 منهجية التحليل
ثلاثة مسارات متوازية:
**التحليل الساكن.** حزمة برمجيات Samsung الثابتة → استخراج قسم CP → `md1img.img` → Ghidra (MIPS LE 32-بت، القاعدة `0x90000000`) مع رموز MediaTek الهندسية المستعادة من قسم تصحيح البرمجيات الثابتة باستخدام مجموعة أدوات `mtk_bp` من NCC Group.
**التحقق الديناميكي.** تم استخدام Unicorn Engine (محاكاة MIPS32) لتنفيذ روتينات محددة من البرمجيات الثابتة بمعزل عن غيرها عبر مرحلتين. حاولت المرحلة 1 إثبات النسخ غير المقيّد لـ `si_count` إلى سياق القناة عبر زوج التعليمات الأصلي. نفّذت المرحلة 2 الحلقة القابلة للاستغلال على بايتات البرمجيات الثابتة الحقيقية وأكدت أن تعليمات البرمجيات الثابتة نفسها تُفسد عنوان العودة المحفوظ. حيث لم تتمكن المرحلة 1 من العمل بشكل أصلي بالكامل — لأن بيئة كائن خدمة RTOS التي يتطلبها مسار إرسال CPHY لم تتم إعادة بنائها — تم نمذجة الأثر الجانبي مباشرةً وتسميته على هذا النحو في جميع المخرجات.
**التحقق من الجانب الراديوي.** srsRAN 4G مع ZMQ loopback — برمجي فقط، دون انبعاث RF — أكد أن حمولة الاختبار تنجو من ترميز NB-IoT PHY وتسليم كتلة النقل.
---
## 3. سطح الهجوم: NB-IoT و SIB1-NB
### 3.1 سطح الهجوم قبل الارتباط
NB-IoT (النطاق الضيق لإنترنت الأشياء) هو 3GPP الإصدار 13، مصمم لربط أجهزة إنترنت الأشياء المحدودة باستخدام طيف LTE المرخّص الموجود. وهو مُنفَّذ في مجموعة واسعة من أنظمة SoC الخلوية الحديثة بما في ذلك تلك الموجودة في الهواتف الذكية الاستهلاكية.
أثناء وجوده في RRC_IDLE، قبل إنشاء أي اتصال RRC، فإن الجهاز الذي يبحث عن خدمة سيقوم بـ:
1. المزامنة مع إشارات التوقيت الخاصة بالخلية (NPSS/NSSS)
2. فك ترميز كتلة المعلومات الرئيسية عبر NPBCH (نافذة إرسال 640 مللي ثانية)
3. فك ترميز SIB1-NB من NPDSCH (جدولة 2560 مللي ثانية)
4. استخدام معلومات الجدولة في SIB1-NB لتحديد كتل معلومات النظام الإضافية
في الخطوة 3، يعالج المودم رسالة من كيان لم يوثّقه، قبل أي اتصال أو تفاعل من المستخدم. سيتم معالجة أي مُرسِل مارق يستوفي شروط اختيار الخلية العادية.```
+------------------+ +---------------------+
| Rogue Base Stn | | Target UE (Modem) |
+--------+---------+ +----------+----------+
| |
| NPSS/NSSS sync |
|--------------------------------------->|
| MIB-NB (640 ms cycle) |
|--------------------------------------->|
| SIB1-NB (malformed, si_count > 8) |
|--------------------------------------->| ← vulnerability triggered
| [no RRC connection established] |
يُعرَّف SIB1-NB في 3GPP TS 36.331. يحمل حقل schedulingInfoList الخاص به عدد رسائل
معلومات النظام التي تبثها الخلية، مقيَّدًا بالمواصفة بحد أقصى 8
مدخلات (1..maxSI-Message-NB-r13 = 8). هذا قيد على مستوى البروتوكول. أما
قيد أمان الذاكرة — وهو أن طول القائمة يجب ألا يتجاوز سعة
المصفوفات الوجهة — فيجب أن يُفرض بشكل منفصل بواسطة البرنامج الثابت.
ولم يحدث ذلك.