
PoCs und Nachweise für zwei NVIDIA-Linux-GPU-Treiber-Funde, die vom Hersteller als erwartetes/beabsichtigtes Verhalten geschlossen wurden: GPU-Prozess-Telemetrie über NVML hinweg über UID-Grenzen sowie ein unprivilegierter Xid-31-Kopier-Engine-MMU-Fehler durch eine Peer-Access-Teardown-Race-Condition.
Proof-of-Concept-Code und rohe Beweise für zwei Findings im NVIDIA Linux GPU-Treiber, beide über NVIDIAs VDP gemeldet und beide von NVIDIA als beabsichtigt/erwartetes Verhalten geschlossen. Veröffentlicht, damit das Verhalten dokumentiert und reproduzierbar ist; keines hat eine CVE und keines wird behoben.
| # | Finding | Klasse | Ergebnis des Anbieters | Verzeichnis |
|---|
| 1 | Cross-UID-GPU-Prozess-Telemetrie über NVML | Informationsoffenlegung (CWE-200 / CWE-862) | „erwartetes Verhalten"; öffentliche Offenlegung schriftlich autorisiert am 2026-08-20 | 01-nvml-cross-uid-telemetry/ |
| 2 | Unprivilegierter Xid-31-Copy-Engine-MMU-Fehler durch P2P-Teardown-Race | GPU-Fehler, unprivilegiert und deterministisch | „beabsichtigtes Verhalten und daher kein Bug", geschlossen am 2026-08-04 | 02-xid31-p2p-teardown-race/ |
Getestet mit Treiber 595.71.05-open, A100-SXM4-80GB x4 (NV4-Vollmesh, kein NVSwitch, MIG aus), Ubuntu 24.04 / Kernel 6.8.0, CUDA-Toolkit 12.9. Finding 1 wurde ebenfalls auf 565.57.01-open reproduziert.
Finding 1 ist eine echte Cross-UID-Exposition. Finding 2 ist ein Fehler mit unbewiesener Auswirkung. Sie sind nicht gleich stark und werden nicht als solche präsentiert.
Finding 2 zeigt, dass ein unprivilegierter Benutzer deterministisch ein NVLink-GPU-Paar stören kann
(5/5, PID-zugeordnet, gegen 4/4 saubere Negativkontrollen). Es zeigt nicht, dass der
Fehler den auslösenden Prozess überlebt. Diese Messung wurde nie durchgeführt — die Testumgebung setzte die
GPU reflexartig vor dem Sondieren zurück, und der Knoten wurde außer Betrieb genommen, bevor es wiederholt werden konnte. Zwei
unabhängige Beweisstücke sprechen dafür, dass sich der Fehler selbst behebt: NVIDIAs Xid-Katalog klassifiziert
Xid 31 mit der Sofortmaßnahme RESTART_APP, und das eigene Recovery-Action-Feld der GPU las None
vor dem Zurücksetzen. Bis jemand die Post-Kill-Kanarienvogel-Prüfung in
02-xid31-p2p-teardown-race/ ausführt, behandeln Sie dies als einen Fehler mit
unbewiesenem Schadensradius, nicht als Denial of Service.
Wenn Sie ein NVLink-Paar übrig haben, ist dieses eine Experiment das Wertvollste, was jemand hier beitragen kann. Es dauert ein paar Minuten.
git clone https://github.com/abhinavagarwal07/nvidia-gpu-security-poc
cd nvidia-gpu-security-poc
./capture_env.sh # zeichnet Geräteberechtigungen, Treiber, Topologie, /proc-Optionen Ihres Hosts auf
# Finding 1 — benötigt einen zweiten Benutzer, der eine beliebige CUDA-Workload ausführt
(cd 01-nvml-cross-uid-telemetry/poc && make && ./nvml_harvest)
# Finding 2 — benötigt zwei NVLink-verbundene GPUs. Stört ein GPU-Paar. Nicht auf gemeinsam genutzter Hardware ausführen.
(cd 02-xid31-p2p-teardown-race/poc && ./build.sh && \
CUDA_VISIBLE_DEVICES=0,1 ./p2p_teardown_race_verbose --a 0 --p 1)
Die Ausgabe von capture_env.sh ist das, was Sie anhängen sollten, wenn Sie eine Abweichung von unseren Ergebnissen melden — sie
zeichnet ls -l /dev/nvidia*, die /proc/driver/nvidia/params-Gerätemodus-Einträge, die /proc-
Mount-Optionen (ein hidepid=-Mount ändert, was Finding 1 ergibt), Topologie, Treiber- und pynvml-
Versionen auf.
Finding 2 stört absichtlich ein GPU-Paar. Es erzeugt Xid 31-Einträge im Kernel-Log und kann
nvidia-smi --gpu-reset erfordern, um behoben zu werden — und auf Ampere-Generation-NVLink/NVSwitch-Systemen
dokumentiert NVIDIA, dass die Wiederherstellung im Fall einer fatalen Trunk-Verbindung eine fabric-weite Operation ist, keine
Einzel-GPU-Operation. Führen Sie es nur auf Hardware aus, die Ihnen gehört oder für deren Störung Sie eine schriftliche Autorisierung haben, ohne
Mitbenutzer. Alle ursprünglichen Tests wurden auf einem alleinigen, forscherkontrollierten Knoten unter einer
autorisierten Cluster-Lease durchgeführt.
Finding 1 ist schreibgeschützt und passiv. Es liest Telemetrie, die der Treiber bereits jedem lokalen Benutzer zugänglich macht; es schreibt nichts und injiziert nichts.
results/ in jedem Verzeichnis enthält die ursprünglichen maschinenbewerteten JSON-Verdikte pro Lauf, erfasste
dmesg-Xid-Zeilen, Positiv- und Negativkontrollen, das Beobachter-Privilegien-Audit und Umgebungs-
erfassungen vom Testknoten. GPU-UUIDs, Hardware-Seriennummern und Knoten-IPs sind redigiert; nichts anderes
wurde verändert.
Full-Disclosure-Beiträge für beide Findings, einschließlich Anbieterkorrespondenz und Offenlegungs- zeitplänen: https://abhinavagarwal07.github.io
PoC-Code und Dokumentation: siehe LICENSE.