Зловреден споделен линк към ChatGPT е можел да изпълни код на атакуващ в активната сесия на всеки, който го отвори, позволявайки му да чете личните му разговори, показаха изследователи от компанията за сигурност Parameter.

Изследователите са докладвали уязвимостта чрез програмата за награди за открити бъгове (bug bounty) на OpenAI на 18 октомври, а OpenAI е отстранила уязвимостта осем дни по-късно и я е оценила като P1 – най-сериозната си категория.

Капанът е представлявал обикновен разговор в ChatGPT, споделен чрез неговия публичен линк. Той е можел да бъде изпратен по същия начин като всеки реален споделен чат: по имейл, като чат съобщение, като тикет за поддръжка или като публикация в социалните мрежи.

Жертвата не е трябвало да инсталира нищо, да се присъединява към работно пространство или да влиза в профила си през атакуващия. В най-надеждната версия на атаката тя е отваряла линка и е кликвала веднъж върху бутона Preview на ChatGPT. В по-късна версия Parameter са настроили страницата да отваря Preview самостоятелно, така че отварянето на линка е било единствената стъпка.

Какво е можел да направи атакуващият

След отварянето на линка, кодът на атакуващия се е изпълнявал вътре в активната сесия на жертвата със същия достъп като реалния сайт на ChatGPT. Той е извличал списък с последните разговори на жертвата, отварял е личен чат, който никога не е бил споделян с атакуващия, и е изпращал малка част от него към сървър, контролиран от изследователите.

Кодът е извиквал директно собствените API интерфейси на ChatGPT за влезли потребители, вместо да копира това, което се намира на екрана. Тъй като се е изпълнявал с пълния уеб достъп на жертвата, обхватът му не е бил ограничен само до тези чатове. „На практика можехме да извършим всяко действие от името на акаунта на жертвата в ChatGPT“, пишат изследователите.

Проучването е било контролиран тест. Parameter не съобщава за реално използване на уязвимостта и е провел своята демонстрация с лични чатове между отделни тестови акаунти, а не срещу реални потребители.

Как линкът е пробил своята изолирана среда

Ето как е проработила веригата според Parameter. ChatGPT може да превърне блок от HTML в чата в малка уеб страница чрез функция, наречена Preview. Тъй като тази страница може да съдържа всякакъв код, ChatGPT я стартира в ограничена рамка (frame) на отделен уеб адрес, откъдето тя не може да чете основната страница на ChatGPT около нея.

Тази изолирана среда е издържала. Пробивът е дошъл от втора функция в същия разговор.

Споделеният чат е съдържал и интерактивна графика, чието изчертаване е зареждало математическа библиотека, наречена MathLive, в основната страница на ChatGPT. Зареждането на MathLive е оставяло активен слушател (listener) там, който е приемал съобщения относно нейната екранна клавиатура.

Съобщение, предадено между рамки на браузъра, е безопасно само ако получателят проверява кой го е изпратил. Parameter са установили, че този слушател е приемал съобщение за клавиатурата от всеки подател и че на съобщението е било позволено да пренася необработен HTML. Така функцията Preview е можела да премине границата и да предаде HTML код на атакуващия към доверената основна страница.

Този HTML е изграждал нова рамка, която браузърът е третирал като част от chatgpt.com. След това скрипт, зареден от YouTube, е доставял кода, който се е изпълнявал вътре в нея.

Политиката за сигурност на съдържанието (CSP) на ChatGPT ограничава откъде могат да идват скриптовете на дадена страница. Тя е блокирала вградения (inline) код, но е позволявала скриптове от YouTube, поради което тази стъпка е проработила.

Какво коригира OpenAI и какво трябва да направят потребителите

От Parameter заявиха, че OpenAI са възпроизвели както изпълнението на код, така и доказателството за достъп до лични чатове, повишили са сериозността от P2 на P1 и са въвели корекция за сигурност в две версии на уеб интерфейса на ChatGPT. До 26 октомври и двете версии вече са отхвърляли съобщенията, на които е разчитала атаката.

Изследователите проследяват проблема до три архитектурни решения, които са се съчетали:

  1. MathLive е изпълнявала действия въз основа на съобщение, променящо настройките ѝ, без да проверява коя рамка го е изпратила.
  2. На това съобщение е било позволено да пренася необработен HTML като данни за подредбата на клавиатурата.
  3. HTML кодът е можел да създаде рамка, която не е в изолирана среда и наследява идентичността на chatgpt.com.

Стъпката с YouTube е била само финалното заобиколно решение, а не първопричината. Блокирането само на нея пак би оставило недоверения Preview способен да вкарва HTML в основния сайт.

Потребителите на ChatGPT не е необходимо да правят нищо. Корекцията за сигурност е от страна на OpenAI, без нужда от инсталиране или нулиране на каквото и да било.

Parameter публикува своя анализ на 28 октомври, след отстраняването на уязвимостта. OpenAI са изплатили общо $5,000 за доклада.