Gemini Live Voice Session Flaw Enables Tool Injection Through Misconfigured Ephemeral Tokens
2026/07/06 CyberSecurityNews — Google の Gemini Live API 実装における、セキュリティ上の脆弱性を突く攻撃者が、Google のリファレンス実装に起因するトークンのミスコンフィグを悪用する可能性がある。その結果として、ブラウザ・ベースの AI 音声セッションを乗っ取り、システム・プロンプトを上書きし、認可されていないコードを実行できる。Gemini Live API が永続的な WebSocket 接続を通じて、リアルタイム音声アシスタントを動作させていることを、セキュリティ研究者 Alvin Ferdiansyah が確認した。

2つのエンドポイントが存在する。BidiGenerateContent は Raw API Key を使用する Server-to-Server 呼び出し用のエンドポイントである。その一方で、BidiGenerateContentConstrained は Browser-Client 向けに設計されており、短命のトークンをを使用することで、API Key が Client に到達しない設計となっている。
すべてのセッションは、Client が送信する Setup Frame から開始される。この Frame で定義されるのは、model/system instruction/code execution/Google Search/URL 取得などの利用可能なツールである。重要な点として、この Frame の全フィールドはオプションであり、バックエンドにより明示的に固定されていない項目は、すべて Client 側で制御可能となる。
短命のトークンは、バックエンド呼び出しを通じて発行される。この呼び出しにおいて、live_connect_constraints field に bidi_generate_content_setup を取り込むことができる。
これにより、model/system prompt/tool が Server 側で固定されるが、設定されていない場合には問題が生じる。Google のドキュメントによると、Client が Setup Frame で送信した内容が、そのまま Server に受け入れられる。
認証と認可は完全に分離されており、有効なトークンが証明するのは、Client が接続を許可されていることだけであり、何を実行する権限を持つかまでは保証されない。さらに問題を深刻にしているのは、Google の公式リファレンス・リポジトリ “google-gemini/gemini-live-api-examples” に含まれる “server.py” が、uses/expire_time/new_session_expire_time のみを用いてトークンを発行し、live_connect_constraints を完全に省略している点である。
したがって、Google のリファレンス実装を基に開発された製品は、この脆弱性をデフォルトで引き継ぐことになる。
Gemini Live 音声セッションの欠陥
コンシューマー向けの音声アシスタントのテスト中、Alvin Ferdiansyah は Burp Suite を用いてトークン発行レスポンスを傍受し、bidi_generate_content_setup field が存在しないことを確認した。そのエンドポイント名には “Constrained” が含まれていたが、実際にはセッションが制約されていないことを示していた。有効なトークンを得るために必要なのはメールアドレスと OTP のみであり、2 分以内に取得できた。
研究者は WebSocket に直接接続し、システム・インストラクションを上書きして codeExecution を有効化する Custom Setup Frame を送信した。Server は setupComplete を返して Setup Frame を受け入れ、その後に送信した Python ペイロードは Google の gVisor サンドボックス内で正常に実行された。
この出力がハルシネーションではないことを確認するために、研究者は nonce ベースの証明を使用した。これは、サンドボックスの実行時にランダム値と kernel バージョンに結び付く SHA-256 hash を計算するものであり、生成されたハッシュの検証により、実際にコードが実行されたことが確認された。
gVisor サンドボックスは、アウトバウンド・ネットワーク・アクセスやホスト・エスケープを防止するため、被害はサンドボックス内の計算資源の悪用や偵察に限定され、ラテラル・ムーブメントには至らない。ただし、アクセス制限が存在しないため、登録済みの任意のユーザーがトークンを更新し続けることで、課金対象となる API リソースが無期限に消費されてしまう。
修正に必要なのは、トークン発行呼び出しに 1 項目を追加するだけである。具体的には、live_connect_constraints.bidi_generate_content_setup に使用する空の model/system prompt/tools 配列を設定することで、すべてのセッション・パラメータが Server 側で固定され、このインジェクション経路は完全に遮断される。
ブラウザ向けの Gemini Live 統合で短命トークンを使用していても、この Field を設定していない製品は、同種の脆弱性にさらされている可能性が高い。
訳者後書:Google の公式 リファレンス実装におけるトークン設定の不備が、この問題の主な原因となっています。本来はブラウザ向けのセッションを制限するためのエンドポイントですが、トークン発行時に Server 側で機能を固定する設定が省略されていたことで、Client 側からの自由な操作を許す状況になっていました。認証自体の成功と、Client に許可される操作の管理が分離されていたことで、トークン自体が有効であれば、あらゆる Custom Setup Frame を受け入れる状態になっていました。開発の際には、公式のサンプルコードであっても、そのまま受け入れず、live_connect_constraints などのセキュリティ設定が適切に反映されているかを確認することが大切です。
You must be logged in to post a comment.