Die Programme KSSL, Rekonq, Arora und PSI IM enthalten Sicherheitslücken, die zulassen, dass ein entfernter Angreifer SSL-Zertifikate fälschen kann. Die Ursache ist ein Fehler beim Darstellen des Common Name mit QLabel-Objekten der Qt-Bibliothek.
KSSL, Rekonq, Arora und PSI IM sind verschiedene Qt-basierte Pakete, die allesamt mit SSL-Zertifikaten umgehen können. KSSL ist die KDE-Klassenbibliothek, die für das Verarbeiten von SSL-Verbindungen zuständig ist. Rekonq und Arora sind Webkit-basierte Webbrowser, PSI IM ein Instant Messenger. Diese Qt-Applikationen verwenden zum Darstellen von Zertifikat-Information häufig QLabel-Objekte der Qt-Bibliothek. Solche Labels können mit verschiedenen Textformaten umgehen, wobei der Programmierer das Format eines QLabel mit der Methode “setTextFormat(Qt::TextFormat)” der QLabel-Klasse setzt. Dabei ist “Qt::TextFormat” ein “Enum” mit folgenden Einträgen:
Qt::PlainText : raw Text Qt::RichText : komplexer (rich) Text (mit Tabellen, Rahmen, Listen, usw.) Qt::AutoText : Automatische Erkennung des Textformates
Standardmäßig verwendet QLabel “Qt::AutoText”, es versucht also, das Textformat anhand des Textes selbst zu erkennen. Die vier oben genannten Anwendungen verwenden genau diese Methode, QLabels sind also nicht mit “Qt::PlainText” oder “Qt::RichText” initialisiert. Das gilt auch für das Anzeigen von Zertifikat-Informationen in GUI-Dialogen. In diesem Zusammenhang lässt sich das ausnutzen, um den Common Name (CN) eines Zertifikates zu fälschen und dem Anwender so vorzugaukeln, das Zertifikat stamme von einer bestimmten Seite. Dazu muss der Angreifer Rich Text mit einer Tabelle im Common Name verwenden. Damit kann er beliebige Common Names vortäuschen.
Ein Exploit-Zertifikat lässt sich wie folgt mit OpenSSL erzeugen:
$f openssl genrsa -des3 -out PoC.key 1024
Dieses Kommando generiert zunächst ein Schlüsselpaar in “PoC.key”. Angenommen, der Angreifer möchte nun ein Google-Zertifikat vortäuschen. Dazu könnte er folgendermaßen ein Zertifikat erzeugen:
$ openssl req -new -x509 -key PoC.key -out PoC-cert.pem -days 1095 Enter pass phrase for PoC.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. - ----- Country Name (2 letter code) [AU]:GB State or Province Name (full name) [Some-State]:England Locality Name (eg, city) []:London Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nth Dimension Organizational Unit Name (eg, section) []:Google Inc Common Name (eg, YOUR name) []:www.google.com<table>.nth-dimension.org.uk Email Address []:
Das “<table>”-Tag im Common-Name-Eintrag hat zur Folge, dass die Qt-Dialoge “www.google.com” statt “.nth-dimension.org.uk” anzeigen. Natürlich ist diese Attacke nur sinnvoll, wenn der Angreifer das Zertifikat von einer offiziellen und vertrauenswürdigen CA unter “.nth-dimension.org.uk” erstellen läßt. Die CA wird dann dieses Zertifikat unter der Domäne “.nth-dimension.org.uk” erzeugen, denn sie glaubt dem Angreifer, dass er von dort kommt. Das Opfer aber, das dieses Zertifikat angezeigt bekoomt, sieht auf der GUI nur “www.google.com” und denkt, dass es sich um ein Zertifikat für Google handelt.
Auch ohne CA lässt sich das oben selbsterzeugte Exploit-Zertifikat testen. Dazu muss man einfach einen SSL-Server aufsetzen:
$ openssl s_server -www -cert PoC-cert.pem -key PoC.key -accept 8080 Enter pass phrase for PoC.key: Using default temp DH parameters Using default temp ECDH parameters ACCEPT
Besucht man diesen unter “https://localhost:8080” mit dem Konqueror-Browser auf einem anfälligen KDE-System, wird die Anwendung als Common Name “www.google.com” anzeigen.
Diese Schwachstelle lässt sich beheben, indem man die Textformate der QLabels auf “Qt::PlainText” setzt und so Rich-Text-Common-Names ausschließt.
Die Sicherheitslücke betrifft KSSL, wie es in KDE SC 4.6.0 bis einschließlich 4.7.1. enthalten ist, frühere Versionen können auch betroffen sein. Der Browser Rekonq ist bis mindestens Version 0.7.0 betroffen. Das KDE-Projekt hat Quelltext-Patches veröffentlicht, viele Distributoren haben diese in ihre Binärpakete eingepflegt.

