A vítima precisava fazer algo além de abrir o link?
Pesquisadores de segurança descobriram uma forma de transformar um link público comum de compartilhamento do ChatGPT em uma ferramenta para assumir o controle da conta de outro usuário. Abrir o link era a única ação que a vítima precisava realizar. A OpenAI corrigiu a falha em 26 de outubro e classificou o relatório como P1.
Como funcionou o ataque por meio do link compartilhado do ChatGPT?
O ataque começou com dois recursos que pareciam inofensivos isoladamente. O primeiro era o recurso Preview do ChatGPT, que transforma um bloco de código HTML em uma pequena página web funcional. O ChatGPT executa essa página em um quadro restrito, em um endereço web separado, de modo que seu código não consegue inspecionar diretamente a página autenticada do ChatGPT ao redor. O segundo era um gráfico interativo. Nos bastidores, o gráfico carregava uma biblioteca matemática chamada MathLive, que instalou um ouvinte de eventos na página principal do ChatGPT para tratar mensagens relacionadas ao seu teclado na tela.
Esse ouvinte era o ponto fraco. Os navegadores permitem que dois quadros troquem mensagens entre si, mesmo quando não conseguem ler as páginas um do outro. O receptor deveria verificar quem enviou a mensagem antes de agir com base nela. Os pesquisadores descobriram que o MathLive não executava essa verificação em uma configuração específica. Seu ouvinte aceitava uma mensagem que substituía o layout do teclado, e esse layout podia conter HTML bruto. O quadro Preview, que deveria ser considerado não confiável, conseguia enviar essa mensagem.
Inserir HTML na página foi apenas o primeiro passo. Tags de script inseridas dessa forma não são executadas por conta própria. Os pesquisadores contornaram isso fazendo a página criar um quadro incorporado sem sandbox, o que lhes deu um novo documento no qual seu código podia ser executado. A política de segurança de conteúdo do ChatGPT bloqueava JavaScript inline, mas permitia scripts do YouTube. Os pesquisadores usaram um endpoint oEmbed do YouTube que aceitava um parâmetro de callback, o que lhes permitiu inserir o próprio código em uma resposta que o navegador carregaria como script. A mensagem de erro do endpoint era anexada após o callback, e encerrar a carga com uma expressão void impedia que esse erro quebrasse o código.
Uma vez que o código estava sendo executado como chatgpt.com, ele tinha o mesmo acesso da sessão da própria vítima. Segundo os pesquisadores, ele poderia chamar as APIs de conversas do ChatGPT, listar as conversas recentes da vítima e solicitar dados de mensagens de um chat privado selecionado. O chat acessado não tinha relação com o link compartilhado e nunca havia sido compartilhado com o atacante. A prova de conceito então enviou um pequeno trecho desses dados para um servidor controlado pelos pesquisadores. Eles afirmaram que o código já havia recebido a resposta completa, de modo que o ataque não se limitava ao conteúdo que eles escolhiam enviar. Os pesquisadores também disseram que tudo o que estivesse disponível pela interface web autenticada do ChatGPT estava dentro da mesma fronteira de segurança.
As primeiras versões eram menos perigosas. Um dos primeiros testes dependia de um App do ChatGPT controlado pelos pesquisadores, ao qual a vítima precisaria se conectar antes. A versão que realmente importava colocou o gráfico e o Preview malicioso em uma única conversa pública. Quando outro usuário abria o compartilhamento, a carga podia ser executada automaticamente. Nos testes dos pesquisadores, um alerta apareceu cerca de 4,5 segundos após o carregamento da página. Eles reproduziram o caminho automático três vezes em uma conta separada, inclusive após uma atualização forçada da página.
Como a OpenAI corrigiu a falha do link compartilhado do ChatGPT?
Os pesquisadores relataram o problema ao programa de recompensas por bugs da OpenAI em 18 de outubro. A OpenAI reproduziu a falha em 21 de outubro e elevou a gravidade de uma classificação inicial P2 para P1. A correção foi implantada em duas versões do front-end web do ChatGPT, e o cronograma não foi uniforme. Em 22 de outubro, a OpenAI informou que um front-end estava corrigido, enquanto o outro ainda estava em atualização. Mudanças na política de segurança de conteúdo bloquearam parte da cadeia durante esse intervalo. Em 26 de outubro, a OpenAI confirmou que ambas as versões rejeitavam as mensagens MathLive entre quadros, marcou o problema como resolvido e concedeu uma recompensa total de US$ 5.000.
Onde o design falhou
Os pesquisadores afirmaram que a sandbox do Preview funcionou conforme o esperado. A falha ocorreu quando um segundo componente da página principal aceitou instruções do quadro com sandbox sem verificar o remetente. O endpoint do YouTube foi a última solução alternativa para contornar a política de segurança de conteúdo, e não a causa raiz. Bloquear apenas esse endpoint teria fechado uma rota para o JavaScript, mas deixaria o caminho de injeção de HTML intacto.
Os pesquisadores disseram que o problema existia apenas na combinação dos recursos. O Preview estava isolado, gráficos podiam carregar um teclado, quadros podiam trocar mensagens, a política permitia um grande provedor de mídia e conversas públicas podiam ser compartilhadas. A vulnerabilidade surgia somente quando todos esses recursos se encontravam em uma mesma página. As recomendações deles para desenvolvedores incluíam verificar tanto a origem quanto a janela exata de qualquer mensagem que altere o estado, manter as configurações entre janelas livres de HTML bruto e manter documentos criados dinamicamente em sandbox quando um quadro não confiável puder influenciá-los.
Este artículo fue escrito con la asistencia de IA.
News Factory APP - noticias agénticas para impulsar tu SEO y AEO.