
ثغرات أمنية موثقة في مكتبة نظام الملفات المضمنة FatFs مع تفاصيل CVE، وأداة اختبار بالتشويش (fuzzing harness)، ومُولّد صور الأقراص الاستغلالية، وتحليل تأثير سلسلة التوريد عبر عشرات مشاريع البرامج الثابتة (firmware) التابعة.
يُوثّق هذا المستودع ست ثغرات أمنية مؤكدة في FatFs بالإضافة إلى بيئة اختبار، ومُدقِّق (fuzzer)، ومُولِّد صور أقراص استغلال قائم بذاته.
يمكن العثور على الكود المصدري الأصلي لـ FatFs في دليل FatFs-R0.16.
هذا المشروع هو عودة إلى تقييم أمني من عام 2017، عندما حدد التدقيق اليدوي وجهود المُدقِّق التي استمرت لعدة أيام بعض الأخطاء الأساسية، ولكن غير المثيرة للاهتمام، في مُشغّل FatFs. بعد تسع سنوات، في مارس 2026، عدنا إلى هذا المشروع باستخدام Visual Studio Code، وGitHub Copilot في وضع "auto"، وبعض المطالبات الأساسية، دون أي حلقات أو أدوات تسخير أو مهارات محددة. كانت النتائج مفاجئة - حيث أصبحت الأخطاء التي تم التغاضي عنها أثناء التدقيق اليدوي تافهة للعثور عليها، باستخدام LLM لبناء مُدقِّق تلقائيًا بمدخلات جديدة. لم يجد هذا الجهد أخطاء مثيرة للاهتمام فحسب، بل أتمت أيضًا عملية التحقق من قابلية الاستغلال عبر سيناريوهات التطوير المضمنة المختلفة.
يرجى الاطلاع على الملفات التالية للحصول على ملاحظات مفصلة:
FatFs هي مكتبة أنظمة ملفات FAT/exFAT محمولة وخالية من حقوق الملكية مكتوبة بلغة C بواسطة ChaN (elm-chan.org). وهي مصممة للأنظمة المضمنة محدودة الموارد دون الاعتماد على نظام تشغيل، وعادةً ما تُجمَّع مباشرةً في البرامج الثابتة. وهي تدعم FAT12 وFAT16 وFAT32 وexFAT، بالإضافة إلى دعم اختياري لـ LFN (أسماء الملفات الطويلة) وقسم GPT.
نظرًا لأن FatFs صغيرة ومكتفية ذاتيًا ومرخصة بشكل متساهل، فقد
أصبحت المعيار الفعلي لتطبيق FAT في البرامج الثابتة للمتحكمات الدقيقة.
يتم دمج المكتبة حرفيًا في حزم SDK الرسمية وأنظمة RTOS ومُحملات الإقلاع وأطر
التطبيقات - مما يعني أن أي ثغرة أمنية في المنبع تنتشر إلى
كل مشروع في المصب قام بنسخ ff.c.
تم تأكيد أن المشاريع التالية تحتوي على إصدار ضعيف من FatFs. راجع 02_CRITICAL.md للحصول على التحليل الكامل ومسارات الانتشار لكل مشروع ومعلومات الاتصال الأمنية.
| Project | Stars | FatFs Version | Bugs |
|---|---|---|---|
| espressif/esp-idf | 17,655 | R0.16 | CVE-2026-6682 |
| STMicroelectronics/stm32-mw-fatfs | all STM32Cube | R0.15 w/p2 | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687 |
| zephyrproject-rtos/zephyr | 14,820 | R0.16 | CVE-2026-6683, CVE-2026-6687, CVE-2026-6688 |
| micropython/micropython | 21,583 | R0.13c (2019) | CVE-2026-6682, CVE-2026-6683, CVE-2026-6684, CVE-2026-6686, CVE-2026-6687 |
| ArduPilot/ardupilot | 14,743 | R0.14b | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687 |
| RT-Thread/rt-thread | 11,862 | R0.16 | CVE-2026-6683, CVE-2026-6686 |
| nodemcu/nodemcu-firmware | 7,903 | varies | CVE-2026-6688 |
| RIOT-OS/RIOT | 5,701 | R0.15 | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687 |
| ARMmbed/mbed-os | 4,837 | R0.14b | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686 |
| sbabic/swupdate | 1,780 | R0.16 | CVE-2026-6683 |
| rsta2/circle | 2,222 | tbd | CVE-2026-6684 |
| hugen79/NanoVNA-H | 695 | R0.15 | CVE-2026-6683 |
| ChibiOS/ChibiOS | 833 | varies | CVE-2026-6688 |
| Samsung/TizenRT | 643 | R0.16 | CVE-2026-6683, CVE-2026-6688 |
| adafruit/tinyuf2 | 447 | tbd | CVE-2026-6684, CVE-2026-6686 |
| grblHAL/Plugin_SD_card | 475 | R0.16 | CVE-2026-6688 |
| JcZou/StarryPilot | 315 | R0.16 | CVE-2026-6688 |
| KeystoneHQ/keystone3-firmware | 199 | R0.16 | CVE-2026-6682 |
| flysight/flysight | 44 | varies | CVE-2026-6682, CVE-2026-6688 |
| eugene-tarassov/vivado-risc-v | 1,061 | tbd | CVE-2026-6684 |
| CVE ID | Short Title | CWE |
|---|---|---|
| CVE-2026-6682 | Integer Overflow in FAT32 Volume Mount | CWE-190: Integer Overflow or Wraparound |
| CVE-2026-6683 | Divide-by-Zero in exFAT Sync | CWE-369: Divide By Zero |
| CVE-2026-6684 | Infinite Loop in GPT Partition Scan | CWE-835: Loop with Unreachable Exit Condition |
| CVE-2026-6686 | Use of Uninitialized Clusters After Seek Past EOF | CWE-908: Use of Uninitialized Resource |
| CVE-2026-6687 | Stack Buffer Overflow via Uncapped exFAT Label Length | CWE-121: Stack-based Buffer Overflow |
| CVE-2026-6688 | Buffer Overflow via Unbounded LFN Filename Copy | CWE-120: Buffer Copy without Checking Size of Input |
ليس لدى FatFs سجل لـ CVE، ولا قائمة بريدية أمنية، ولا آلية إشعار بالتصحيحات.
يجب على كل مشروع في المصب يُورِّد ff.c أن يكتشف هذه الثغرات ويُصنِّفها ويُصحِّحها
بشكل مستقل، وغالبًا دون معرفة أنه متأثر. هذا يعني أن الفترة بين الإفصاح العام
والإصلاح الواسع النطاق ستُقاس بالسنوات، وليس بالأيام. وبالتالي فإن سطح الهجوم العملي
ليس تطبيقًا أو خدمة برمجية واحدة، بل عشرات الملايين من
الأجهزة عبر عشرات من قواعد الأكواد المستقلة، والعديد منها لن يتلقى
تصحيحًا أبدًا.
سيناريو الاستغلال النموذجي هو بطاقة SD الشريرة: يقوم المهاجم الذي لديه بضع ثوانٍ من الوصول المادي بتبديل وسيلة التخزين في جهاز، من كاميرات المستهلكين إلى الطائرات بدون طيار، إلى الطابعات ثلاثية الأبعاد إلى آلاف من عائلات المنتجات الأخرى. كل ثغرة في هذه المجموعة قابلة للتفعيل عن طريق تحميل صورة FAT مُصمَّمة خصيصًا، وهو ما يحدث تلقائيًا تقريبًا عند الإدخال دون أي تفاعل مطلوب من المستخدم. ومع ذلك، فإن الوصول المادي ليس المسار الوحيد.
الأجهزة التي تستوعب حزم تحديثات بتنسيق FAT من مصدر شبكة مثل أطر التحديث عبر الهواء (OTA) وتحديثات مُحمل الإقلاع بالسحب والإفلات، تكون قابلة للاستغلال من قبل أي مهاجم يمكنه تسليم صورة ضارة إلى خط أنابيب التحديث. اختراقات سلسلة التوريد، أو حقن AitM على تغذية تحديث HTTP بنص واضح، أو صورة ضارة منشورة على بوابة توزيع البرامج الثابتة للهواة. مسار OTA هو مسار عن بعد بالكامل على أي جهاز يفتقر إلى التحقق من سلامة المُصادقة من طرف إلى طرف لحاوية التحديث الخاصة به قبل تحميلها باستخدام FatFs.
CVE-2026-6682 - تجاوز عدد صحيح يؤدي إلى طول قراءة يتحكم فيه المهاجم
من خلال تصميم وحدة تخزين FAT32 مع حقل معين مضبوط على التجاوز، يمكن للمهاجم أن يتسبب في قراءة جهاز الضحية لعدد يختاره المهاجم من البايتات التي يختارها المهاجم في مخزن مؤقت ثابت - وهو مسار مباشر لتنفيذ التعليمات البرمجية. على الأهداف المضمنة ذات المعدن العاري يكون الاستغلال حتميًا ولا يتطلب رش كومة أو قوة غاشمة أو تسريب معلومات كشرط مسبق.
يحتاج المهاجم إلى التحكم في وحدة تخزين FAT التي سيقوم الهدف بتحميلها. بالنسبة لمعظم الأجهزة يعني ذلك الوصول المادي لتبديل بطاقة SD. الأجهزة التي تقبل تحديثات البرامج الثابتة عبر شبكة، أو التي تثق في سلامة حزمة التحديث فقط بعد أن يقوم FatFs بتحليلها بالفعل، تكون قابلة للاستغلال عن بُعد.
CVE-2026-6683 - القسمة على صفر في مزامنة exFAT