Die Falle war eine ganz gewöhnliche, über den öffentlichen Link geteilte ChatGPT-Unterhaltung. Sie ließ sich auf denselben Wegen verbreiten wie jeder echte geteilte Chat: per E-Mail, als Chatnachricht, als Support-Ticket oder als Beitrag in sozialen Netzwerken. Das Opfer musste nichts installieren, keinem Workspace beitreten und sich nicht über den Angreifer anmelden. In der zuverlässigsten Variante genügte es, den Link zu öffnen und einmal auf die Preview-Schaltfläche von ChatGPT zu klicken. In einer späteren Fassung richtete Parameter die Seite so ein, dass sie Preview selbst startete – damit blieb das bloße Öffnen des Links der einzige nötige Schritt.

Nach dem Öffnen lief der Code des Angreifers in der angemeldeten Sitzung des Opfers mit denselben Rechten wie die echte ChatGPT-Website. Er listete die jüngsten Unterhaltungen auf, öffnete einen privaten Chat, der nie mit dem Angreifer geteilt worden war, und sandte einen kleinen Ausschnitt daraus an einen Server der Forscher. Dabei rief der Code die angemeldeten APIs von ChatGPT direkt auf, statt nur abzugreifen, was gerade auf dem Bildschirm stand. Weil er mit dem vollen Webzugriff des Opfers arbeitete, war seine Reichweite nicht auf diese Chats beschränkt. „Im Grunde konnten wir jede beliebige Aktion im Namen des ChatGPT-Kontos des Opfers ausführen", schrieben die Forscher.

Es handelte sich um einen kontrollierten Test. Parameter berichtet von keinerlei Ausnutzung in freier Wildbahn und führte den Nachweis mit den privaten Chats zwischen getrennten eigenen Konten durch, nicht gegen echte Nutzer.

Die Angriffskette funktionierte Parameter zufolge so: ChatGPT kann einen HTML-Block aus einem Chat über die Funktion Preview in eine kleine Webseite verwandeln. Da diese Seite beliebigen Code enthalten kann, führt ChatGPT sie in einem abgeschotteten Frame unter einer separaten Webadresse aus, aus dem heraus die umgebende ChatGPT-Seite nicht lesbar ist. Diese Sandbox hielt stand. Der Einstieg kam über eine zweite Funktion in derselben Unterhaltung.

Der geteilte Chat enthielt zusätzlich einen interaktiven Graphen, für dessen Darstellung die Mathematikbibliothek MathLive in die Hauptseite von ChatGPT geladen wurde. MathLive hinterließ dort einen Listener, der Nachrichten zu seiner Bildschirmtastatur entgegennahm. Eine zwischen Browser-Frames ausgetauschte Nachricht ist nur dann sicher, wenn der Empfänger den Absender prüft. Parameter stellte fest, dass dieser Listener eine Tastaturnachricht von jedem beliebigen Absender akzeptierte und dass die Nachricht rohes HTML transportieren durfte. So konnte die Preview die Grenze überwinden und der vertrauenswürdigen Hauptseite HTML des Angreifers übergeben.

Dieses HTML erzeugte einen neuen Frame, den der Browser als Teil von chatgpt.com behandelte. Ein von YouTube geladenes Skript lieferte anschließend den Code, der darin ausgeführt wurde. Die Content Security Policy von ChatGPT begrenzt, woher Skripte einer Seite stammen dürfen; sie blockierte Inline-Code, erlaubte aber Skripte von YouTube – deshalb funktionierte dieser Schritt.

Nach Angaben von Parameter reproduzierte OpenAI sowohl die Codeausführung als auch den Nachweis mit dem privaten Chat, hob die Einstufung von P2 auf P1 an und verteilte einen Fix über zwei Versionen des ChatGPT-Web-Frontends. Zum 26. Oktober wiesen beide Versionen die Nachrichten zurück, auf denen der Angriff beruhte.

Die Forscher führen das Problem auf drei zusammentreffende Designentscheidungen zurück:

  • MathLive reagierte auf eine Nachricht, die seine Einstellungen änderte, ohne zu prüfen, aus welchem Frame sie stammte.
  • Diese Nachricht durfte rohes HTML als Tastaturlayout-Daten transportieren.
  • Das HTML konnte einen Frame erzeugen, der nicht in einer Sandbox lief und die Identität von chatgpt.com erbte.

Der YouTube-Schritt war lediglich der abschließende Umweg, nicht die Ursache: Ihn allein zu blockieren hätte eine nicht vertrauenswürdige Preview weiterhin in die Lage versetzt, HTML in die Hauptseite zu schieben.

ChatGPT-Nutzer müssen nichts unternehmen; die Korrektur erfolgte auf Seiten von OpenAI, es ist nichts zu installieren oder zurückzusetzen. Parameter veröffentlichte die Analyse am 28. Oktober nach dem Fix. OpenAI zahlte für den Bericht insgesamt 5.000 US-Dollar.