Faille ChatGPT classée P1, la plus grave : OpenAI la corrige en huit jours pour 5 000 $
Un simple lien de partage ChatGPT piégé pouvait exécuter le code d'un attaquant dans la session de celui qui l'ouvrait. OpenAI a corrigé la faille en huit jours et versé 5 000 dollars.
Une conversation ChatGPT partagée via son lien public pouvait faire exécuter le code d'un attaquant dans la session connectée de la personne qui l'ouvrait, et donner accès à ses conversations privées. C'est ce que démontrent les chercheurs de la société de sécurité Parameter. Selon The Hacker News, ils ont signalé la faille via le programme de bug bounty d'OpenAI le 18 octobre. OpenAI l'a corrigée huit jours plus tard et l'a classée P1, sa catégorie la plus grave. La prime totale s'élève à 5 000 dollars.
Un lien, un ou deux clics
Le piège était une conversation ordinaire, partagée par la fonction publique de ChatGPT. Il pouvait circuler comme n'importe quel partage : par courriel, message, ticket de support ou réseau social. La victime n'avait rien à installer, aucun espace de travail à rejoindre.
Dans la version la plus fiable, elle ouvrait le lien puis cliquait une fois sur le bouton « Preview ». Les chercheurs ont ensuite configuré le bloc HTML pour que l'aperçu s'ouvre seul : l'ouverture du lien suffisait alors. Parameter indique avoir reproduit ce chemin automatique trois fois sur un compte distinct, avec une alerte au bout d'environ 4,5 secondes (Parameter).
Comment le bac à sable a été contourné
Preview transforme un bloc HTML en petite page web. Comme elle peut contenir n'importe quel code, ChatGPT l'exécute dans un cadre restreint, sur une autre adresse. Ce cloisonnement a tenu : le code de l'aperçu ne pouvait pas lire la page principale.
La brèche venait d'ailleurs. La même conversation contenait un graphique interactif, dont l'affichage charge MathLive, une bibliothèque de mathématiques. Elle installe dans la page principale un écouteur de messages liés à son clavier virtuel. Or ce récepteur acceptait, de n'importe quel émetteur, un message modifiant la disposition du clavier, et cette disposition pouvait contenir du HTML brut. Parameter compare le mécanisme postMessage à une fente de boîte aux lettres : l'aperçu ne peut pas entrer, mais il peut y glisser un message.
Le HTML injecté créait un cadre sans attribut de bac à sable, que le navigateur rattachait à chatgpt.com. Restait la politique de sécurité des contenus (CSP), qui bloquait le code en ligne mais autorisait les scripts venus de YouTube. Le point d'accès oEmbed de YouTube renvoyait en écho le paramètre de rappel fourni par l'attaquant, ce qui permettait d'exécuter du JavaScript. Simon Willison, qui a relayé l'analyse, décrit une chaîne d'attaque « assez complexe » (Simon Willison).
Ce que le code pouvait faire
Une fois exécuté, le code disposait des mêmes accès que le site. Il listait les conversations récentes, ouvrait une conversation privée jamais partagée avec l'attaquant et en envoyait un fragment à un serveur des chercheurs, par une simple requête d'image. Il appelait directement les API authentifiées de ChatGPT plutôt que de copier le contenu de l'écran.
« Essentiellement, nous pouvions effectuer n'importe quelle action au nom du compte ChatGPT de la victime », écrivent les chercheurs (traduction) (The Hacker News). Il s'agissait d'un test contrôlé : la preuve a été faite entre comptes distincts, et Parameter ne signale aucun usage réel de la faille.
Les causes et le correctif
Pour Parameter, trois choix de conception se sont combinés : MathLive agissait sur un message sans vérifier le cadre émetteur, le format admettait du HTML brut, et ce HTML pouvait créer un document non isolé héritant de l'identité de chatgpt.com. L'étape YouTube n'est que le dernier contournement. Bloquer ce seul point d'accès aurait laissé un aperçu non fiable capable d'injecter du HTML dans le site principal.
Selon Parameter, OpenAI a reproduit l'exécution de code et la preuve sur conversation privée, relevé la gravité de P2 à P1, puis déployé un correctif sur deux versions du frontal web. Le 26 octobre, les deux rejetaient les messages MathLive entre cadres. Les utilisateurs n'ont rien à faire : le correctif est côté OpenAI. Parameter a publié son analyse le 28 octobre, après la correction.
Sur le montant, Simon Willison est le seul à se prononcer dans les sources : il estime la prime « un peu bon marché » pour une vulnérabilité aussi grave (Simon Willison). Les sources ne disent pas comment OpenAI fixe ses barèmes.
Sources
- A Shared ChatGPT Link Could Run Attacker Code in Your Session and Read Private Chats — The Hacker News
- Do the Math: How We Took Over ChatGPT Accounts — Parameter
- How We Took Over ChatGPT Accounts — Simon Willison's Weblog