Паспорта, логи и невидимые картинки. Интерфейс OpenAI позволяет хакерам красть данные пользователей

OpenAI отказалась признать багом возможность эксфильтрации данных через Markdown-изображения.


m26a3fka518v6boxkiy91m2kc1y10bgl.jpg

Представьте, что ваш чат-бот правильно сработал и не показал пользователю опасный ответ. А утечка все равно случилась позже, в самом неожиданном месте, когда разработчик открыл логи. Специалисты Promptarmor описали именно такой сценарий и утверждают, что просмотрщик логов OpenAI для API может стать точкой вывода конфиденциальных данных наружу из-за того, как интерфейс рендерит Markdown-картинки.

Суть атаки завязана на косвенную prompt injection . Злоумышленник не ломает приложение напрямую, а «отравляет» один из источников данных, которыми пользуется AI-инструмент, например страницу из интернета или иной внешний контент. Затем пользователь задает ассистенту вопрос, и внедренная инструкция заставляет модель сформировать ответ с Markdown-изображением, где ссылка ведет на домен атакующего, а в параметры URL подставляются чувствительные данные из контекста. Примерно в духе attacker.com/img.png?data=..., где вместо многоточия может оказаться PII, документы или финансовые сведения.

Во многих приложениях такой ответ не дойдет до пользователя, потому что разработчики заранее включают защиту. Это может быть «судья»-модель, которая флагует подозрительный контент, или санитизация Markdown, или вообще вывод только в plain text, плюс политики безопасности контента. В описанном кейсе вредоносный ответ как раз был заблокирован и не отрисовался в интерфейсе KYC-сервиса, который автор использовал как пример. Проблема появляется на следующем шаге, когда заблокированный диалог попадает в очередь на разбор, а разработчик открывает его в панели OpenAI.

Логи для APIs «responses» и «conversations» в интерфейсе платформы отображаются с поддержкой Markdown. Если внутри ответа есть Markdown-картинка, браузер попытается загрузить ее автоматически. И вот тут происходит эксфильтрация: запрос уходит на сервер атакующего по той самой ссылке, где в URL уже «пришиты» секретные данные. Владелец домена видит в своих логах полный адрес запроса и получает то, что модель добавила в параметры, вплоть до паспортных данных или сведений о финансах.