CVE-2026-19184 in Zephyrالمعلومات

الملخص

بحسب VulDB • 05/10/2026

يحتوي برنامج تشغيل ADC الخاص بـ NXP GAU (drivers/adc/adc_mcux_gau_adc.c) على عيب حيث كان يتحقق من قيمة sequence->buffer_size التي يقدمها المستخدم والمعبّرة بالبايتات، مقابل عدد القنوات النشطة الذي يمثل عدّة عينات. ثم يقوم بتخزين هذا العدد البايتي مباشرة في data->results_length واستخدامه في دالة mcux_gau_adc_read_samples() على أنه عدد فتحات uint16_t المتاحة. وبما أن كل نتيجة تحويل تشغل sizeof(uint16_t) بايت، فإن ذاكرة التخزين المؤقت التي قُبلت بأنها "كبيرة بما يكفي" يمكن الكتابة فيها بحجم يصل إلى ضعف حجمها بالبايتات، مما يعني أن كل عينة تخطي منتصف الذاكرة المؤقتة تُكتب خارج الحدود المخصصة لها.

تعد دالتا adc_read() وadc_read_async() استدعاءً للنظام (system calls) في Zephyr. يتحقق مدقق الاستدعاءات النظامية الموجود في drivers/adc/adc_handlers.c فقط من أن المستخدم يمتلك بايتات قابلة للكتابة بمقدار buffer_size (K_SYSCALL_MEMORY_WRITE)، بينما يُترك تحديد ما إذا كان هذا الحجم كافياً للقنوات المطلوبة والعينات الإضافية بالكامل لبرنامج التشغيل. على نظام مُبنى بـ CONFIG_USERSPACE=y، يمكن لنظام تشغيلي في وضع المستخدم والذي تم منحه كائن جهاز ADC أن يقدم ذاكرة تخزين مؤقت مصممة عمداً لتكون نصف حجمها المطلوب، مما يتسبب في قيام معالج قائمة العمل الخاص ببرنامج التشغيل — الذي يعمل في وضع المشرف (supervisor mode) وخارج قيود MPU الخاصة بالمستخدم — بكتابة نتائج تحويل ADC ما بعد نهاية هذه الذاكرة المؤقتة، عند عنوان وبطول يختارهما المهاجم.

يكون تجاوز الحدود محدوداً بالتسلسل المطلوب: مع ضبط sequence->options->extra_samplings، يتحرك حلقة أخذ العينات مؤشر الذاكرة للأمام عبر كل عينة، لذا يمكن أن يصل التجاوز الكلي إلى الحجم الكامل للذاكرة المؤقتة المقدمة (كيلوبايتات لقيمة extra_samplings كبيرة). الكلمات المكتوبة هي نتائج تحويل ADC 16-بت، لذا فإن المحتوى يتأثر جزئياً فقط من قبل المهاجم (عبر مدخل التناظر المختار، والكسب والدقة)، لكن الوجه والطول خاضعان للتحكم الكامل — وهو ما يكفي لإفساد ذاكرة النواة أو التسبب في تعطل النظام أو ترقية الامتيازات من مساحة المستخدم إلى النواة. الإصدارات التي لا تحتوي على CONFIG_USERSPACE، أو تلك الخاصة بـ SoCs أخرى غير NXP RW61x مع تفعيل عقدة GAU ADC، ليست معرضة لحدود الامتياز؛ ففي هذه الحالات يسبب العيب نفسه مجرد تجاوز صامت للذاكرة عند تمرير التطبيق لذاكرة تخزين مؤقت أصغر من المطلوب.

يحل الإصلاح هذا الفحص المخصص محله باستخدام المساعد adc_sequence_validate_buffer() المشترك (الذي يتحقق مقابل num_channels * sizeof(uint16_t))، ويخزن buffer_size / sizeof(uint16_t) في results_length، كما يصحح حد الحلقة ليصبح بعد الانقاص (post-decrement) لضمان إمكانية كتابة العدد الدقيق للفتحات المتاحة.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Zephyr

حجز

06/08/2026

إفشاء

05/10/2026

الاعتدال

تمت الموافقة

إدخال

VDB-413529

EPSS

0.00103

KEV

لا

النشاطات

منخفض

المصادر

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!