Une critique faille ChatGPT découverte par l’équipe de recherche de Parameter Labs permettait de prendre le contrôle total d’un compte utilisateur et d’extraire ses conversations privées. Pour déclencher l’attaque, il suffisait d’inciter la victime à cliquer sur un simple lien de partage public standard généré depuis la plateforme.
Les points clés à retenir
- Vulnérabilité critique P1 : la vulnérabilité permettait d’exécuter du code JavaScript arbitraire dans la session connectée de n’importe quel utilisateur consultant une conversation partagée.
- Échappement de bac à sable : l’attaque combinait les aperçus interactifs HTML (Canvas) et la bibliothèque JavaScript
MathLivepour franchir l’isolation des iframes. - Contournement de la CSP : les chercheurs ont exploité un endpoint JSONP de YouTube autorisé par les règles de sécurité d’OpenAI pour injecter leur script.
- Vol de données direct : le payload pouvait requérir les API internes d’OpenAI pour lister l’historique des discussions, lire les échanges privés et les exfiltrer vers un serveur distant.
- Correctif déployé : OpenAI a colmaté la brèche le 26 octobre et versé une prime de 5 000 dollars, un montant jugé très modeste par la communauté au vu de la sévérité du problème.
Comment la faille ChatGPT contournait le bac à sable d’OpenAI
Le fonctionnement de cette faille ChatGPT repose sur l’assemblage ingénieux de deux fonctionnalités distinctes de l’interface : les aperçus interactifs d’applications web (anciennement Canvas ou HTML Previews, analysés dans notre comparatif ChatGPT vs Claude) et le rendu des formules mathématiques graphiques.
Afin de protéger ses utilisateurs, OpenAI isole l’exécution du code HTML généré par les modèles dans une iframe dotée d’un bac à sable strict (sandbox), hébergée sur un domaine distinct de chatgpt.com. En temps normal, cette frontière empêche le code tiers d’accéder aux cookies d’authentification ou au DOM de la page parente.
Cependant, lorsqu’une conversation intègre un graphique interactif, la page principale charge la bibliothèque JavaScript MathLive pour gérer la saisie mathématique. Pour permettre l’affichage d’un clavier virtuel à l’écran, MathLive met en place un écouteur d’événements via l’API standard window.postMessage().
Les chercheurs de Parameter Labs ont constaté que cet écouteur acceptait des messages provenant de n’importe quelle origine sans vérifier l’expéditeur. Pire encore, la configuration du clavier transmise pouvait contenir du balisage HTML réinjecté directement dans la page principale via innerHTML sans filtrage adéquat.
Bien que l’insertion directe de balises <script> via innerHTML ne soit pas exécutée par les navigateurs modernes, les chercheurs ont contourné cette restriction en injectant une iframe dotée de l’attribut srcdoc. Comme cette iframe était générée par le document parent, elle héritait automatiquement de l’identité et du contexte de sécurité du domaine https://chatgpt.com.
Le contournement de la Content Security Policy (CSP)
Une fois l’iframe intégrée au domaine principal, la Content Security Policy (CSP) de ChatGPT constituait le dernier rempart. Cette politique de sécurité bloque rigoureusement les scripts en ligne (inline scripts) et limite les domaines autorisés à une poignée de services tiers indispensables.
Parmi ces domaines autorisés figurait YouTube. Les chercheurs ont découvert que le point de terminaison oEmbed de YouTube (/oembed) supportait un paramètre de rappel JSONP (callback). Même lorsque l’API rejetait une valeur non standard avec un message d’erreur HTTP 400, elle renvoyait la fonction demandée dans le corps de la réponse.
En encapsulant leur charge utile dans une requête oEmbed vers YouTube terminée par ;void, le navigateur acceptait de charger la réponse comme un script légitime et exécutait immédiatement le code malveillant au sein de la session active de la victime.
| Étape de l’attaque | Composant ciblé | Mécanisme d’exploitation |
|---|---|---|
| 1. Sortie du bac à sable | Bibliothèque MathLive | Écouteur postMessage permissif sans validation d’origine |
| 2. Création de contexte | DOM chatgpt.com | Injection innerHTML d’une iframe srcdoc non isolée |
| 3. Évasion CSP | Endpoint oEmbed YouTube | Réflexion JSONP autorisée par la politique de sécurité |
| 4. Exfiltration | API REST ChatGPT | Requêtes authentifiées pour lire discussions et fichiers privés |
Un vecteur d’attaque transparent par simple lien de partage
La dangerosité de cette vulnérabilité résidait dans son mode de propagation. L’attaquant n’avait pas besoin de convaincre sa cible d’installer un plugin ou de manipuler des options avancées. Il lui suffisait d’intégrer dans une discussion un graphique légitime initialisant MathLive, suivi du bloc HTML piégé, puis de générer un lien de partage classique chatgpt.com/share/....
Dès l’ouverture du lien par un utilisateur connecté, la charge utile se déclenchait. Dans les tests réalisés par Parameter Labs, l’exécution s’effectuait en environ 4,5 secondes après l’ouverture de la page. Une fois activé, le script interrogeait directement les routes de l’API interne d’OpenAI :
GET /backend-api/conversations?limit=20
GET /backend-api/conversations/<conversation-id>
Le code pouvait lister l’ensemble des discussions de la victime, extraire les messages d’un fil confidentiel contenant des secrets ou des données sensibles, puis exfiltrer ces éléments via une simple requête d’image vers un serveur contrôlé par l’attaquant.
Face à la montée en puissance des agents autonomes et des outils professionnels comme ChatGPT Pro et Codex, ce type de faille met en lumière la porosité potentielle des interfaces web riches intégrant du code dynamique.
Mon avis sur la sécurité des interfaces d’IA
Le versement d’une prime de bug bounty de seulement 5 000 dollars par OpenAI pour une chaîne d’exploitation d’une telle élégance technique prête à sourire, ou plutôt à s’inquiéter face aux critères habituels pour évaluer la gravité des failles IA. Nous sommes face à une prise de contrôle de compte avec lecture de conversations privées en un clic sur une URL officielle.
Cette vulnérabilité rappelle une réalité fondamentale du développement web : la multiplication des bibliothèques JavaScript tierces pour enrichir le rendu visuel (graphiques, éditeurs LaTeX, aperçus de code) fragmente la surface d’attaque. Même avec une Content Security Policy soignée, une seule exception accordée à un service tiers externe comme YouTube suffit à faire sauter tout le verrouillage. OpenAI a réagi rapidement en neutralisant la faille dès le 26 octobre, mais l’incident démontre que la sécurité des plateformes d’IA ne se joue pas uniquement au niveau du modèle ou de ses filtres d’alignement, mais bien dans les fondations classiques du code front-end.
Sources
- Parameter Labs — Do the Math: How We Took Over ChatGPT Accounts
- Simon Willison — How We Took Over ChatGPT Accounts
- Hacker News — Discussion technique sur la vulnérabilité ChatGPT
Pour aller plus loin et protéger tes déploiements contre ce type d’attaque par exfiltration, consulte notre guide tactique pour sécuriser un agent IA par le test d’intrusion et l’architecture Dual LLM.

