live_connect_constraintsСогласно публикации Фердиансяха, в эталонной реализации создания токена было пропущено поле live_connect_constraints A. Это поле предназначено для хранения объекта bidi_generate_content_setup, который привязывает токен к конкретной модели, системной инструкции и набору инструментов.
Если live_connect_constraints пусто или отсутствует, никакие ограничения не применяются. Злоумышленник, получивший эфемерный токен, может отправить управляющий фрейм от клиента, указав любую модель, системный промпт и инструменты. Сервер, не имея привязанных к токену значений для проверки, принимает конфигурацию атакующего.
Важное примечание: В предоставленных источниках отсутствует официальная документация Google для
live_connect_constraints, CVE или официальное уведомление Google о безопасности, подтверждающее такое поведение. Утверждение основано на публикации Фердиансяха в Medium и должно рассматриваться как неподтвержденное, но правдоподобное A.
Если уязвимость реальна, последствия для любого приложения, использующего Gemini Live API в контексте браузера, весьма серьезны:
Разработчики на форуме Google AI сообщали о проблемах с игнорированием системных инструкций эфемерными токенами и о том, что они не работают должным образом с ограниченными конечными точками, что говорит о продолжающемся развитии экосистемы DD.
Описанное Фердиансяхом исправление довольно простое: заполнить поле live_connect_constraints.bidi_generate_content_setup при создании токена тремя значениями:
model — Точная модель Gemini для использования (например, models/gemini-2.5-flash-native-audio-latest).system_instruction — Целевой системный промпт, структурированный как parts, содержащие text.tools — Пустой массив [] или только явно разрешенные инструменты, предотвращая внедрение на стороне клиента.Вот пример кода на Python из публикации Фердиансяха A:
token = gemini_client.auth_tokens.create({
"uses": 1,
"expire_time": now + timedelta(seconds=60),
"new_session_expire_time": now + timedelta(seconds=60),
"live_connect_constraints": {
"bidi_generate_content_setup": {
"model": "models/gemini-2.5-flash-native-audio-latest",
"system_instruction": {
"parts": [{"text": "Вы — ассистент службы поддержки клиентов..."}]
},
"tools": []
}
}
})
Примечание: Поскольку
live_connect_constraintsне задокументирован в официальном справочнике Google API из источников, этот пример основан на собственном описании Фердиансяха и должен быть протестирован на реальном API перед использованием в промышленной среде A.
Следующие ключевые моменты остаются неподтвержденными предоставленными источниками:
live_connect_constraints.BidiGenerateContentConstrained при получении неограниченного токена не задокументировано в предоставленных официальных источниках DS.Пока Google не опубликует официальное уведомление, самым безопасным подходом будет считать уязвимость вероятной и применить исправление превентивно:
live_connect_constraints или его эквивалентное поле.newSessionExpireTime около 60 секунд, чтобы ограничить окно для кражи токена G.Gemini Live API — это мощный инструмент для создания голосовых и видеоинтерфейсов в реальном времени. Одно пропущенное поле в процессе создания токена не должно подрывать эту возможность, но разработчики должны убедиться, что их реализации завершены.
Эта статья была проверена по 27 предоставленным источникам, включая официальную документацию Google, обсуждения на форумах сообщества и оригинальную публикацию исследователя. Ключевые утверждения исследователя не могли быть независимо проверены по официальным источникам на момент публикации.