
Proof-of-concept, демонстрирующий хранимый XSS и IDOR в чате AI-агента Chaindesk, позволяющий кражу токенов сессии и захват учетной записи.
Chaindesk, веб-приложение для создания AI-агентов, уязвимо для межсайтового скриптинга с сохранением (XSS) в компоненте чата агента. Злоумышленник может добиться произвольного выполнения скриптов на стороне клиента, создав AI-агента, системный промпт которого инструктирует базовую большую языковую модель (LLM) внедрять вредоносные скриптовые полезные нагрузки (например, XSS на основе SVG) в ответы чата. Когда пользователь взаимодействует с таким вредоносным агентом или переходит по прямой ссылке на разговор, содержащий XSS-полезную нагрузку, скрипт выполняется в браузере пользователя. Успешная эксплуатация может привести к краже конфиденциальной информации, такой как токены сессии JWT, что потенциально может привести к угону учетной записи. Уязвимость небезопасной прямой ссылки на объект (IDOR) в структуре URL разговора (https://app.chaindesk.ai/agents/<agentID>?tab=chat&conversationId=<conversationID>) облегчает распространение этих вредоносных ссылок на разговоры и также может представлять риск несанкционированного доступа к другим сеансам чата.
Chaindesk подвержен уязвимости межсайтового скриптинга с сохранением (XSS) в функциональности чата AI-агента. Эта уязвимость затрагивает взаимодействия пользователей и отображение разговоров, доступ к которым осуществляется через URL-адреса, такие как https://app.chaindesk.ai/agents/<agentID>?tab=chat&conversationId=<conversationID>.
Основной метод эксплуатации этой XSS включает создание злоумышленником AI-агента с поддельным системным промптом. Этот вредоносный промпт предписывает интегрированной большой языковой модели (LLM) генерировать ответы, содержащие встроенную XSS-полезную нагрузку на основе SVG. Следовательно, когда жертва начинает чат с этим скомпрометированным агентом, полезная нагрузка обрабатывается браузером жертвы, что приводит к выполнению скрипта на стороне клиента. Этот метод эффективно использует конфигурацию агента для хранения и доставки XSS-полезной нагрузки. Выполнение произвольного JavaScript-кода в сессии жертвы позволяет злоумышленнику украсть конфиденциальные данные, в частности токены JWT, которые затем могут быть использованы для угона учетной записи. Рисунок 1 показывает отображение пользовательского интерфейса после общения пользователя с вредоносным агентом; при этом происходит утечка сессии и токена пользователя.

Кроме того, приложение демонстрирует уязвимость небезопасной прямой ссылки на объект (IDOR) (также классифицируемую как нарушение контроля доступа) в отношении того, как обрабатываются URL-адреса разговоров. Конечная точка https://app.chaindesk.ai/agents/<agentID>?tab=chat&conversationId=<conversationID> в основном полагается на параметры agentID и conversationID для отображения содержимого чата, при этом проверки контроля доступа, по-видимому, недостаточны. Эта уязвимость IDOR позволяет злоумышленнику: a) Создавать и распространять прямые URL-адреса, указывающие на контролируемые им разговоры, которые содержат XSS-полезную нагрузку (доставленную либо с помощью описанного выше метода LLM, либо потенциально внедренную иным образом). Когда жертва переходит по такому URL, выполняется XSS-полезная нагрузка. b) Потенциально получать доступ к разговорам других пользователей, если могут быть идентифицированы допустимые комбинации agentID и conversationID. Однако в первоначальном отчете указывается, что значения conversationID могут быть нелегко угадаемы для широкого несанкционированного доступа к уже существующим, не связанным разговорам. Тем не менее, полезность IDOR для доставки XSS-полезных нагрузок целевым жертвам остается значительной проблемой. На рисунке 2 показано доказательство концепции (POC) уязвимости IDOR.

Эта уязвимость может затронуть любого пользователя https://www.chaindesk.ai. Файл cookie (содержащий сессию и токен) пользователя будет украден при общении с публичным вредоносным агентом.