
إثباتات المفاهيم (PoCs) والأدلة لثغرتين في برنامج تشغيل وحدات معالجة الرسوميات (GPU) من NVIDIA لنظام لينكس، أغلقهما البائع باعتبارهما سلوكًا متوقعًا/مقصودًا: تتبع عمليات GPU عبر معرّفات المستخدمين المختلفة (cross-UID) عبر NVML، وخطأ MMU غير مُميَّز في محرك النسخ Xid 31 عبر سباق في إيقاف تشغيل الوصول النظير (peer-access teardown race).
كود إثبات المفهوم والأدلة الخام لنتيجتين في برنامج تشغيل GPU من NVIDIA لنظام Linux، كلتاهما أُبلغتا عبر برنامج VDP الخاص بـ NVIDIA وأغلقهما NVIDIA باعتبارهما سلوكًا مقصودًا/متوقعًا. نُشرت هذه النتائج لتوثيق السلوك وإمكانية إعادة إنتاجه؛ لا تحمل أي منهما CVE ولن يتم إصلاح أي منهما.
| # | النتيجة | التصنيف | نتيجة البائع | الدليل |
|---|
| 1 | تتبع عن بُعد لعملية GPU عبر UIDs مختلفة عبر NVML | كشف معلومات (CWE-200 / CWE-862) | "سلوك متوقع"؛ أُذن بالكشف العام كتابيًا في 2026-08-20 | 01-nvml-cross-uid-telemetry/ |
| 2 | خطأ MMU في محرك النسخ Xid 31 بدون امتيازات عبر سباق تمزيق P2P | خطأ GPU، بدون امتيازات وحتمي | "سلوك مقصود وبالتالي ليس خطأ"، أُغلق في 2026-08-04 | 02-xid31-p2p-teardown-race/ |
اختُبر على برنامج التشغيل 595.71.05-open، A100-SXM4-80GB x4 (شبكة NV4 كاملة، بدون NVSwitch، MIG معطّل)، Ubuntu 24.04 / kernel 6.8.0، CUDA toolkit 12.9. كما أُعيد إنتاج النتيجة 1 على 565.57.01-open.
النتيجة 1 هي كشف حقيقي عبر UIDs مختلفة. النتيجة 2 هي خطأ بتأثير غير مُثبت. ليستا بنفس القوة ولا تُقدَّمان على هذا النحو.
تُظهر النتيجة 2 أن مستخدمًا بدون امتيازات يمكنه بشكل حتمي إحداث خطأ في زوج GPU متصل عبر NVLink
(5/5، منسوب إلى PID، مقابل 4/4 ضوابط سلبية نظيفة). وهي لا تُظهر أن الخطأ يستمر بعد انتهاء العملية
المسبِّبة. لم يُؤخذ هذا القياس أبدًا — إذ أعادت الأداة ضبط GPU بشكل انعكاسي قبل الفحص، وتم إلغاء توفير
العقدة قبل إمكانية تكراره. هناك دليلان مستقلان يشيران إلى أن الخطأ يزول ذاتيًا: كتالوج Xid من NVIDIA
يصنّف Xid 31 بإجراء فوري RESTART_APP، وحقل Recovery Action في GPU نفسه قرأ None قبل إعادة الضبط.
حتى يقوم شخص ما بتشغيل فحص ما بعد الإنهاء في
02-xid31-p2p-teardown-race/، تعامل مع هذا كخطأ بنصف قطر انفجار
غير مُثبت، وليس كحرمان من الخدمة.
إذا كان لديك زوج NVLink متاح، فإن تلك التجربة الواحدة هي الأعلى قيمةً يمكن لأي شخص المساهمة بها هنا. تستغرق بضع دقائق.
git clone https://github.com/abhinavagarwal07/nvidia-gpu-security-poc
cd nvidia-gpu-security-poc
./capture_env.sh # سجّل أذونات جهاز مضيفك، برنامج التشغيل، الطوبولوجيا، خيارات /proc
# النتيجة 1 — تتطلب مستخدمًا ثانيًا يشغّل أي عبء عمل CUDA
(cd 01-nvml-cross-uid-telemetry/poc && make && ./nvml_harvest)
# النتيجة 2 — تتطلب GPU متصلين عبر NVLink. تُحدث خطأ في زوج GPU. لا تشغّلها على أجهزة مشتركة.
(cd 02-xid31-p2p-teardown-race/poc && ./build.sh && \
CUDA_VISIBLE_DEVICES=0,1 ./p2p_teardown_race_verbose --a 0 --p 1)
مخرجات capture_env.sh هي ما يجب إرفاقه إذا أبلغت عن اختلاف عن نتائجنا — فهي تسجّل
ls -l /dev/nvidia*، وإدخالات وضع الجهاز في /proc/driver/nvidia/params، وخيارات تحميل /proc
(تغيير تحميل hidepid= يغيّر ما تُنتجه النتيجة 1)، والطوبولوجيا، وبرنامج التشغيل وإصدارات pynvml.
تُحدث النتيجة 2 عمدًا خطأً في زوج GPU. تُنتج إدخالات Xid 31 في سجل النواة وقد تتطلب
nvidia-smi --gpu-reset للمسح — وعلى أنظمة NVLink/NVSwitch من جيل Ampere، توثّق NVIDIA أن
الاسترداد في حالة ارتباط الجذع المميت هو عملية على مستوى الشبكة بالكامل، وليست على مستوى GPU واحد.
شغّلها فقط على أجهزة تملكها أو لديك إذن كتابي لتعطيلها، دون أي مستأجرين مشاركين. جرى كل الاختبار
الأصلي على عقدة بمستأجر واحد يتحكم بها الباحثون بموجب عقد إيجار كتلة مُصرَّح به.
النتيجة 1 للقراءة فقط وسلبية. تقرأ بيانات تتبع يعرضها برنامج التشغيل بالفعل لكل مستخدم محلي؛ لا تكتب شيئًا ولا تحقن شيئًا.
يحتوي results/ في كل دليل على ملفات JSON الأصلية لنتائج كل تشغيل مُقيَّمة آليًا، وسطور dmesg
الملتقطة لـ Xid، والضوابط الإيجابية والسلبية، وتدقيق امتيازات المراقب، والتقاطات البيئة من عقدة
الاختبار. تم حجب معرّفات GPU UUID والأرقام التسلسلية للأجهزة وعناوين IP للعقد؛ ولم يُغيَّر أي شيء آخر.
منشورات Full Disclosure للنتيجتين، بما في ذلك مراسلات البائع والجداول الزمنية للإفصاح: https://abhinavagarwal07.github.io
كود إثبات المفهوم والتوثيق: انظر LICENSE.