Schwachstelle bei der Signaturerstellung mit ECDSA-Privatschlüsseln auf der NIST-P521-Kurve im PuTTY-Tool
- Alle Versionen von PuTTY von 0.68 bis 0.80 enthalten eine schwerwiegende Schwachstelle im Code zur Erzeugung von Signaturen mit ECDSA-Privatschlüsseln, die die NIST-P521-Kurve verwenden
- Tritt auf, wenn PuTTY oder Pageant beim Authentifizieren gegenüber einem SSH-Server eine Signatur aus dem Schlüssel erzeugt
- Dieser Schwachstelle wurde CVE-2024-31497 zugewiesen
- Entdeckt von Fabian Bäumer und Marcus Brinkmann von der Ruhr-Universität Bochum
Auswirkungen der Schwachstelle
- Die Auswirkung dieser Schwachstelle ist die Offenlegung des Privatschlüssels
- Wenn ein Angreifer einige Dutzend signierte Nachrichten und den öffentlichen Schlüssel besitzt, hat er genügend Informationen, um den Privatschlüssel wiederherzustellen
- Dadurch kann er Signaturen fälschen, als wäre er der Benutzer, und sich bei allen Servern anmelden, die diesen Schlüssel verwenden
- Um solche Signaturen zu erhalten, muss der Angreifer nur kurz einen Server kompromittieren, bei dem sich mit dem Schlüssel authentifiziert wird, oder kurz Zugriff auf eine Pageant-Instanz mit dem Schlüssel haben
- Diese Signaturen werden jedoch einem passiven Lauscher auf einer SSH-Verbindung nicht offengelegt
- Wenn Sie einen Schlüssel dieses Typs haben, wird empfohlen, ihn sofort zu verwerfen
- Sie sollten den alten öffentlichen Schlüssel aus allen OpenSSH-
authorized_keys-Dateien und denselben Dateien auf anderen SSH-Servern entfernen, damit Signaturen mit dem kompromittierten Schlüssel keinen Wert mehr haben
- Erzeugen Sie anschließend ein neues Schlüsselpaar als Ersatz
Betroffene Schlüsseltypen
- Der einzige betroffene Schlüsseltyp ist 521-Bit-ECDSA
- Ein Schlüssel, bei dem in Windows-PuTTYgen am Anfang des Felds „Key fingerprint“
ecdsa-sha2-nistp521 angezeigt wird, der in Windows-Pageant beim Laden als „NIST p521“ beschrieben wird oder der im SSH-Protokoll oder in der Schlüsseldatei eine ID hat, die mit ecdsa-sha2-nistp521 beginnt
- ECDSA mit anderen Größen und andere Schlüsselalgorithmen sind nicht betroffen
- Insbesondere Ed25519 ist nicht betroffen
Details zum Fehler
- Alle DSA-Signaturschemata müssen während der Signaturerstellung einen Zufallswert erzeugen
- Dieser ist als „nonce“ (ein kryptografischer Begriff für einen Wert, der nur einmal verwendet wird) oder unter dem Buchstaben k bekannt
- Es ist gut bekannt, dass ein Angreifer den Privatschlüssel sofort wiederherstellen kann, wenn er das verwendete k errät oder zwei mit demselben k erzeugte Signaturen findet
- Daher ist es riskant, DSA-Signaturen auf Systemen ohne Quelle hochwertiger Zufälligkeit zu erzeugen
- Da PuTTY unter Windows entwickelt wurde, gab es anfangs überhaupt keinen kryptografischen Zufallszahlengenerator
- Deshalb hat PuTTY k bisher mit einer deterministischen Methode ohne jegliche Verwendung von Zufallszahlen erzeugt
- Die Kerntechnik besteht darin, einen sicheren Hash zu berechnen, der sowohl die zu signierende Nachricht als auch den Privatschlüssel in die Hash-Eingabe einbezieht
- Diese Technik ist heute Mainstream, und RFC 6979 dokumentiert eine konkrete und gut bekannte Methode dafür
- PuTTY tat jedoch seit 2001 im Wesentlichen dasselbe, hielt sich aber nicht an diese Spezifikation, weil der RFC erst 2013 veröffentlicht wurde
Ursache der Schwachstelle
- Die Technik von PuTTY funktioniert so, dass ein SHA-512-Hash erzeugt und anschließend modulo q reduziert wird, wobei q die Gruppenordnung des im DSA-System verwendeten Werts ist
- In allen Fällen außer P521 ist die Verzerrung, die durch die Reduktion einer 512-Bit-Zahl modulo q entsteht, vernachlässigbar
- Bei P521 ist q jedoch 521 Bit groß (also größer als 512 Bit), sodass die Reduktion einer 512-Bit-Zahl modulo q überhaupt keinen Effekt hat
- Das führt zu k-Werten, bei denen die oberen 9 Bit immer 0 sind
- Diese Verzerrung ermöglicht einen Angriff zur Wiederherstellung des Schlüssels
Inhalt der Fehlerbehebung
- Zur Behebung dieser Schwachstelle wurde das bisherige System von PuTTY zur Erzeugung von k für alle DSA- und ECDSA-Schlüsseltypen vollständig aufgegeben und auf die Technik aus RFC 6979 umgestellt
- EdDSA-Schlüssel wie Ed25519 verwendeten bereits ein anderes System und bleiben unverändert
- Das ändert jedoch nichts daran, dass bei jeder Signatur, die mit dem bisherigen k-Generator erstellt wurde, bereits Informationen über bestehende P521-Privatschlüssel offengelegt wurden
Meinung von GN⁺
- Es handelt sich um eine vergleichsweise kürzlich entdeckte Schwachstelle, die aber offenbar auf ein Problem mit einer seit 2001 verwendeten Methode zurückgeht. Man kann dies als Beispiel für das Risiko eines benutzerdefinierten Implementierungsansatzes sehen, der von Standards abweicht.
- Diese Schwachstelle betrifft zwar nur einen bestimmten Schlüsseltyp, kann aber zu einem schwerwiegenden Problem werden, wenn dieser Schlüssel verwendet wurde. Daher ist es wichtig, betroffene Schlüssel sofort zu verwerfen.
- In Open-Source-Projekten sollte man sich bei kryptografischen Komponenten an Standards halten, und auch externe Prüfungen erscheinen notwendig. Insbesondere die Erzeugung von Zufallszahlen ist sehr wichtig, daher dürfte es sicherer sein, sich auf das Betriebssystem oder auf geprüfte Bibliotheken zu verlassen.
- PuTTY ist ein weit verbreiteter Open-Source-Terminalemulator mit Unterstützung für die Protokolle SSH, Telnet und Rlogin und wird dank seiner Funktion zum Speichern von Verbindungsinformationen bequem genutzt. Künftig sollte man aktiv auf Sicherheits-Patches für Schwachstellen reagieren.
- Als Alternativen zu PuTTY unter macOS oder Linux kommen etwa die standardmäßige Terminal-App oder iTerm2 infrage. Unter Windows können Windows Terminal, PowerShell oder Cmder als Alternativen erwogen werden.
4 Kommentare
Ach..
Ich glaube nicht, dass ich jemals einen Schlüssel dieses Typs verwendet habe, aber ich habe vorsichtshalber trotzdem ein Update gemacht.
Nachdem ich das gesehen habe, habe ich sofort auf 0.81 aktualisiert, haha.
Hacker-News-Kommentare
Im Folgenden eine Zusammenfassung der Hacker-News-Kommentare: