Laurent Goudet

CTO chez Freelancer.com · Architecte agents IA

Analyses techniques sur les agents IA, le réseau et l'infrastructure à grande échelle.

Dernière publication

Cloud Security

Votre cle API Google Maps peut maintenant vider votre compte en banque

Google a silencieusement modifie les permissions des cles API pour que celles destinees a Maps puissent desormais appeler Gemini AI. Voici comment auditer vos projets GCP et verrouiller les cles exposees.

En fevrier 2026, un developpeur a publie sur Reddit que sa cle API Google Cloud avait ete compromise, generant 82 314 $ de charges Gemini AI en 48 heures contre une depense mensuelle normale de 180 $. Il faisait face a la faillite.

Le post est devenu viral. Mais la vraie histoire n’est pas celle d’une cle volee — c’est celle d’un changement silencieux que Google a apporte au fonctionnement des cles API, transformant des millions de cles auparavant inoffensives en passifs financiers potentiels du jour au lendemain.

Ce qui a change

Pendant plus d’une decennie, Google a dit aux developpeurs que les cles API ne sont pas des secrets. Leur documentation le disait explicitement. Le raisonnement etait sense : les cles API pour des services comme Google Maps etaient concues pour etre embarquees dans du JavaScript cote client, livrees dans des applications mobiles et commitees dans des depots publics. Elles identifiaient votre projet pour les quotas et la facturation, mais ne pouvaient pas acceder a des donnees sensibles ni effectuer d’operations privilegiees.

Puis Google a lance Gemini et change les regles.

Google Cloud utilise un format de cle API unique — des chaines commencant par AIza — pour tous les services. La meme cle qui authentifie une requete Maps JavaScript peut authentifier un appel a l’API Gemini. La seule chose qui controle quelles API une cle peut appeler, ce sont ses restrictions de cible API — et beaucoup de cles, creees quand les restrictions n’etaient pas necessaires, n’en ont aucune.

L’API Gemini (generativelanguage.googleapis.com) peut etre activee sur n’importe quel projet GCP. Une fois activee, chaque cle API sans restriction dans ce projet peut l’appeler. Si votre cle Maps n’a pas de restrictions et que Gemini est active sur le meme projet, n’importe qui possedant cette cle peut executer des requetes Gemini facturees a votre compte.

L'ampleur de l'exposition

Truffle Security a scanne l’internet et trouve pres de 3 000 cles API Google exposees dans du code cote client qui ont desormais acces a Gemini. Separement, Quokka a trouve plus de 35 000 cles API Google uniques embarquees dans des applications Android. Ces cles etaient sures a exposer pendant des annees — elles ne le sont plus.

Pourquoi c’est dangereux

L’API Gemini est chere a grande echelle. Une cle compromise peut generer des milliers de dollars de charges par heure. Contrairement a l’abus de l’API Maps, qui est limite en debit et relativement peu couteux par requete, l’inference LLM est gourmande en calcul et tarifee en consequence.

L’incident a 82 000 $ sur Reddit n’est pas une anomalie — c’est la consequence previsible du fait de rendre un service IA facturable accessible via des cles concues pour etre publiques. L’attaquant n’a pas besoin de voler des identifiants sur un serveur. Il lui suffit de trouver l’une des milliers de cles API deja presentes dans des depots GitHub publics, des bundles JavaScript cote client ou des applications mobiles decompilees.

Google a depuis reagi en restreignant par defaut les nouvelles cles AI Studio a l’acces Gemini uniquement et en bloquant les cles fuguees decouvertes utilisees avec l’API Gemini. Mais le probleme fondamental demeure : les cles existantes creees avant ce changement n’ont pas de restrictions, et Google ne peut pas les restreindre retroactivement sans casser des integrations legitimes.

Comment verifier si vous etes expose

Le risque depend de deux facteurs : si l’API Gemini est activee sur votre projet GCP, et si vos cles API ont des restrictions de cible. Vous pouvez verifier les deux avec la CLI gcloud.

Verification manuelle pour un seul projet

Lister toutes les cles API et leurs restrictions :

gcloud services api-keys list --project=YOUR_PROJECT_ID

Obtenir les details d’une cle specifique — cherchez restrictions.apiTargets :

gcloud services api-keys describe KEY_ID --project=YOUR_PROJECT_ID

Verifier si Gemini est active :

gcloud services list --enabled --project=YOUR_PROJECT_ID \
| grep -i generativelanguage

Si la cle n’a pas de apiTargets et que Gemini est active, cette cle peut appeler Gemini.

Audit automatise de tous les projets

Si vous gerez plus d’une poignee de projets GCP, les verifier un par un n’est pas pratique. J’ai ecrit un script qui scanne chaque projet de votre compte, verifie a la fois les restrictions de cible API et les restrictions d’application (IP, referrer, Android/iOS), et classifie chaque cle sans restriction par niveau de risque :

  • CRITICAL — La cle peut appeler Gemini ET est publiquement accessible (aucune restriction, ou restrictions cote client comme referrer/Android/iOS qui sont facilement contournables)

  • HIGH — La cle peut appeler Gemini mais est restreinte par IP (cle serveur — risque plus faible car seules les IP autorisees peuvent l’utiliser)

  • MEDIUM — La cle n’a pas de restrictions API mais Gemini n’est pas active sur le projet (a un clic du risque)

Le script commence par un verdict clair — YOU ARE AT RISK, NOT AT RISK TODAY, ou YOU ARE NOT AT RISK — pour que vous sachiez immediatement si vous devez agir. Il verifie les projets en parallele (20 a la fois par defaut) et inclut la commande gcloud pour corriger chaque cle signalee.

Recuperez-le depuis le gist et lancez-le :

curl -sL https://gist.githubusercontent.com/laurentgoudet/8cd3956be4c594bd9f88c9a16dc2f46b/raw/check_gemini_exposure.sh -o check_gemini_exposure.sh
chmod +x check_gemini_exposure.sh

# Scanner tous les projets
./check_gemini_exposure.sh

# Scanner uniquement certains projets
./check_gemini_exposure.sh "freelancer|escrow"

# Augmenter le parallelisme
MAX_PARALLEL=40 ./check_gemini_exposure.sh

Vous avez besoin de la CLI gcloud authentifiee et de python3. Le script detecte automatiquement si la sortie standard est un terminal et desactive les codes couleur en cas de redirection vers un fichier.

Le script complet est disponible sous forme de

gist GitHub

.

Grandes organisations : filtrez et parallelisez

Le script effectue deux appels API par projet (un pour verifier les services actives, un pour lister les cles API). Les projets sys-* auto-generes (crees par Google Apps Script) sont filtres automatiquement. Pour les organisations avec des centaines de projets restants, le parallelisme par defaut de 20 reste bien en dessous de la limite de Google de 240 lectures de cles API par minute. Vous pouvez l’augmenter avec MAX_PARALLEL=40 si necessaire, ou utiliser l’argument de filtre pour cibler des projets specifiques.

Comment corriger

Une fois les cles exposees identifiees, il y a deux corrections complementaires.

Restreindre les cles API a des services specifiques

Chaque cle API devrait etre restreinte aux seules API dont elle a besoin. Une cle Maps ne devrait pouvoir appeler que les API Maps :

gcloud services api-keys update KEY_ID \
--project=YOUR_PROJECT_ID \
--api-target=service=maps-backend.googleapis.com \
--api-target=service=geocoding-backend.googleapis.com \
--api-target=service=places-backend.googleapis.com

C’est la bonne solution a long terme. Meme si Gemini n’est pas active aujourd’hui, restreindre les cles vous protege contre toute future API que Google ajoutera a la plateforme.

Desactiver l’API Gemini

Si personne dans votre organisation n’utilise Gemini via un projet particulier, desactivez-le :

gcloud services disable generativelanguage.googleapis.com \
--project=YOUR_PROJECT_ID

Cela elimine le risque immediat mais ne traite pas le probleme sous-jacent des cles sans restrictions. Faites les deux.

Configurer des alertes de facturation et des plafonds

Les alertes de facturation vous notifient quand les depenses depassent un seuil, mais elles n’arretent pas les charges. Les plafonds budgetaires peuvent reellement stopper l’utilisation de l’API. Pour tout projet avec des cles API exposees sur internet — ce qui inclut chaque projet avec une cle Maps dans du code cote client — configurez les deux.

Le probleme de fond

La reponse de Google — restreindre par defaut les nouvelles cles a l’acces Gemini uniquement et bloquer les cles fuitees decouvertes — traite les symptomes. La cause profonde est une decision de conception prise il y a des annees : utiliser un format d’identifiant unique pour deux cas d’usage fondamentalement differents — « identifiant public » et « jeton d’authentification sensible ».

Quand les cles API Google Maps ont ete introduites, les traiter comme non-secretes etait raisonnable. Elles identifiaient un projet pour la facturation et pouvaient etre limitees par referrer HTTP ou adresse IP. Le modele de securite supposait que ces cles n’accederaient jamais qu’a des API peu sensibles, limitees en debit et peu couteuses par requete.

Cette hypothese s’est effondree au moment ou le meme format de cle a obtenu l’acces a Gemini — un service ou une seule cle compromise peut generer des dizaines de milliers de dollars de charges en quelques heures. Google a essentiellement change le modele de menace de chaque cle API existante sans notifier les proprietaires.

Si vous gerez des projets GCP, lancez l’audit. Les cinq minutes necessaires pour restreindre vos cles coutent considerablement moins cher qu’une surprise a 82 000 $.

Sécurité réseau

IA & Industrie

Ingénierie CDN

Ingénierie réseau