live_connect_constraints manquantSelon l'article de Ferdiansyah, l'implémentation de référence pour la création de tokens omettait le champ live_connect_constraints . Ce champ est censé contenir un objet
bidi_generate_content_setup qui lie le token à un modèle, une instruction système et un ensemble d'outils spécifiques.
Lorsque live_connect_constraints est laissé vide ou absent, aucune contrainte n'est appliquée. Un attaquant qui obtient le token éphémère peut alors envoyer une trame de configuration contrôlée par le client spécifiant n'importe quel modèle, prompt système et outils de son choix. Le serveur, ne disposant pas de valeurs liées au token pour valider la configuration, accepte celle de l'attaquant.
Mise en garde importante : Les sources fournies n'incluent pas la documentation officielle de Google pour
live_connect_constraints, un CVE, ou un avis de sécurité de Google confirmant ce comportement. L'affirmation provient du post Medium de Ferdiansyah et doit être traitée comme non vérifiée mais plausible.
Si la vulnérabilité est réelle, les conséquences sont significatives pour toute application utilisant l'API Gemini Live dans un contexte de navigateur :
Des développeurs sur le forum Google AI ont signalé des problèmes avec les tokens éphémères qui ignorent les instructions système et ne fonctionnent pas comme prévu avec les points de terminaison contraints, ce qui suggère que l'écosystème global est encore en phase de maturation .
La correction décrite par Ferdiansyah est simple : il faut renseigner le champ live_connect_constraints.bidi_generate_content_setup
model — Le modèle Gemini exact à utiliser (par exemple, models/gemini-2.5-flash-native-audio-latest).system_instruction — Les instructions système prévues, structurées comme parts contenant text.tools — Un tableau vide [] ou seulement les outils explicitement autorisés, empêchant l'injection côté client.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": "Vous êtes un assistant du service client..."}]
},
"tools": []
}
}
})Remarque : Étant donné que
live_connect_constraintsn'est pas documenté dans la référence officielle de l'API Google fournie dans les sources, cet exemple est basé sur la propre description de Ferdiansyah et doit être testé par rapport à l'API réelle avant une utilisation en production.
Les points clés suivants restent non vérifiés par les sources fournies :
live_connect_constraints.BidiGenerateContentConstrained lorsqu'il reçoit un token sans contrainte n'est pas documenté dans les références officielles fournies En attendant que Google publie un avis officiel, l'approche la plus sûre est de considérer la vulnérabilité comme plausible et d'appliquer la correction de manière proactive :
live_connect_constraints ou son champ équivalent.newSessionExpireTime d'environ 60 secondes pour limiter la fenêtre de vol du token L'API Gemini Live est un outil puissant pour créer des expériences vocales et vidéo en temps réel. Un seul champ manquant dans le processus de création de token ne devrait pas compromettre cette capacité — mais les développeurs doivent s'assurer que leurs implémentations sont complètes.
Cet article a été vérifié par les faits à l'aide de 27 sources fournies, y compris la documentation officielle de Google, les discussions sur les forums communautaires et l'article original du chercheur. Les principales affirmations du chercheur n'ont pas pu être vérifiées de manière indépendante à partir de sources officielles au moment de la publication.