Ferdiansyah氏の報告によると、Googleが公開しているリファレンス実装では、トークン発行時に**live_connect_constraintsフィールドが省略されていました**。本来このフィールドには
bidi_generate_content_setupオブジェクトを含め、トークンを使用するモデル、システム指示(システムプロンプト)、およびツールセットをバインド(紐付け)する必要があります。
このlive_connect_constraintsが空、あるいは存在しない場合、何の制約も適用されません。攻撃者がエフェメラルトークンを入手すると、**クライアント側で自由に設定したフレーム(setup frame)**を送信し、任意のモデルやシステムプロンプト、ツールを指定できてしまいます。サーバー側にはトークンに紐づいた設定値がないため、攻撃者の設定をそのまま受け入れてしまうのです。
重要な注意点: 提供されたソースには、
live_connect_constraintsに関するGoogle公式ドキュメント、CVE(共通脆弱性識別子)、またはGoogleのセキュリティアドバイザリは含まれていません。この主張はFerdiansyah氏のMedium投稿に基づくものであり、現時点では未検証ですが、 plausible( plausibly あり得る)なものとして扱う必要があります。
もしこの脆弱性が現実のものだった場合、ブラウザベースでGemini Live APIを使用するアプリケーションに深刻な影響を及ぼします。
Google AIフォーラムでは、エフェメラルトークンがシステム指示を無視する、制限付きエンドポイントが期待通りに動作しないといった報告が既に複数上がっており、この分野のエコシステムがまだ成熟段階にあることを示唆しています。
Ferdiansyah氏が提案する修正方法は非常にシンプルです。トークン発行時にlive_connect_constraints.bidi_generate_content_setup。
model — 使用するGeminiモデルを指定(例: models/gemini-2.5-flash-native-audio-latest)system_instruction — システムプロンプトをpartsとtextの構造で指定tools — 空の配列[]か、明示的に許可したツールのみを指定し、クライアント側からのツール注入を防ぐ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リファレンスでは確認できていません。そのため、このコード例はFerdiansyah氏の説明に基づくものであり、本番環境で使用する前に実際のAPIでテストする必要があります。
以下の重要な点については、提供されたソースでは確認が取れていません。
Googleから公式なアドバイザリが公開されるまでは、この脆弱性を「あり得る」ものとして捉え、予防的に対策を講じるのが最も安全なアプローチです。
live_connect_constraints(または同等のフィールド)が正しく設定されているか確認しましょう。newSessionExpireTimeを約60秒に設定することを推奨しており、これによりトークンが漏洩した場合の被害を最小限に抑えられますGemini Live APIは、リアルタイムの音声・動画体験を構築するための強力なツールです。たった1つのフィールドの欠落がその可能性を損なうことがないよう、開発者は実装を確実に完了させる必要があります。
本記事は、Google公式ドキュメント、コミュニティフォーラムの議論、および研究者のオリジナル記事を含む21の提供ソースに基づいてファクトチェックされています。研究者の主張のうち主要なものは、公開時点では公式ソースから独立して検証できていません。