Nvidia spart auf Kosten der Sicherheit
Einen Angriffsvektor auf die BPMP-Firmware stellt deren USB Recovery Mode zusammen mit einem besonderen Feature des Boot-ROMs dar. Der Recovery Mode ermöglicht es, Daten an das SoC zu übertragen, ähnlich wie Fastboot. Auch hier ist die Software fehlerhaft, daher können beliebig viele Daten übertragen werden. Die schreibt die USB-Hardware dann Stück für Stück in den Adressraum.
Durch einen Fehler in der USB-Hardware kann damit der gesamte 32-Bit-Adressraum überschrieben werden. Dies zum Ausführen eigener Software nutzen, ist allerdings nicht trivial: Der USB-Controller kann nur in den System-RAM schreiben, der BPMP hält aber seinen Stack in einem eigenen, getrennten Speicher. Das verhindert ein einfaches Überschreiben von Rücksprungadressen.
Der isolierte Speicher des BPMP lässt sich teilweise manipulieren, indem die vom USB-Controller verwendeten Datenstrukturen durch diesen selbst überschrieben werden. Das kann genutzt werden, um den Bootloader eine neue Datenstruktur an einer beliebigen, an 16 Byte ausgerichteten Adresse anlegen zu lassen – auch im isolierten Speicher.
Kaputt gepatcht
Die Möglichkeiten sind damit allerdings eingeschränkt, der Inhalt der neuen Datenstruktur kann nicht frei kontrolliert werden. Den BPMP zur Ausführung von Code aus dem RAM zu bewegen, funktioniert aber aufgrund einer weiteren Sicherheitslücke.
Die befindet sich in einem Feature, mit dem sich Nvidia kostspielige Hardware-Revisionen ersparen wollte: Um Fehler in der integrierten Firmware zu korrigieren, kann diese mittels Patches verändert werden. Die werden zwar im Rahmen der Produktion konfiguriert, können aber für komplexere Änderungen Systemrufe auslösen – und der entsprechende Handler lässt sich nutzen, um den BPMP-Code zum Sprung an eine Adresse im System-RAM zu bringen.
Dafür wird ein Teil des Codes manipuliert, was in Kombination mit einem passenden Aufruf – den ergibt das Auslesen des Device Descriptors des USB Control Endpoints – für einen Sprung an eine Adresse im System-RAM genutzt werden kann. Eine Beschreibung aller Sicherheitslücken ist im Codeberg-Repository von Elise Amber Katze(öffnet im neuen Fenster) nachzulesen.
Ein Problem sollte der Hack derweil nicht darstellen. Nvidia stellte die Produktion des 2016 vorgestellten Tegra TX2 aus der Pascal-Generation ein. Bei späteren Tegra-Varianten wurden zumindest die Sicherheitslücken in Cboot korrigiert.



