Auf der in Deutschland stattfindenden Konferenz 39C3 (Chaos Communication Congress) wurden Details zu 12 zuvor unbekannten und nach wie vor unbereinigten (0-Day) Schwachstellen im GnuPG (GNU Privacy Guard) bekanntgegeben, einem Werkzeug, das mit den Standards OpenPGP und S/MIME kompatible Hilfsprogramme zur Datenverschlüsselung, zur Bearbeitung elektronischer Signaturen, zum Schlüsselmanagement und zum Zugriff auf öffentliche Schlüsselverzeichnisse bietet. Die gefährlichsten Schwachstellen ermöglichen es, die Überprüfung digitaler Signaturen zu umgehen und die Ausführung von Code bei der Verarbeitung von verschlüsselten Daten im ASCII-Format (ASCII Armor) zu erwirken. Arbeiten an Exploit-Prototypen und Patches werden später veröffentlicht. CVE-Identifikatoren wurden bisher noch nicht vergeben.
Die Schwachstellen sind durch Fehler im Code zur Verarbeitung von Daten und zur Analyse von Formaten verursacht und stehen nicht in Zusammenhang mit Lücken in den Krypto-Algorithmen. Beispielsweise führt ein Fehler im Parser zu einem Absturz, wenn es darum geht, tatsächlich signierte Daten zu bestimmen, wodurch Bedingungen geschaffen werden, unter denen die zu überprüfenden Daten nicht mit den signierten Daten übereinstimmen. Dies ermöglicht es einem Angreifer, den Klartext zu manipulieren, ohne Zugang zum privaten Schlüssel zu haben.
Festgestellte Probleme:
- Ein Fehler im Code des Parsers für verschlüsselte Daten, die im ASCII-Armor-Format verteilt werden (Textdateien mit dem Block „BEGIN/END PGP ARMORED FILE“), führt zu einem Schreibzugriff außerhalb des Pufferspeicherbereichs. Dieses Problem kann dazu führen, dass beim Verarbeiten von gpg speziell gestaltete Daten Code ausgeführt wird. Die Schwachstelle manifestiert sich in der Funktion armor_filter() und wird durch eine doppelte Erhöhung des Zählers „n“ in der „for“-Schleife verursacht – trotz der Angabe „n++“ in der Schleife wird der Zähler auch im Schleifenrumpf beim Schreiben von Daten in den Puffer „buf[n++]“ erhöht. Infolgedessen wird ein zusätzliches Byte außerhalb des Puffers geschrieben, und die Variable mit der Größe „ret_len“ erhält einen Wert, der das tatsächliche überschreitet.
- Die Möglichkeit, jede Datei zu erstellen oder zu überschreiben, soweit die aktuellen Zugriffsrechte es zulassen, aufgrund der fehlerhaften Verarbeitung des Inhalts des Feldes „filename“ in einem Datenpaket. Diese Schwachstelle kann genutzt werden, um die Ausführung von Code im System zu ermöglichen, wenn der Empfänger die Befehle „gpg —decrypt poc.enc“ und „gpg poc.enc“ ausführt, um die vom Angreifer gesendete Datei poc.enc anzuzeigen. Die Ausführung von Code kann beispielsweise durch das Erstellen von Dateien ~ / .bash_completion oder ~ / .ssh / authorized_keys erreicht werden.
- Die Möglichkeit, den sichtbaren Text, der dem Benutzer beim Angeben der Option „—decrypt“ und der Überprüfung mit separat gelieferten digitalen Signaturen (Detached Signature, erstellt mit der Option „—detach-sig“ und in einer separaten sig-Datei bereitgestellt) angezeigt wird, zu ersetzen. Das Problem besteht darin, dass bei der getrennten Übermittlung der Nachricht und der sig-Datei ein Angreifer, der den Verkehr im Zwischenbereich (MITM) kontrolliert, Änderungen an der sig-Datei vornehmen kann, nach denen die Überprüfung erfolgreich bleibt, aber beim Anzeigen der Nachricht aus der sig-Datei mit der Option „—decrypt“ anderer Inhalt ausgegeben wird. echo Plaintext > plaintext gpg —detach-sig plaintext # Änderung plaintext.sig durch den Angreifer mit Hinzufügung von zusätzlichem Text gpg —verify plaintext.sig plaintext # verifiziert gpg —decrypt plaintext.sig # verifiziert, aber anderer Text wird ausgegeben
- Die Möglichkeit, eine signierte Nachricht mit beliebigen Daten zu ergänzen, während die erfolgreiche Überprüfung der Signatur erhalten bleibt. Das Problem tritt aufgrund des Abschneidens von Daten an der Grenze von 20000 Zeichen bei der Berechnung des Hashs auf.
- Unkorrekte Überprüfung von Codes für authentifizierte Verschlüsselung (MDC — Modification Detection Codes), die es ermöglichen, mit verschlüsselten Paketen zu manipulieren, sodass der erhaltene Inhalt beim Entschlüsseln als ein anderer Pakettyp verarbeitet wird (z. B. als für die Veröffentlichung vorgesehener öffentlicher Schlüssel erkannt wird).
- Die Möglichkeit, zusätzliche Daten in CS-Signaturen (Cleartext Signature), die mit dem Flag „—not-dash-escaped“ erstellt wurden oder aus separat gelieferten Signaturen (Detached Signature) konvertiert wurden, einzufügen. Diese Schwachstelle kann verwendet werden, um beim Benutzer den falschen Eindruck zu erwecken, welche Daten tatsächlich signiert wurden. Beispielsweise kann der Benutzer aus vertrauenswürdigen Quellen den korrekten Schlüssel zur Überprüfung der digitalen Signatur herunterladen, aber ein Angreifer kann während eines MITM-Angriffs das heruntergeladene iso-Abbild ändern und einen zusätzlichen Hash in die Signatur des Abbilds einfügen, sodass die Überprüfung des manipulierten Abbilds erfolgreich ist, wenn der korrekte Überprüfungsschlüssel im System vorhanden ist.
- Das Einfügen zusätzlicher Daten in die ASCII-Darstellung der CS-Signatur (Cleartext Signature) durch das Einfügen eines Null-Zeichens. Diese Schwachstelle ermöglicht es beispielsweise, beliebigen Text in die Hash-Überschrift einzufügen.
- Unkorrekte Interpretation des OpenPGP-Formats, aufgrund derer die Nachricht „One-Pass Signed Message“ im ASCII-codierten Format als „Cleartext Signature“ interpretiert werden kann, wenn der Header entsprechend verändert wird. Die Schwachstelle ermöglicht es, die ursprünglichen signierten Daten durch schädlichen Inhalt zu ersetzen, während die erfolgreiche Verifizierung vorgetäuscht wird.
- Fehlende klare Trennung in der Ausgabe der Informationen über den Erfolg der Überprüfung der digitalen Signatur und dem Inhalt der Nachricht, was es ermöglicht, gefälschte nicht signierte Nachrichten zu erstellen, die bei der Ausführung von „gpg —decrypt“ wie authentische wirken.
- Möglichkeit, OpenPGP-Nachrichten zu erstellen, die in gpg anders verarbeitet werden als in anderen OpenPGP-Implementierungen. Das Problem resultiert aus der speziellen Behandlung extrem langer Zeilen in der ASCII-Darstellung von OpenPGP-Daten.
- Schaffung von Bedingungen im Prozess der Verifizierung der digitalen Signatur, um den Hash-Prüfalgorithmus auf das unsichere SHA1 zurückzusetzen.
- Möglichkeit, eigene sekundäre Schlüssel (subkey) ohne deren Autorisierung unter Verwendung des privaten Teils des Master-Schlüssels einzusetzen. Der Angriff erfolgt durch Hinzufügen eines gefälschten Schlüsselspeichers mithilfe der Option „—keyring“.
Zusätzlich wurden zwei Schwachstellen in minisign, einem vereinfachten Werkzeug zur Erstellung und Überprüfung digitaler Signaturen, entdeckt. Beide Schwachstellen (1, 2) ermöglichen die Verwendung von Steuersequenzen des Terminals („\e[1E“) oder von Sonderzeichen („\r“) im Kommentarfeld zur Modifikation der Programmausgabe, beispielsweise zur Veränderung der Information über das Verifizierungsergebnis.
Quelle: opennet.ru
