Ссылка на чат ChatGPT позволяла выполнить чужой код в сессии жертвы и прочитать её переписку
Специалисты по безопасности из компании Parameter обнаружили в ChatGPT уязвимость, из-за которой обычная публичная ссылка на разговор могла выполнить код атакующего в авторизованной сессии любого, кто её открыл. Так злоумышленник получал доступ к приватным перепискам жертвы. Исследователи сообщили о проблеме через программу bug bounty OpenAI 18 октября. Компания закрыла уязвимость через восемь дней и присвоила ей категорию P1 — наивысшую по серьёзности.
Как выглядела ловушка
Приманкой служил обычный разговор в ChatGPT, опубликованный по публичной ссылке. Её можно было распространять так же, как любой настоящий чат: по электронной почте, в мессенджере, в тикете техподдержки или в публикации в соцсети.
Жертве не требовалось ничего устанавливать, вступать в рабочее пространство или входить в систему через атакующего. В самом надёжном варианте атаки достаточно было открыть ссылку и один раз нажать кнопку Preview. В более поздней версии Parameter настроила страницу так, что предпросмотр открывался сам, и от жертвы требовалось лишь перейти по ссылке.
После этого код атакующего работал в сессии пользователя с теми же правами, что и сам сайт ChatGPT. В демонстрации он получил список недавних разговоров, открыл приватный чат, которым с атакующим никто не делился, и отправил его фрагмент на сервер исследователей. Код обращался напрямую к внутренним API ChatGPT, а не считывал содержимое экрана. «По сути, мы могли выполнить любое действие от имени ChatGPT-аккаунта жертвы», — пишут авторы.
Исследование проводилось в контролируемых условиях: проверка доступа к приватным чатам выполнялась между отдельными тестовыми аккаунтами. О реальном использовании уязвимости Parameter не сообщает.
Как код выбрался из песочницы
Функция Preview превращает HTML-блок из чата в небольшую веб-страницу. Поскольку там может оказаться любой код, ChatGPT запускает его в изолированном фрейме на отдельном адресе, откуда основная страница недоступна. Сама песочница выдержала — лазейку дала другая функция в том же разговоре.
В общий чат был добавлен интерактивный график. Для его отрисовки на основную страницу ChatGPT подгружалась математическая библиотека MathLive, которая оставляла там обработчик сообщений для своей экранной клавиатуры. Обмен сообщениями между фреймами безопасен, только если получатель проверяет отправителя. MathLive этого не делал и к тому же позволял передавать в сообщении сырой HTML. В итоге Preview мог передать HTML атакующего на доверенную основную страницу.
Этот HTML создавал новый фрейм, который браузер считал частью chatgpt.com, а исполняемый код подгружался скриптом с YouTube. Политика безопасности контента (CSP) ChatGPT блокировала встроенные скрипты, но разрешала загрузку с YouTube.
Исправление
По словам Parameter, OpenAI воспроизвела и выполнение кода, и доступ к приватным чатам, повысила оценку с P2 до P1 и выпустила исправление для двух версий веб-интерфейса. К 26 октября обе версии отклоняли сообщения, на которых строилась атака.
Исследователи видят причину в совпадении трёх проектных решений: MathLive принимал сообщения о смене настроек без проверки отправителя; эти сообщения могли содержать сырой HTML под видом раскладки клавиатуры; а HTML мог создать фрейм без песочницы, унаследовавший идентичность chatgpt.com. Обход через YouTube был лишь последним шагом — его блокировка сама по себе не помешала бы недоверенному предпросмотру внедрять HTML в основной сайт.
Пользователям ничего делать не нужно: исправление выполнено на стороне OpenAI. Parameter опубликовала разбор 28 октября, уже после устранения уязвимости. Вознаграждение за отчёт составило 5000 долларов.
Источник: The Hacker News
Комментарии
Войдите, чтобы комментировать.