Nvidia: Applaus *klatsch* :(

Nvidia hat mal wieder den IT-Security Vogel abgeschossen: CVE‑2020‑5979 – Privilege Escalation im Configtool

Nvidia: Applaus *klatsch* 🙁

Nvidia Entwickler geben in Ihrem September Patch bekannt, daß sie es mal wieder geschafft haben: CVE Score 7.8

CVE‑2020‑5979:

NVIDIA Display Driver contains a vulnerability in the Control Panel component in which a user is presented with a dialog box for input by a high-privilege process, which may lead to escalation of privileges.

Neben einem Dutzend anderer Schwachstellen für verschiedene Windows Komponenten von Nvidia, sticht die obige Schwachstelle heraus. Da hat der Entwickler, der die Funktion eingebaut hat, aber mal so richtig geschlafen. Muß man sich ungefähr so vorstellen (rein vom Prinzip her):

uibutton.onclick() {

System.shell.exec(„setuidprocess –commonopts=whatyoulike –target=“ + ui.getUserInputByTextRequest(„Pls enter the target type of you gpu“) );

}

Wenn ich einen Prozess der privilegiert ist, Argumente übergeben muß, dann in einer Art und Weise, daß ein „Angreifer“ nicht einfach seine Wunsch Argumente eingeben kann und die dann ungefiltert z.B. in einer Shell übernommen werden. In der Realität dieses Bugs wird es vermutlich nicht sooo trivial sein. Leider ist noch nichts über die Schwachstelle zu finden, außer dem, was Nvidia da schreibt, deswegen ist es der Phantasie des Lesers überlassen, sich ein beliebiges passendes Horrorszenario auszudenken 😉

Im Beispiel oben könnte das so aussehen:

System.shell.exec(„setuidprocess –commonopts=whatyoulike –target=vgpu;rm -rf /“);

Berühmt sind solche Injection Attacken im Zusammenhang mit SQL Datenbanken. Wenn Argumente aus dem Netz einfach ungefiltert übernommen werden ist das per se eine schlechte Idee. Da man eh derzeit nur spekulieren kann, wie und was da abläuft, sei Euch hiermit geraten ein Update für Nvidia-Komponenten zu starten, sobald Ihr mit Lesen fertig sein 😉

Nvidia: Fehlercodes

Seit einigen Wochen nervt meine GTX 1050, eine schöne Gelegenheit Euch mal das Nvidia Fehlersystem näher zu bringen.

Nvidia: Fehlercodes

Zuerst müssen wir natürlich erstmal wissen, welcher Fehler überhaupt aufgetreten ist. Dazu braucht es nur dmesg:

$ dmesg |grep Xid
[ 5552.987812] NVRM: Xid (PCI:0000:01:00): 32, pid=1550, Channel ID 00000033 intr 00040000
[ 5731.173383] NVRM: Xid (PCI:0000:01:00): 32, pid=11658, Channel ID 00000033 intr 00040000
[ 5731.173633] NVRM: Xid (PCI:0000:01:00): 32, pid=11658, Channel ID 00000033 intr 00040000
[ 6326.298292] NVRM: Xid (PCI:0000:01:00): 32, pid=11982, Channel ID 00000033 intr 00040000
[ 6326.298525] NVRM: Xid (PCI:0000:01:00): 32, pid=11982, Channel ID 00000033 intr 00040000

Wie bei allen Kernelmeldungen steht am Anfang die Kernelzeit in Sekunden seit dem Boot. Danach kommt als erstes die PCI ID des Gerätes, aber da selten jemand zwei oder mehr Grafikkarten im PC hat, ist das für die meisten uninteressant. Der Fehlercode selbst ist die unscheinbare Zahl nach der PCI ID, hier „32“.

Auf der Webseite von Nvidia: xid errors findet sich dann die Beschreibung für den Fehler und erste Hinweise zur Ursache:

XIDFailureCauses
HW ErrorDriver ErrorUser App ErrorSystem Memory CorruptionBus ErrorThermal IssueFB Corruption

31

GPU memory page fault

X

X

32

Invalid or corrupted push buffer stream

X

X

X

X

X

Xid 32 meint also, daß der Datenstrom zu Grafikkarte unterbrochen wurde. Mögliche Ursachen: Der Graka-Speicher ist defekt, der PCI Bus hat ne Macke oder irgendwas ist überhitzt. (FB Corruption meint FRAMEBUFFER kaputt, das sind die Strukturen im OS/Programm welche die Grafik handhaben. )

Wie man vorn sehen kann, handelt sich nicht um einen HW Fehler, sondern am wahrscheinlichsten um einen Grafikkartentreiberbug.

Ab jetzt kann man nur noch spekulieren, weil das ja alles mögliche meinen kann. Es geht sogar soweit, daß Xid 32 Probleme bei der Stromzuführung in die Grafikkarte meinen kann, also wenn das Netzteil schwächelt. Da aber der Bildschirm nicht ausgeht, hat die Graka noch genug Saft, das kann es also eigentlich nicht sein.

Jetzt können wir noch etwas ausschließen: Thermalprobleme

55 Grad sind völlig normal. Im Bild oben sind zwar die Lüfter aus, aber die funktionieren nachweislich, denn man hört sie bei der Arbeit 😉

Das Nvidia Settingstool (oben im Bild) kann man beim Gamen auf dem zweiten Monitor mitlaufen lassen und so die Anzeige im Auge behalten.

Vielleicht doch nur ein Treiberproblem?

Jetzt bringt uns das nicht weiter. Wir haben zwar 2 Sachen ausschließen können, aber es blieben immer noch FB Problem, Memoryproblem. Keins davon kann man prüfen.

Was man jetzt noch prüfen könnte, steht im /var/log/messages sofern man das noch hat. ( Habt Ihr nicht mehr, nur noch Systemd? Ihr tut mir so leid .. ehrlich 🙁 )

$ grep NVRM /var/log/messages

Jul 23 00:43:18 eve kernel: NVRM: Xid (PCI:0000:01:00): 31, pid=1923, Ch 00000020, intr 10000000. MMU Fault: ENGINE GRAPHICS GPCCLIENT_PE_0 faulted @ 0x1_0ca39000. Fault is of type FAULT_PTE ACCESS_TYPE_READ

Andere Fehlernummer.. interessant. Ist ein reiner Anwendungsbug. In diesem Fall in WINE. Wine hat in den letzten Wochen unheimlich viele Updates rausgehauen. Es wäre also wirklich im Bereich des Möglichen, daß Wine bzw. der 3D Treiber in Wine ( DXVK ) hier die eigentliche Ursache sind.

Wine hat allerdings noch ganz andere Probleme, die die Entwickler aber leider nicht wahr haben wollen, weil Bugreports ignoriert werden. Ab Wine-Staging 5.5+ kommt es zu einem wahrlich irren Bug:

Es kommt in Verbindung mit dem Grakafehler zu einem IO-Fehler mit dem DVD-ROM, welches aber gar nicht benutzt wird noch eine DVD drin hat. Das sieht dann so aus:

[22163.062313] sr 1:0:0:0: [sr0] tag#26 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=0s
[22163.062316] sr 1:0:0:0: [sr0] tag#26 Sense Key : Not Ready [current]
[22163.062319] sr 1:0:0:0: [sr0] tag#26 Add. Sense: Medium not present – tray closed
[22163.062321] sr 1:0:0:0: [sr0] tag#26 CDB: Read(10) 28 00 00 00 00 00 00 00 08 00
[22163.062323] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 0
[22163.062366] sr 1:0:0:0: [sr0] tag#3 unaligned transfer
[22163.062368] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062370] Buffer I/O error on dev sr0, logical block 0, async page read
[22163.062382] sr 1:0:0:0: [sr0] tag#4 unaligned transfer
[22163.062383] blk_update_request: I/O error, dev sr0, sector 1 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062384] Buffer I/O error on dev sr0, logical block 1, async page read
[22163.062393] sr 1:0:0:0: [sr0] tag#5 unaligned transfer
[22163.062394] blk_update_request: I/O error, dev sr0, sector 2 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062395] Buffer I/O error on dev sr0, logical block 2, async page read
[22163.062404] sr 1:0:0:0: [sr0] tag#6 unaligned transfer
[22163.062405] blk_update_request: I/O error, dev sr0, sector 3 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062406] Buffer I/O error on dev sr0, logical block 3, async page read
[22163.062415] sr 1:0:0:0: [sr0] tag#7 unaligned transfer
[22163.062416] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062417] Buffer I/O error on dev sr0, logical block 4, async page read
[22163.062425] sr 1:0:0:0: [sr0] tag#8 unaligned transfer
[22163.062427] blk_update_request: I/O error, dev sr0, sector 5 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062427] Buffer I/O error on dev sr0, logical block 5, async page read
[22163.062436] sr 1:0:0:0: [sr0] tag#9 unaligned transfer
[22163.062437] blk_update_request: I/O error, dev sr0, sector 6 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062438] Buffer I/O error on dev sr0, logical block 6, async page read
[22163.062446] sr 1:0:0:0: [sr0] tag#10 unaligned transfer
[22163.062448] blk_update_request: I/O error, dev sr0, sector 7 op 0x0:(READ) flags 0x0 phys_seg 2 prio class 0
[22163.062448] Buffer I/O error on dev sr0, logical block 7, async page read

und das ist nur beim Starten von Wine, da ist noch nicht mal eine GFX Operation gelaufen. Mit WIne 5.13 geht nicht mal ein Fenster auf, das ist derzeit komplett im *****.

Das bestärkt mich in der Annahme, daß es sich um reine Driverbugs handelt, die von WINE getriggert werden. Rein zur Vorsicht, habe ich das .nv/GLCache geleert, vielleicht lag da ja noch was defektes drin.

Mehr ist zu dem Zeitpunkt leider nicht feststellbar. Jetzt hilft nur Testen, updaten, Testen und weiter Testen.

 

Nvidia: 2 Sicherheitslücken im Linux-Treiber

Zwei Sicherheitslücken sind im NVIDIA GFX-Kartentreiber für Linux enthalten, wenn Ihr noch nicht die brandaktuellste Version haben solltet, was schwierig sein dürfte.

Nvidia: 2 Sicherheitslücken im Linux-Treiber

Laut der Bugbeschreibung bei Nvidia, handelt sich dabei bei einer Lücke um einen Bug in der IPC Communication API, was man braucht um Daten zwischen einzelnen Prozessen hin und her zu schicken. Dieser Fehler kann dazu genutzt werden um mit erweiterten Rechten eingeschleusten Code auszuführen.

CVE-IDs
Addressed
Software ProductOperating SystemDriver BranchAffected VersionsUpdated Versions
CVE‑2020‑5963
CVE‑2020‑5967
GeForceLinuxR450All versions prior to 450.51450.51
Quadro, NVSLinuxR450All versions prior to 450.51450.51
R440All versions prior to 440.100440.100
R390All versions prior to 390.138390.138
TeslaLinuxR450All R450 versionsAvailable the week of June 29, 2020
R440All versions prior to 440.95.01440.95.01
R418All versions prior to 418.152.00418.152.00

Die zweite Schwachstelle ist dann schon schwieriger auszunutzen, da eine RACE Condition ist, es kämpfen also zwei Prozesse um eine Ressource. Der Gewinn des RACE würde einen DOS erlauben. Was ein Angreifer auf einem DesktopPC davon haben würde die Grafikkarte zu crashen, naja. Ist trotzdem gut, daß es gefixt wurde.

Für Fedora lautet die Treiberversion für meine GFX-Karte 440.82 und muß daher aktualisiert werden. Da diese aus dem Repo von RPMFusion stammt, dürfte der Verbreitungsgrad und damit der Updatezwang unter Fedora/Centos/RHEL Benutzern entsprechend hoch sein. Wie das zu Problemen führen kann und was man das machen muß, lest Ihr hier: Nvidia, Fedora, RPMFusion und der Bug, der nicht sein soll.

Bei RPMFusion habe ich heute schon angeklopft, daß Updates benötigt werden.

Quelle: https://nvidia.custhelp.com/app/answers/detail/a_id/5031