Исследователи компании Parameter обнаружили, что специально подготовленная публичная ссылка на разговор в ChatGPT могла запустить код злоумышленника в сеансе пользователя, уже вошедшего в аккаунт. Этот код получал доступ к приватным перепискам жертвы. OpenAI подтвердила уязвимость и исправила её.
Путь к атаке начинался с обычной ссылки на общий чат. Её можно было прислать по электронной почте, в мессенджере, добавить в обращение в поддержку или опубликовать в соцсети. Устанавливать программы, вступать в рабочее пространство или входить в аккаунт через сайт атакующего не требовалось. В первой версии достаточно было открыть ссылку и один раз нажать кнопку Preview. Позже Parameter добилась автоматического открытия предварительного просмотра: тогда хватало одного перехода по ссылке.
Запущенный код работал внутри авторизованной сессии ChatGPT, с доступом, которым располагает сам сайт. Он мог получить список недавних разговоров, открыть приватный чат, никогда не передававшийся атакующему, и отправить часть его содержимого на сервер исследователей. Для чтения использовались API ChatGPT, доступные после входа в аккаунт, а не копирование текста с экрана. «По сути, мы могли выполнять любые действия от имени пользователя в его аккаунте ChatGPT», — написала Parameter.
Уязвимость возникла на стыке нескольких функций. Предварительный просмотр превращал фрагмент HTML в чате в небольшую веб-страницу и запускался в изолированном фрейме на отдельном адресе. Саму эту песочницу исследователи не взломали. Но в общем разговоре была интерактивная диаграмма, при построении которой библиотека MathLive загружалась в основную страницу ChatGPT.
MathLive оставляла на странице обработчик сообщений для управления экранной клавиатурой. Он не проверял, из какого фрейма пришло сообщение, и принимал данные от любого отправителя. Более того, в сообщении можно было передать сырой HTML. В итоге предварительный просмотр смог отправить такую разметку на основную страницу, обойдя границу песочницы.
Полученный HTML создавал новый фрейм, который браузер считал частью . Чтобы запустить в нём код, исследователи использовали скрипт с YouTube: политика безопасности контента ChatGPT блокировала встроенный код, но разрешала скрипты с этого домена. YouTube, по оценке Parameter, был лишь обходным способом завершить атаку, а не её первопричиной. Запретить загрузку скриптов с YouTube было бы недостаточно: проблема передачи HTML из недоверенного Preview на основную страницу всё равно осталась бы.
Parameter выделила три сочетавшихся просчёта: MathLive меняла настройки по сообщению, не проверяя отправителя; в роли данных для раскладки клавиатуры принимался сырой HTML; созданный таким образом фрейм не получал песочницу и наследовал идентичность . Именно цепочка этих решений позволила коду добраться до привилегий пользовательской сессии.
Об уязвимости сообщили OpenAI через программу поиска ошибок 18 октября. Компания воспроизвела запуск кода и доступ к приватному чату, подняла оценку серьёзности с P2 до P1 — своей высшей категории — и выпустила исправление 26 октября. К этой дате обе версии веб-интерфейса ChatGPT, на которых проверяли атаку, уже отклоняли нужные сообщения. Parameter опубликовала разбор 28 октября; OpenAI выплатила за сообщение 5 000 долларов.
Проверка была контролируемой: Parameter не сообщала о применении уязвимости в реальных атаках, а доказательство доступа к приватному чату строилось на отдельных тестовых аккаунтах. Пользователям ChatGPT ничего делать не нужно: исправление внесла OpenAI, устанавливать программы или сбрасывать настройки не требуется.
Путь к атаке начинался с обычной ссылки на общий чат. Её можно было прислать по электронной почте, в мессенджере, добавить в обращение в поддержку или опубликовать в соцсети. Устанавливать программы, вступать в рабочее пространство или входить в аккаунт через сайт атакующего не требовалось. В первой версии достаточно было открыть ссылку и один раз нажать кнопку Preview. Позже Parameter добилась автоматического открытия предварительного просмотра: тогда хватало одного перехода по ссылке.
Запущенный код работал внутри авторизованной сессии ChatGPT, с доступом, которым располагает сам сайт. Он мог получить список недавних разговоров, открыть приватный чат, никогда не передававшийся атакующему, и отправить часть его содержимого на сервер исследователей. Для чтения использовались API ChatGPT, доступные после входа в аккаунт, а не копирование текста с экрана. «По сути, мы могли выполнять любые действия от имени пользователя в его аккаунте ChatGPT», — написала Parameter.
Уязвимость возникла на стыке нескольких функций. Предварительный просмотр превращал фрагмент HTML в чате в небольшую веб-страницу и запускался в изолированном фрейме на отдельном адресе. Саму эту песочницу исследователи не взломали. Но в общем разговоре была интерактивная диаграмма, при построении которой библиотека MathLive загружалась в основную страницу ChatGPT.
MathLive оставляла на странице обработчик сообщений для управления экранной клавиатурой. Он не проверял, из какого фрейма пришло сообщение, и принимал данные от любого отправителя. Более того, в сообщении можно было передать сырой HTML. В итоге предварительный просмотр смог отправить такую разметку на основную страницу, обойдя границу песочницы.
Полученный HTML создавал новый фрейм, который браузер считал частью . Чтобы запустить в нём код, исследователи использовали скрипт с YouTube: политика безопасности контента ChatGPT блокировала встроенный код, но разрешала скрипты с этого домена. YouTube, по оценке Parameter, был лишь обходным способом завершить атаку, а не её первопричиной. Запретить загрузку скриптов с YouTube было бы недостаточно: проблема передачи HTML из недоверенного Preview на основную страницу всё равно осталась бы.
Parameter выделила три сочетавшихся просчёта: MathLive меняла настройки по сообщению, не проверяя отправителя; в роли данных для раскладки клавиатуры принимался сырой HTML; созданный таким образом фрейм не получал песочницу и наследовал идентичность . Именно цепочка этих решений позволила коду добраться до привилегий пользовательской сессии.
Об уязвимости сообщили OpenAI через программу поиска ошибок 18 октября. Компания воспроизвела запуск кода и доступ к приватному чату, подняла оценку серьёзности с P2 до P1 — своей высшей категории — и выпустила исправление 26 октября. К этой дате обе версии веб-интерфейса ChatGPT, на которых проверяли атаку, уже отклоняли нужные сообщения. Parameter опубликовала разбор 28 октября; OpenAI выплатила за сообщение 5 000 долларов.
Проверка была контролируемой: Parameter не сообщала о применении уязвимости в реальных атаках, а доказательство доступа к приватному чату строилось на отдельных тестовых аккаунтах. Пользователям ChatGPT ничего делать не нужно: исправление внесла OpenAI, устанавливать программы или сбрасывать настройки не требуется.