
PoCs e evidências para duas descobertas no driver de GPU Linux da NVIDIA encerradas pelo fornecedor como comportamento esperado/intencional: telemetria de processos GPU entre UIDs via NVML, e uma falha de MMU no motor de cópia Xid 31 sem privilégios, por meio de uma corrida de desmontagem de acesso entre pares.
Código de prova de conceito e evidências brutas para duas descobertas no driver de GPU Linux da NVIDIA, ambas reportadas através do VDP da NVIDIA e ambas encerradas pela NVIDIA como comportamento pretendido/esperado. Publicado para que o comportamento seja documentado e reproduzível; nenhuma tem CVE e nenhuma será corrigida.
| # | Descoberta | Classe | Resultado do fornecedor | Diretório |
|---|
| 1 | Telemetria de processo GPU entre UIDs via NVML | Divulgação de informações (CWE-200 / CWE-862) | "comportamento esperado"; divulgação pública autorizada por escrito em 2026-08-20 | 01-nvml-cross-uid-telemetry/ |
| 2 | Falha de MMU do motor de cópia Xid 31 sem privilégios via corrida de teardown P2P | Falha de GPU, sem privilégios e determinística | "comportamento pretendido e, como tal, não é um bug", encerrado em 2026-08-04 | 02-xid31-p2p-teardown-race/ |
Testado no driver 595.71.05-open, A100-SXM4-80GB x4 (malha completa NV4, sem NVSwitch, MIG desativado), Ubuntu 24.04 / kernel 6.8.0, toolkit CUDA 12.9. A descoberta 1 também foi reproduzida no 565.57.01-open.
A descoberta 1 é uma exposição real entre UIDs. A descoberta 2 é uma falha de impacto não comprovado. Elas não são igualmente fortes e não são apresentadas como tal.
A descoberta 2 demonstra que um usuário sem privilégios pode, de forma determinística, causar falha em um par de GPUs NVLink
(5/5, atribuído por PID, contra 4/4 controles negativos limpos). Ela não demonstra que a
falha sobrevive ao processo que a acionou. Essa medição nunca foi feita — o harness reiniciava a
GPU reflexivamente antes da sondagem, e o nó foi desprovisionado antes que pudesse ser repetido. Duas
evidências independentes sugerem que a falha se auto-limpa: o catálogo Xid da NVIDIA classifica
o Xid 31 com ação imediata RESTART_APP, e o próprio campo Recovery Action da GPU lia None
antes do reset. Até que alguém execute o canário pós-kill em
02-xid31-p2p-teardown-race/, trate isto como uma falha com
raio de explosão não comprovado, não como negação de serviço.
Se você tiver um par NVLink disponível, esse único experimento é a coisa de maior valor que qualquer pessoa pode contribuir aqui. Leva alguns minutos.
git clone https://github.com/abhinavagarwal07/nvidia-gpu-security-poc
cd nvidia-gpu-security-poc
./capture_env.sh # registra permissões de dispositivo, driver, topologia, opções /proc do seu host
# Descoberta 1 — requer um segundo usuário executando qualquer carga de trabalho CUDA
(cd 01-nvml-cross-uid-telemetry/poc && make && ./nvml_harvest)
# Descoberta 2 — requer duas GPUs conectadas via NVLink. Causa falha em um par de GPUs. Não execute em hardware compartilhado.
(cd 02-xid31-p2p-teardown-race/poc && ./build.sh && \
CUDA_VISIBLE_DEVICES=0,1 ./p2p_teardown_race_verbose --a 0 --p 1)
A saída de capture_env.sh é o que deve ser anexado se você relatar uma diferença em relação aos nossos resultados — ela
registra ls -l /dev/nvidia*, as entradas de modo de dispositivo em /proc/driver/nvidia/params, as opções de montagem do /proc
(uma montagem hidepid= altera o que a descoberta 1 produz), topologia, driver e versões do pynvml.
A descoberta 2 deliberadamente causa falha em um par de GPUs. Ela produz entradas Xid 31 no log do kernel e pode
exigir nvidia-smi --gpu-reset para limpar — e em sistemas NVLink/NVSwitch da geração Ampere
a NVIDIA documenta que a recuperação no caso de link-trunk fatal é uma operação em toda a malha, não
uma operação de GPU única. Execute apenas em hardware que você possui ou para o qual tem autorização escrita para interromper, com
sem co-inquilinos. Todos os testes originais foram feitos em um nó de inquilino único, controlado por pesquisador, sob
uma concessão de cluster autorizada.
A descoberta 1 é somente leitura e passiva. Ela lê telemetria que o driver já expõe a todos os usuários locais; ela não grava nada e não injeta nada.
results/ em cada diretório contém os JSONs originais de veredito por execução pontuados por máquina, linhas Xid capturadas do
dmesg, controles positivos e negativos, a auditoria de privilégios do observador e capturas de ambiente
do nó de teste. UUIDs de GPU, seriais de hardware e IPs de nó são redigidos; nada mais
foi alterado.
Publicações de Full Disclosure para ambas as descobertas, incluindo correspondência com o fornecedor e cronogramas de divulgação: https://abhinavagarwal07.github.io
Código PoC e documentação: consulte LICENSE.