Un lien de conversation ChatGPT, comme ceux qu’on colle dans un mail. Sauf que celui-là exécutait du code dans la session connectée de la personne qui l’ouvrait. Le 28 octobre, la société de sécurité Parameter a publié ses recherches : le lien piégé permettait de lister les conversations récentes d’une victime, d’ouvrir un chat privé jamais partagé et d’en envoyer un extrait vers un serveur contrôlé par les attaquants.
Chronologie : signalement via le bug bounty OpenAI le 18 octobre 2026, correctifs déployés sur les deux versions du frontend web le 26 octobre, divulgation publique le 28 octobre, couverture par The Hacker News le 31 octobre. OpenAI a reproduit le problème, fait passer la sévérité de P2 à P1 et payé 5 000 dollars.
Le sandbox a tenu, c’est ailleurs que ça casse
Trois fonctionnalités, aucune cassée prise seule.
- Preview transforme un bloc HTML d’une conversation en mini page web, exécutée dans une iframe sur une origine séparée. Ce cloisonnement a fonctionné comme prévu.
- Un graphique interactif dans la même conversation fait charger MathLive dans la page principale. La bibliothèque laisse un listener actif pour son clavier à l’écran, qui acceptait des messages de n’importe quelle frame, sans vérifier l’origine de l’expéditeur.
- Ces messages pouvaient transporter du HTML brut déguisé en données de disposition de clavier. L’iframe Preview, pourtant isolée, injectait donc du HTML dans la page de confiance.
Ce HTML créait une nouvelle frame que le navigateur traitait comme appartenant à chatgpt.com — non sandboxée, héritant de l’origine. La CSP de ChatGPT bloque les scripts inline mais autorise ceux de YouTube : le script final venait de là. Parameter précise que YouTube n’est pas la cause, seulement le contournement — bloquer YouTube laisserait l’injection intacte.
Une fois exécuté, le code ne lisait pas l’écran : il appelait directement les API authentifiées de ChatGPT. D’où la formule des chercheurs : « Essentiellement, nous pouvions effectuer n’importe quelle action au nom du compte ChatGPT de la victime. »
Pourquoi c’est important
Le vecteur est un lien public. Pas d’installation, pas d’extension, pas de workspace à rejoindre : dans la version la plus fiable, ouvrir le lien et cliquer une fois sur Preview suffisait. Parameter a ensuite démontré une variante où Preview s’ouvre tout seul. Ça se diffuse par mail, DM ou post social, comme un partage légitime.
Et le sandbox n’était pas le problème : c’est un composant tiers qui accepte des messages sans vérifier event.origin.
Ce que ça change pour les devs et le web
Vérifiez l’origine de chaque message. Un postMessage sans contrôle d’origine est une frontière ouverte : c’est la racine de cette chaîne. Un listener qui accepte des données de configuration contenant du HTML est une injection qui attend son heure.
Votre CSP est une allowlist, donc une surface d’attaque. Autoriser un CDN ou une plateforme vidéo « parce qu’on en a besoin » revient à autoriser tout script servi depuis cette origine. Le bypass CSP n’était pas la faille, mais il a transformé une injection HTML en exécution de code.
Testez les compositions, pas seulement les features. Chaque brique était testée seule ; le bug vivait dans leur intersection. Les revues sécurité fonction par fonction ne voient pas ça.
Côté utilisateurs, rien à faire : le correctif est côté OpenAI, sans rien à installer. Parameter ne rapporte aucune exploitation réelle, et sa démonstration de lecture de chat privé s’est faite entre comptes contrôlés par les chercheurs. Ce qui n’enlève rien à la leçon : la frontière entre contenu non fiable et application de confiance se vérifie à chaque message.