Akademia NIS2/KSC2 od sekuraka. 19 października start drugiej edycji!
Zobacz nasz aktualny kalendarz szkoleń!
Akademia NIS2/KSC2 od sekuraka. 19 października start drugiej edycji!
Zobacz nasz aktualny kalendarz szkoleń!
Badacze bezpieczeństwa z firmy Parameter wykryli lukę bezpieczeństwa w popularnym ChatGPT. Za pomocą linku do współdzielenia konwersacji istniała możliwość wykonania złośliwego kodu w kontekście sesji zalogowanego użytkownika. Nie trzeba było wykonywać żadnej interakcji ani instalować złośliwego oprogramowania, wystarczyło jedynie kliknąć w potencjalnie złośliwy link.
TLDR:
Co więcej, po zgłoszeniu błędu inżynierowie z OpenAI zareagowali w pełni profesjonalnie. Przeanalizowali sytuację, zapoznali się z PoC, sklasyfikowali lukę nadając jej najwyższą kategorię P1 (za błędy tego typu dostawca wypłaca w ramach programu Bug Bounty nagrody rzędu $2000 – $6500),a w ciągu zaledwie 8 dni wdrożyli aktualizację. Z punktu widzenia użytkownika nie trzeba podejmować żadnych działań, poprawki zostały wdrożone bezpośrednio na serwerach dostawcy.
Na wstępie należy powiedzieć, że poszczególne elementy systemu działały prawidłowo i były bezpieczne. Dopiero ich połączenie doprowadziło do sytuacji, w której atakujący mógłby przemycić kod JavaScript i wykonać potencjalnie złośliwy kod po stronie użytkownika.
ChatGPT umożliwia renderowanie bloków HTML (wygenerowanych przez model językowy) jako małych podstron w ramach funkcji Preview. Z uwagi na szereg polityk bezpieczeństwa (może się tam znajdować potencjalnie złośliwy kod) OpenAI uruchamia go w izolowanym środowisku na osobnym adresie. W ten sposób skutecznie uniemożliwia bezpośrednie odwołanie do głównego okna czatu (parent.document).
W tej samej konwersacji umieszczono jednak interaktywny wykres, wygenerowany za pomocą biblioteki matematycznej MathLive. Komponent ten korzystał z klawiatury ekranowej, która mogła zostać wykorzystana do wysyłania wiadomości do głównego okienka czatu za pomocą mechanizmu postMessage.

Co więcej, komendy przesyłane za pomocą mechanizmu postMessage nie były w żaden sposób weryfikowane. MathLive nie sprawdzał kto wysyłał komunikaty (event.origin, event.source), ani co się w nich znajdowało. W tej sytuacji istniała możliwość przesłania surowego kodu HTML w polu konfiguracji układu klawiatury (update-setting). Idąc dalej Preview bez żadnych ostrzeżeń przekazywał przesłany kod prosto do głównego okna aplikacji.
Aby jednak uruchomić dowolny JavaScript, trzeba było pokonać politykę CSP. Skrypty inline były blokowane, ale polityka zezwalała na ładowanie ich z domeny YouTube. Badacze sprytnie użyli oembed callback wymuszając na przeglądarce załadowanie złośliwego kodu pod egidą zaufanego skryptu z portalu YouTube.

Z pomocą przesłanego skryptu, potencjalny atakujący mógł operować w kontekście sesji zalogowanego użytkownika. Zyskał więc dostęp do treści konwersacji, mógł otwierać prywatne czaty oraz przesyłać zgromadzone dane bezpośrednio na zewnętrzny serwer kontrolowany przez atakującego. Zdaniem badaczy istniała możliwość wykonania dowolnej akcji zgodnie z uprawnieniami użytkownika.

Z uwagi na fakt, że badaczom zależało jedynie na demonstracji skutków wykrytej podatności, dalsze działania związane z wykorzystaniem luki zostały przerwane (możliwość wykonania dowolnego kodu JavaScript była wystarczającym dowodem). Niemniej jednak lukę należy traktować jako pełne przejęcie konta użytkownika.
Po przyjęciu zgłoszenia firma OpenAI potwierdziła obecność podatności i wdrożyła odpowiednie poprawki. W ramach programu Bug Bounty badaczom wypłacono nagrodę w wysokości $5000.
Źródło: parameter.ai, bugcrowd.com
~_secmike