Przejdź do treści
sobolewski.proAI dziś, o 20:00Zapisz się

Raz dziennie, wypiszesz się jednym kliknięciem. Polityka prywatności

Luka w ChatGPT: jeden link wystarczył, by przejąć konto

Luka w ChatGPT pozwalała przejąć konto przez publiczny link do czatu i czytać cudze czaty. OpenAI zapłaciło 5000 USD. Sprawdzam, jak to się stało.

3 min czytania

Ten artykuł w innych językach:العربيةDeutschEnglishEspañolFrançaisItaliano日本語简体中文

W tym artykule
  1. Szczegóły luki w ChatGPT
  2. Co dokładnie mógł zrobić atakujący?
  3. Jak OpenAI zareagowało?
  4. Dlaczego jest o tym głośno?
  5. Na co zwrócić uwagę na przyszłość?
  6. FAQ

28 października Mukul Goyal z Parameter opublikował opis luki w ChatGPT, która pozwalała przejąć konto przez zwykły publiczny link do rozmowy (chatgpt.com/share/…). Kod atakującego uruchamiał się w zalogowanej sesji osoby, która otworzyła link. OpenAI zamknęło zgłoszenie 26 października i wypłaciło 5000 USD w programie bug bounty.

Szczegóły luki w ChatGPT

Atak to łańcuch czterech błędów (jak opisują badacze):

  1. Interaktywny wykres w rozmowie ładował MathLive, otwartą bibliotekę do wpisywania wzorów matematycznych. Biblioteka przyjmowała wiadomości między ramkami strony od dowolnego nadawcy, bez sprawdzania, kto je wysłał.
  2. Dane układu klawiatury MathLive mogły zawierać HTML, który biblioteka wstawiała do głównej strony bez filtrowania.
  3. Ten HTML tworzył ramkę iframe bez atrybutu sandbox, więc nowy dokument dziedziczył pochodzenie chatgpt.com.
  4. Content Security Policy ChatGPT blokowała skrypty inline, ale dopuszczała YouTube. Endpoint oEmbed YouTube’a obsługiwał callback w stylu JSONP, dzięki czemu badacze mogli załadować swój kod z dozwolonej domeny.

W praktyce atakujący publikował normalnie wyglądającą rozmowę. Na początku był w niej prawdziwy wykres (żeby załadować MathLive), a dalej podgląd HTML, czyli funkcja Preview, która zamienia blok kodu HTML w małą działającą stronę. To właśnie podgląd wysyłał złośliwe wiadomości do biblioteki.

Jak mówią badacze, otwarcie udostępnionego linku było jedyną wymaganą akcją. W najstabilniejszej wersji ofiara klikała Preview raz. W późniejszej podgląd otwierał się sam, a dowód wykonania kodu pojawiał się po około 4,5 sekundy.

Co dokładnie mógł zrobić atakujący?

Kod działał jako chatgpt.com w sesji ofiary, więc mógł wywoływać uwierzytelnione API ChatGPT w jej imieniu. W dowodzie koncepcji badacze pobrali listę ostatnich rozmów, a potem treść prywatnej rozmowy, której nikt im nie udostępnił, i wysłali jej mały fragment na swój serwer.

Według wpisu mogli w ten sposób wykonać praktycznie każdą akcję na koncie ofiary (cytując „Essentially, we could perform any action on behalf of the victim’s ChatGPT account”). Atak działał też między osobnymi kontami i workspace’ami.

Jak OpenAI zareagowało?

Oś czasu z wpisu Parameter:

  1. 13 października badacze potwierdzają podatną ścieżkę w MathLive w kodzie produkcyjnym.
  2. 18 października zgłaszają lukę do programu bug bounty OpenAI.
  3. 21 października OpenAI odtwarza błąd i podnosi jego priorytet z P2 do P1.
  4. 22 października poprawka trafia do jednego z dwóch frontendów webowych, a 23 października zmiany w CSP blokują część łańcucha.
  5. 26 października oba frontendy odrzucają wiadomości użyte w ataku, zgłoszenie zostaje zamknięte, a badacze dostają nagrodę.

Wpis nie wspomina o wykorzystaniu luki w realnych atakach. Nie opisuje też, co konkretnie OpenAI zmieniło w kodzie.

Dlaczego jest o tym głośno?

Po pierwsze, prostota ataku. Link wyglądał jak każdy inny udostępniony czat z ChatGPT, więc sprawdzenie adresu nic by tu nie dało.

Po drugie, nagroda. Wpis trafił na pierwszą stronę Hacker News i w komentarzach najczęściej wraca kwota: 5000 USD za przejęcie konta jednym linkiem wielu osobom wydaje się za mało, a część obawia się, że tak niskie stawki zniechęcą badaczy do zgłaszania błędów.

Po trzecie, źródło problemu. Co ciekawe, cały łańcuch zaczynał się od biblioteki do wpisywania wzorów matematycznych (stąd tytuł wpisu „Do the Math”). Im więcej interaktywnych dodatków ma czat – wykresy, podglądy stron – tym więcej miejsc, w których coś może pójść nie tak. A udostępnione rozmowy już wcześniej sprawiały kłopoty: jak wiemy, przy wycieku z Meta Muse tytuły udostępnionych czatów trafiały do publicznego DNS.

Na co zwrócić uwagę na przyszłość?

Badacze wymieniają dwie lekcje dla twórców aplikacji webowych:

  1. Odbiorca wiadomości między ramkami powinien sprawdzać zarówno adres nadawcy, jak i dokładnie to okno, któremu dał uprawnienia.
  2. CSP ma być zabezpieczeniem zapasowym, a nie jedyną barierą, gdy HTML atakującego trafi już na stronę.

Dla nas, użytkowników, ta luka jest już załatana. Warto jednak pamiętać, że link do cudzej rozmowy z chatbotem to wciąż link od obcej osoby. Więcej o tym, jak chronić konta i klucze API, piszę w poradniku o bezpieczeństwie agentów AI.

FAQ

Czy luka w ChatGPT jest już naprawiona?

Tak. Według badaczy OpenAI potwierdziło 26 października, że oba frontendy webowe ChatGPT odrzucają wiadomości użyte w ataku.

Czy muszę coś zrobić ze swoim kontem?

Wpis Parameter nie podaje żadnych kroków dla użytkowników i nie wspomina o atakach poza testami badaczy.

Ile OpenAI zapłaciło za zgłoszenie?

5000 USD w ramach programu bug bounty. Zgłoszenie dostało priorytet P1.

Według badaczy tak. W jednej wersji ataku trzeba było jeszcze raz kliknąć Preview, w kolejnej podgląd uruchamiał się sam.

  • AI
  • bezpieczeństwo
  • OpenAI

AI dziś, o 20:00

Codziennie wieczorem najważniejsze wiadomości ze świata AI i nowe wpisy z bloga. Krótko, ze źródłami.

Raz dziennie, wypiszesz się jednym kliknięciem. Polityka prywatności