À 1 heure du matin, heure du Pacifique, le 20 mars 2023, OpenAI a introduit une modification sur les serveurs de ChatGPT qui a provoqué un pic d'annulations de requêtes Redis. OpenAI utilise Redis pour mettre en cache les informations des utilisateurs afin de ne pas devoir interroger sa base de données à chaque requête, et ses serveurs Python communiquent avec le cache via la bibliothèque redis-py, qui recycle les connexions entre les requêtes.
Avec Asyncio, une requête annulée après avoir été mise en file d'attente mais avant l'arrivée de sa réponse corrompt la connexion ; la requête suivante, sans lien avec la précédente, peut alors recevoir les données qui y sont restées. Dans certains cas, les données renvoyées correspondaient à ce que le demandeur attendait, si bien qu'un utilisateur a vu les titres de l'historique de conversations d'un autre utilisateur actif — et, pendant une fenêtre de neuf heures, certains abonnés à ChatGPT Plus ont pu voir le nom, l'adresse e-mail, l'adresse de facturation, le type de carte, la date d'expiration et les quatre derniers chiffres de la carte d'un autre utilisateur. Les numéros de carte complets n'ont jamais été exposés.
OpenAI a mis ChatGPT hors ligne, corrigé le bug dans redis-py, ajouté des contrôles redondants des données par requête, amélioré la journalisation et notifié les utilisateurs concernés. Elle a estimé que les informations de facturation exposées concernaient 1,2 % des abonnés à ChatGPT Plus actifs pendant cette fenêtre, et a déclaré que le nombre d'utilisateurs dont les données ont réellement été révélées à quelqu'un d'autre était extrêmement faible.
ChatGPT a été mis hors ligne ; les informations liées au paiement de 1,2 % des abonnés actifs à ChatGPT Plus ont été exposées pendant une fenêtre de neuf heures — les numéros de carte complets ne l'ont pas été.
Un pool de connexions partagé supposait qu'une requête annulée ne pouvait pas corrompre les réponses ultérieures — la condition de concurrence de redis-py.
La modification du 20 mars a provoqué un pic d'annulations, transformant un bug rare en une exposition réaliste.
Le cache de ChatGPT contenait des données personnelles et de paiement, si bien qu'un bug de cache est devenu un incident de confidentialité.
Rien sur le chemin du cache ne vérifiait que les données renvoyées appartenaient à l'utilisateur demandeur avant de les servir.
La leçon
Lorsque des connexions de cache mutualisées servent plusieurs utilisateurs, chaque réponse doit être validée par rapport au demandeur — et une modification qui provoque un pic d'annulations constitue une possible atteinte à l'isolation, et pas seulement une panne.
Suites
OpenAI a rétabli l'historique des conversations en quelques jours (à quelques heures près) et les mainteneurs de Redis ont publié un correctif. L'incident a immédiatement attiré l'attention des autorités de régulation : le 31 mars, le Garante italien a temporairement interdit ChatGPT, citant notamment la violation de données du 20 mars parmi d'autres préoccupations, et OpenAI a désactivé le service en Italie tout en risquant une amende pouvant atteindre 20 millions d'euros ou 4 % du chiffre d'affaires mondial. L'affaire est devenue une référence pour illustrer la rapidité avec laquelle la couche de cache d'un service d'IA peut transformer un problème de montée en charge en crise de protection des données.
VÉRIFIEZ LES SOURCES
Les sources
- March 20 ChatGPT outage: Here's what happened OpenAI · web.archive.org ·
- A bug revealed ChatGPT users' chat history, personal and billing data Help Net Security · helpnetsecurity.com ·
- Italy curbs ChatGPT, starts probe over privacy concerns Reuters · tech.yahoo.com ·