
PoC и доказательства для двух находок в драйверах NVIDIA для Linux GPU, закрытых вендором как ожидаемое/преднамеренное поведение: межпользовательская телеметрия GPU-процессов через NVML и непривилегированный сбой MMU Xid 31 в копировальном движке из-за гонки при разрыве peer-доступа.
Код доказательства концепции и исходные доказательства по двум отчётам в драйвере NVIDIA Linux GPU, оба отправлены через VDP NVIDIA и оба закрыты NVIDIA как предполагаемое/ожидаемое поведение. Опубликовано, чтобы поведение было задокументировано и воспроизводимо; ни один не имеет CVE и ни один не будет исправлен.
| # | Отчёт | Класс | Решение вендора | Каталог |
|---|
| 1 | Телеметрия процессов GPU между UID через 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 / ядро 6.8.0, CUDA toolkit 12.9. Отчёт 1 также воспроизведён на 565.57.01-open.
Отчёт 1 — это реальное раскрытие между UID. Отчёт 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-вердикты по каждому запуску, захваченные
строки Xid из dmesg, положительные и отрицательные контроли, аудит привилегий наблюдателя и захваты
окружения с тестового узла. UUID GPU, аппаратные серийные номера и IP-адреса узлов отредактированы; больше ничего
не изменено.
Посты Full Disclosure по обоим отчётам, включая переписку с вендором и сроки раскрытия: https://abhinavagarwal07.github.io
Код PoC и документация: см. LICENSE.