ChatGPT-Sicherheitslücke: Ein geteilter Link reichte für die Kontoübernahme
Eine ChatGPT-Sicherheitslücke erlaubte die Kontoübernahme per öffentlichem Chat-Link und das Mitlesen fremder Chats. OpenAI zahlte 5.000 USD. So lief der Angriff.
Dieser Artikel in anderen Sprachen:العربيةEnglishEspañolFrançaisItaliano日本語Polski简体中文
In diesem Artikel
Am 28. Oktober hat Mukul Goyal von Parameter eine ChatGPT-Sicherheitslücke beschrieben, über die sich ein Konto mit einem ganz normalen öffentlichen Chat-Link (chatgpt.com/share/…) übernehmen ließ. Der Code des Angreifers lief in der eingeloggten Sitzung der Person, die den Link öffnete. OpenAI hat die Meldung am 26. Oktober geschlossen und 5.000 USD aus dem Bug-Bounty-Programm ausgezahlt.
So funktionierte die ChatGPT-Sicherheitslücke
Der Angriff ist eine Kette aus vier Fehlern (so beschreiben es die Forscher):
- Ein interaktives Diagramm im Chat lud MathLive, eine Open-Source-Bibliothek zum Eingeben mathematischer Formeln. Die Bibliothek nahm Nachrichten zwischen Frames von beliebigen Absendern an, ohne zu prüfen, wer sie geschickt hatte.
- Die Tastaturlayout-Daten von MathLive konnten HTML enthalten, das die Bibliothek ungefiltert in die Hauptseite einfügte.
- Dieses HTML erzeugte einen iframe ohne
sandbox-Attribut, sodass das neue Dokument den Origin chatgpt.com erbte. - Die Content Security Policy von ChatGPT blockierte Inline-Skripte, erlaubte aber YouTube. Der oEmbed-Endpunkt von YouTube unterstützte einen Callback im JSONP-Stil, wodurch die Forscher ihren eigenen Code von einer erlaubten Domain laden konnten.
In der Praxis veröffentlichte der Angreifer einen ganz normal aussehenden Chat. Am Anfang stand ein echtes Diagramm (um MathLive zu laden), weiter unten eine HTML-Vorschau, also die Preview-Funktion, die einen HTML-Codeblock in eine kleine funktionierende Seite verwandelt. Genau diese Vorschau schickte die bösartigen Nachrichten an die Bibliothek.
Laut den Forschern war das Öffnen des geteilten Links die einzige nötige Aktion. In der stabilsten Variante klickte das Opfer einmal auf Preview. In einer späteren öffnete sich die Vorschau von selbst, und der Nachweis der Codeausführung erschien nach etwa 4,5 Sekunden.
Was genau konnte der Angreifer tun?
Der Code lief als chatgpt.com in der Sitzung des Opfers und konnte deshalb in dessen Namen die authentifizierte ChatGPT-API aufrufen. In ihrem Proof of Concept holten die Forscher die Liste der letzten Chats, dann den Inhalt eines privaten Chats, den ihnen niemand geteilt hatte, und schickten ein kleines Stück davon an ihren Server.
Laut dem Beitrag konnten sie so praktisch jede Aktion im Konto des Opfers ausführen („Essentially, we could perform any action on behalf of the victim’s ChatGPT account“). Der Angriff funktionierte auch über getrennte Konten und Workspaces hinweg.
Wie hat OpenAI reagiert?
Der Zeitablauf aus dem Beitrag von Parameter:
- 13. Oktober: Die Forscher bestätigen den angreifbaren MathLive-Pfad im Produktivcode.
- 18. Oktober: Sie melden die Lücke an das Bug-Bounty-Programm von OpenAI.
- 21. Oktober: OpenAI reproduziert den Fehler und stuft ihn von P2 auf P1 hoch.
- 22. Oktober: Ein Fix landet in einem der beiden Web-Frontends, am 23. Oktober blockieren CSP-Änderungen einen Teil der Kette.
- 26. Oktober: Beide Frontends lehnen die im Angriff genutzten Nachrichten ab, die Meldung wird geschlossen, und die Forscher erhalten die Prämie.
Der Beitrag erwähnt keine Ausnutzung der Lücke bei echten Angriffen. Er beschreibt auch nicht, was OpenAI konkret am Code geändert hat.
Warum ist das gerade so ein Thema?
Erstens wegen der Einfachheit des Angriffs. Der Link sah aus wie jeder andere geteilte ChatGPT-Chat, ein Blick auf die URL hätte also nichts gebracht.
Zweitens wegen der Prämie. Der Beitrag landete auf der Startseite von Hacker News, und in den Kommentaren geht es vor allem um den Betrag: 5.000 USD für eine Kontoübernahme per Link finden viele zu wenig, und manche befürchten, dass so niedrige Prämien Forscher davon abhalten, Fehler zu melden.
Drittens wegen der Ursache. Interessanterweise begann die ganze Kette bei einer Bibliothek zum Eingeben mathematischer Formeln (daher der Titel des Beitrags, „Do the Math“). Je mehr interaktive Extras ein Chat hat – Diagramme, Seitenvorschauen –, desto mehr Stellen gibt es, an denen etwas schiefgehen kann. Und geteilte Chats haben schon früher Ärger gemacht: Beim Datenleck bei Meta Muse landeten die Titel geteilter Chats bekanntlich im öffentlichen DNS.
Worauf sollte man künftig achten?
Die Forscher nennen zwei Lehren für Entwickler von Webanwendungen:
- Wer Nachrichten zwischen Frames empfängt, sollte sowohl den Origin des Absenders als auch genau das Fenster prüfen, dem er Rechte gegeben hat.
- CSP sollte eine zusätzliche Absicherung sein und nicht die einzige Barriere, wenn HTML des Angreifers schon auf der Seite ist.
Für uns als Nutzer ist diese Lücke bereits geschlossen. Trotzdem lohnt es sich zu merken, dass ein Link zu einem fremden Chatbot-Chat immer noch ein Link von einer fremden Person ist. Mehr dazu, wie man Konten und API-Schlüssel schützt, schreibe ich im Leitfaden zur Sicherheit von KI-Agenten.
FAQ
Ist die ChatGPT-Sicherheitslücke schon behoben?
Ja. Laut den Forschern hat OpenAI am 26. Oktober bestätigt, dass beide Web-Frontends von ChatGPT die im Angriff genutzten Nachrichten ablehnen.
Muss ich etwas an meinem Konto tun?
Der Beitrag von Parameter nennt keine Schritte für Nutzer und erwähnt keine Angriffe außerhalb der Tests der Forscher.
Wie viel hat OpenAI für die Meldung gezahlt?
5.000 USD im Rahmen des Bug-Bounty-Programms. Die Meldung bekam die Priorität P1.
Reichte es wirklich, den Link zu öffnen?
Laut den Forschern ja. In einer Variante des Angriffs musste man noch einmal auf Preview klicken, in einer späteren startete die Vorschau von selbst.