На GitHub Microsoft была опубликована статья ИБ-специалиста Бенджамина Флеша (Benjamin Flesch), который рассказал, что всего один HTTP-запрос к API ChatGPT может использоваться для DDoS-атаки на целевой сайт. Атака будет исходить от краулера ChatGPT (а именно ChatGPT-User).
Флеш пишет, что атака получается не особенно мощной, но все равно представляет угрозу и свидетельствует о явном просчете, допущенном разработчиками OpenAI. Так, всего один API-запрос можно «разогнать» до 20–5000 и более запросов к сайту жертвы в секунду.
«API ChatGPT имеет серьезный недостаток, связанный с обработкой HTTP POST-запросов к https://chatgpt.com/backend-api/attributions», — поясняет Флеш.
Исследователь объясняет, что этот эндпоинт API используется для получения данных о веб-источниках, упомянутых в ответах бота. Когда ChatGPT ссылается на определенные сайты, он использует attributions со списком URL-адресов, по которым проходит краулер и собирает информацию. Если же передать API длинный список URL, немного отличающихся друг от друга, но указывающих на один и тот же ресурс, краулер начнет обращаться сразу ко всем.
«API ожидает список гиперссылок в параметре urls. Но очевидно, что ссылки на один сайт можно записать по-разному. Из-за плохого программирования OpenAI не проверяет, встречается ли ссылка на один и тот же ресурс несколько раз. Также OpenAI не ограничивает количество гиперссылок в параметре urls, что позволяет передавать тысячи ссылок в одном HTTP-запросе».
То есть злоумышленник может использовать Curl и отправить HTTP POST-запрос на эндпоинт ChatGPT (без какого-либо токена аутентификации), и серверы OpenAI в Microsoft Azure ответят, инициировав HTTP-запросы для каждой переданной в urls ссылки. Если все они указывают на один сайт, это может вызвать DDoS-эффект. Причем краулер, проксируемый Cloudflare, каждый раз будет заходить на сайт с нового IP-адреса.
«Жертва даже не поймет, что произошло, просто увидит запросы от бота ChatGPT с примерно 20 разных IP-адресов одновременно, — говорит Флеш и добавляет, что даже если жертва заблокирует диапазон IP-адресов, бот все равно продолжит отправлять запросы. — Один неудачный или заблокированный запрос не помешает боту ChatGPT снова обратиться к сайту всего через миллисекунду. Из-за этой амплификации злоумышленник может отправить всего несколько запросов к API ChatGPT, но жертва получит огромное количество запросов».
Флеш рассказывает, что сообщал об этой уязвимости по самым разным каналам (через платформу BugCrowd, на почту команды безопасности OpenAI, в Microsoft и на HackerOne), но так и не получил ответа.
Также специалист рассказал изданию The Register и о другой связанной проблеме. По его словам, тот же API оказался уязвим к инъекциям промптов. Эта проблема позволяет краулеру отвечать на запросы через тот же API attributions. То есть можно задавать чат-боту вопросы, и он будет отвечать на них, хотя его задача — просто извлекать данные с сайтов.
В беседе с журналистами исследователь выразил выражает недоумение тем, что в боте OpenAI не реализованы простые и надежные методы правильной дедупликации URL-адресов, а для размера списка отсутствуют ограничения. Также он задается вопросом, почему здесь не исправлены уязвимости, связанные с инъекциями промптов, которые давно устранены в основном интерфейсе ChatGPT.
«Мне кажется, этот API — тестовый проект ИИ-агентов ChatGPT, который должен парсить URL из предоставленных пользователем данных, а затем обращаться к Azure за информацией, — пишет специалист. — Но разве “ИИ-агент” не должен иметь встроенные защитные механизмы? Очевидно, что этот агент, обрабатывавший urls[], не учитывал возможное исчерпание ресурсов и не понимал, почему отправлять тысячи запросов в секунду на один домен — это плохая идея. Разве он не должен понимать, что victim.com/1 и victim.com/2 ведут на один и тот же сайт? И если victim.com/1 не отвечает, зачем тут же запрашивать victim.com/2? Ведь это базовые проверки, которые разработчики давно внедряют в свои системы, чтобы предотвращать подобные атаки».