À 1h do horário do Pacífico em 20 de março de 2023, a OpenAI introduziu uma mudança nos servidores do ChatGPT que provocou um pico de cancelamentos de requisições ao Redis. A OpenAI usa o Redis para armazenar em cache informações dos usuários, evitando consultar seu banco de dados a cada requisição, e seus servidores em Python se comunicam com o cache por meio da biblioteca redis-py, que reaproveita conexões entre requisições.

Com o Asyncio, uma requisição cancelada depois de entrar na fila mas antes de sua resposta chegar corrompe a conexão; a próxima requisição não relacionada pode então receber dados que ficaram nela. Em alguns casos, os dados retornados correspondiam ao que o solicitante esperava, de modo que um usuário viu os títulos do histórico de conversas de outro usuário ativo — e, numa janela de nove horas, alguns assinantes do ChatGPT Plus puderam ver o nome, o e-mail, o endereço de cobrança, o tipo de cartão, a data de validade e os quatro últimos dígitos do cartão de outro usuário. Números completos de cartão nunca foram expostos.

A OpenAI tirou o ChatGPT do ar, corrigiu o bug no redis-py, adicionou verificações redundantes dos dados de cada requisição, melhorou o registro de logs e notificou os usuários afetados. Ela estimou que as informações de cobrança expostas atingiram 1,2% dos assinantes do ChatGPT Plus que estavam ativos naquela janela, e afirmou que o número de usuários cujos dados foram de fato revelados a outra pessoa foi extremamente baixo.

O ChatGPT foi tirado do ar; informações relacionadas a pagamento de 1,2% dos assinantes ativos do ChatGPT Plus foram expostas durante uma janela de nove horas — números completos de cartão não foram expostos.

Um pool de conexões compartilhado presumia que requisições canceladas não poderiam corromper respostas posteriores — a condição de corrida do redis-py.

A mudança de 20 de março provocou um pico de cancelamentos, transformando um bug raro numa exposição realista.

O cache do ChatGPT continha dados pessoais e de pagamento, então um bug de cache virou um incidente de privacidade.

Nada no caminho do cache validava que os dados retornados pertenciam ao usuário solicitante antes de entregá-los.

Quando conexões de cache em pool atendem vários usuários, toda resposta deve ser validada em relação ao solicitante — e uma mudança que provoca um pico de cancelamentos é uma potencial violação de isolamento, não apenas uma indisponibilidade.

A OpenAI restaurou o histórico de conversas em poucos dias (menos algumas horas) e os mantenedores do Redis lançaram uma correção. O incidente atraiu atenção regulatória imediata: em 31 de março, o Garante da Itália baniu temporariamente o ChatGPT, citando entre outras preocupações a violação de dados de 20 de março, e a OpenAI desativou o serviço na Itália enquanto enfrentava uma possível multa de até €20 milhões ou 4% do faturamento global. O caso tornou-se uma referência de quão rápido a camada de cache de um serviço de IA pode transformar um problema de escalabilidade numa crise de proteção de dados.

CONFIRA AS EVIDÊNCIAS

As fontes

  1. March 20 ChatGPT outage: Here's what happened OpenAI · web.archive.org ·
  2. A bug revealed ChatGPT users' chat history, personal and billing data Help Net Security · helpnetsecurity.com ·
  3. Italy curbs ChatGPT, starts probe over privacy concerns Reuters · tech.yahoo.com ·