Ein Speicherüberlauf in der TPM-2.0-Spezifikation hat zur Folge, dass Angreifer unberechtigt Daten lesen und Befehle ausführen können.
Das Trusted Platform Module (TPM), ein Chip nach der TCG-Spezifikation (Trusted Computing Group), erweitert einen Computer oder verwandte Geräte um grundlegende Sicherheitsfunktionen, etwa solche für den Lizenz- oder Datenschutz. Zu den wichtigsten Features von TPM zählt das Speichern von Keys: Kryptografische Schlüssel für geschützte Dateien und Verbindungen lassen sich vor Angreifern geschützt direkt auf dem TPM-Chip speichern. Dasselbe gilt für sensible Informationen wie Passwörter und Zertifikate. Hinzu kommt ein Integritätsschutz: TPM kann sicherstellen, dass der Computer nicht von schädlicher Software befallen wurde, indem es die Unversehrtheit des Systems überwacht. Der 2014 veröffentlichte Standard TPM 2.0 wird ab Windows 8 beziehungsweise Linux-Kernel 4.0 unterstützt.
Die TPM Reference Library stellt eine Implementierung des TPM-Standards dar. Die Bibliothek enthält Funktionen und Schnittstellen, die es Entwicklern ermöglichen, TPM-Funktionen in ihre Anwendungen zu integrieren. Die TPM 2.0 Library Specification legt die Implementierung dieser Bibliothek akribisch fest [1]. Dort findet sich neben einer allgemeinen Beschreibung der Architektur auch die C-Code-Implementierung verschiedener Support-Funktionen. Zusätzlich steht eine Referenzimplementierung der Library auch via Github zur Verfügung [2]. Der Codeteil der Spezifikation definiert unter anderem zwei Funktionen für das Ver- und Entschlüsseln von Parametern. Sie sollen davor schützen, dass Angreifer die Kommunikation zwischen der Software und dem TPM abfangen und so unter Umständen Parameter modifizieren.
Das CERT hat Ende Februar 2023 gemeldet [3], dass die Funktion »CryptParameterDecryption()« einen Speicherzugriff außerhalb der eigentlichen Grenzen (Out-of-Bounds-Fehler) zulässt. Ein Angreifer kann dadurch zwei Bytes an Daten lesen, die nicht zur aktuellen Session gehören. Kritischer ist allerdings, dass sich auch zwei Bytes hinter dem Ende des aktuellen Befehlspuffers schreiben lassen. Laut CERT ermöglicht das einem authentifizierten lokalen Angreifer, manipulierte Befehle an das TPM zu senden. So kann er Zugriff auf sensible Daten erhalten, geschützte Daten in der TPM-Firmware überschreiben, eigenen Code innerhalb des TPMs ausführen und das System zum Absturz bringen.
Laut der TPM-2.0-Errata [4] wurden nun die Funktionen »CryptParameterDecryption()« und »CryptParameterEncryption()« korrigiert. Beide unterließen es bislang, die Länge des zu ver- respektive entschlüsselnden Puffers (Argument »*buffer«) zu prüfen. Die Referenzimplementierungen der zwei Funktionen wurde nun diesbezüglich korrigiert. Unter anderem liefert die korrigierte »CryptParameterDecryption()« jetzt den Rückgabewert »TPM_RC_INSUFFICIENT«, falls der Puffer nicht genug Daten enthält. Entsprechend reagiert das Gegenstück »CryptParameterEncryption()« mit dem Rückgabewert »TPM_RC_FAILURE«, falls der Puffer zu klein ausfällt. Diese zusätzlichen Kontrollen beseitigen die bisherige Schwachstelle. (jcb)
Infos
- TPM 2.0 Library Specification: https://trustedcomputinggroup.org/resource/tpm-library-specification
- TPM 2.0 Reference Implementation: https://github.com/microsoft/ms-tpm-20-ref/
- Vulnerability Note VU#782720: https://kb.cert.org/vuls/id/782720
- Korrektur der TPM-Spezifikation: https://trustedcomputinggroup.org/resource/errata-for-tpm-library-specification-2-0/





