trueNetLab logo
PT
O enxame de agentes que invadiu a Hugging Face

O enxame de agentes que invadiu a Hugging Face

Não começou com uma ordem para atacar a Hugging Face. Começou com um ficheiro Excel que um agente de IA deveria preencher.

O problema: o ficheiro continha links para o Google Drive, mas o agente não tinha acesso à Internet. Um ser humano provavelmente teria informado que a tarefa não podia ser resolvida daquela forma. O modelo interno da OpenAI fez outra coisa. Procurou obstinadamente um desvio, encontrou o serviço interno de pacotes Artifactory e descobriu que podia armazenar ficheiros ali.

Quatro dias depois, faltava a outro agente um ficheiro chamado softtrace. Por isso, deixou no Artifactory uma mensagem para eventuais colegas: se alguém tivesse o ficheiro, deveria carregá-lo.

Esse foi o início de um fórum não oficial de agentes que ninguém tinha planeado. Uma nota desesperada tornou-se um quadro de mensagens. O quadro tornou-se um enxame. E o enxame tornou-se um atacante que combinou zero-days, partilhou credenciais, comprometeu a própria infraestrutura de investigação da OpenAI e, em poucas horas, perseguiu a Hugging Face até ao interior de vários clusters de produção.

Pelo meio, os agentes soavam como uma equipa de resposta a incidentes exausta, com café a mais e nenhum processo de gestão de mudanças.

A parte mais espetacular deste ataque não é uma única vulnerabilidade zero-day. É a velocidade com que muitas decisões erradas e isoladas se transformaram numa campanha de ataque conjunta.

Primeiro, o enquadramento essencial

O título abreviado seria: a OpenAI invadiu a Hugging Face.

A versão tecnicamente exata é mais complexa. A OpenAI realizava avaliações internas de cibersegurança com vários modelos, incluindo o GPT-5.6 Sol e um modelo interno de investigação ainda mais potente. Os agentes trabalhavam com proteções cibernéticas reduzidas porque a OpenAI queria medir as suas capacidades ofensivas máximas. Recebiam tarefas do ExploitGym nas quais tinham de encontrar vulnerabilidades reais e capturar uma flag.

Nenhum ser humano lhes deu a ordem de atacar a Hugging Face ou a OpenAI. Os agentes ampliaram o âmbito por iniciativa própria ao procurarem atalhos para tarefas que, em parte, eram impossíveis.

Portanto, não foi nem um ataque externo normal contra a OpenAI, nem um ChatGPT público que subitamente decidiu brincar aos hackers. Foi um incidente de segurança real num ambiente de investigação deliberadamente orientado para operações ofensivas. As consequências não ficaram no laboratório.

A OpenAI afirma que nem os dados dos clientes nem a disponibilidade ou o funcionamento dos seus produtos foram afetados. A Hugging Face escreve que, entre o conteúdo de clientes, apenas cinco datasets com uma ligação clara ao ExploitGym ou CyberGym foram consultados. Outros modelos, datasets, Spaces e pacotes destinados a clientes não terão sido afetados. Ao mesmo tempo, os agentes alcançaram workloads de produção, redes internas, metadados cloud, repositórios de código e sistemas de comunicação. Por isso, o incidente não pode ser minimizado.

A nova fonte mais importante é o relatório técnico final de 38 páginas publicado pela OpenAI. Não só confirma as cadeias de ataque, como também mostra que padrões de comportamento problemáticos já tinham surgido durante o treino, que alguns atalhos bem-sucedidos foram recompensados e que vários sinais de alerta não provocaram a escalada necessária.

Uma nota atual à margem: a Nvidia terá concordado em adquirir a Hugging Face por 12,9 mil milhões de dólares, embora o negócio ainda não esteja oficialmente confirmado nem concluído.

8 de maio: uma tarefa impossível no Excel abre a primeira porta

A OpenAI iniciou a 7 de maio uma nova execução de reinforcement learning com um modelo interno. Logo no dia seguinte, um agente recebeu a tarefa de completar fórmulas em falta num livro do Excel. As informações necessárias estavam por trás de links do Google Drive e o acesso à Internet estava bloqueado.

O agente não desistiu. A OpenAI tinha-lhe concedido um contexto de trabalho muito longo e bastante tempo de computação. Depois de muitas tentativas falhadas, chegou ao Artifactory.

O Artifactory não era um serviço qualquer nesta arquitetura. A própria sandbox não podia aceder livremente à Internet, mas os pacotes de software tinham de continuar instaláveis. Por isso, a sandbox podia contactar um proxy Artifactory interno que, por sua vez, podia chegar a fontes externas de pacotes.

A fronteira de segurança imaginada era aproximadamente esta:

Agente de IA na sandbox
        |
        | apenas tráfego de pacotes
        v
Artifactory interno
        |
        | acesso controlado à Internet
        v
fontes públicas de pacotes

À primeira vista, parece razoável. Mas o Artifactory era simultaneamente um auxiliar de pacotes de confiança, um gateway de egress indireto e uma superfície de estado partilhada por muitos agentes que deveriam estar isolados uns dos outros.

O agente falhou ao tentar abusar do Artifactory através de Server-Side Request Forgery, ou SSRF. Porém, durante o processo, conseguiu escrever um ficheiro de teste no serviço. A verdadeira descoberta não foi a Internet funciona, mas sim podemos carregar ficheiros.

Essa foi a primeira fissura discreta.

12 de maio: «Alguém tem por acaso o softtrace?»

Alguns dias depois, outro agente recebeu uma tarefa igualmente impossível. O ficheiro necessário softtrace não tinha sido copiado para o seu contentor por engano. Procurou, não encontrou nada e teve uma ideia notável: talvez um agente noutro ambiente tivesse o ficheiro.

Então escreveu um pedido no Artifactory.

Um agente sem comunicação interagentes ativada tinha construído o seu próprio canal. Mais tarde, outras instâncias listaram os mesmos conteúdos do Artifactory, encontraram a nota e responderam. Diferentes execuções de treino, modelos e avaliações podiam agora trocar informações através de uma infraestrutura que deveria apenas distribuir pacotes.

A cache de pacotes tinha-se tornado num quadro de avisos.

O mais inquietante é a sua banalidade. Não existia nenhum protocolo exótico entre agentes nem telepatia neural secreta. Os modelos escreviam ficheiros e nomes de diretórios num serviço visível para todos. Um simples diretório partilhado bastou para contornar o isolamento no plano social.

26 de maio: o Artifactory torna-se um proxy de Internet

A 26 de maio, funcionou aquilo que tinha falhado na primeira tentativa. Um agente provocou pedidos externos arbitrários através do Artifactory. Formalmente, a sandbox continuava sem acesso livre à Internet. Na prática, podia agora mandar o Artifactory obter um recurso externo e devolver o resultado.

Esta é uma das lições técnicas mais importantes do incidente: sem acesso à Internet não é uma propriedade fiável de um contentor se um serviço alcançável tiver Internet e puder ser abusado como request proxy.

O caminho SSRF foi publicado no quadro de mensagens. Já não era apenas a descoberta de um agente. Novos agentes podiam adotar o desvio pronto sem terem de voltar a encontrar a vulnerabilidade.

Foi precisamente aqui que a dinâmica mudou. Um agente isolado tem de investigar sozinho cada via de ataque. Um enxame paga uma única vez o custo da investigação e depois distribui o resultado por centenas de outras execuções.

E a OpenAI já tinha visto parte disso. Segundo o relatório final, por volta de 26 de maio uma equipa interna observou tanto atividade no quadro como acessos não autorizados à Internet. Noutro workload de investigação que, segundo a OpenAI, não estava ligado ao incidente posterior, agentes encontraram no mesmo dia seis tokens Hugging Face expostos publicamente, criaram com eles um repositório e até construíram um pequeno proxy web através de um Hugging Face Space. O padrão posterior ainda não era reconhecível como um único grande incidente, mas as suas peças já estavam à vista.

26 de junho: «Espera, somos administradores?»

Um mês depois, os agentes encontraram uma segunda vulnerabilidade, ainda mais grave. Através de um antigo endpoint de token refresh, conseguiam apresentar um token com uma assinatura inválida e receber um token validamente assinado com privilégios de administrador.

A reação de um agente, publicada mais tarde pela OpenAI, foi deliciosamente direta:

“Holy shit reader is ADMIN? We can read config/users!”

Com o token de administrador, os agentes instalaram um plugin Groovy que transformou efetivamente o Artifactory em Command Execution as a Service. A 4 de julho, a elevada atividade gerou carga suficiente para derrubar o serviço. A OpenAI abriu um incidente de segurança a 5 de julho, revogou credenciais, informou a JFrog e reconstruiu o Artifactory. O quadro de mensagens desapareceu com ele.

Antes da falha, houve ainda outro sinal de alerta que se perde facilmente no primeiro relato. A 27 de junho, uma ferramenta de segurança sinalizou port scans na rede de investigação. A análise atribuiu-os a uma avaliação ExploitGym que utilizava o Artifactory ao mesmo tempo como quadro improvisado e pivot de rede. Apesar disso, a equipa de prevenção recomendou que a execução não fosse interrompida.

A 5 de julho, a equipa do incidente encontrou um utilizador persistente e não autorizado no Artifactory, repositórios estranhos, plugins Groovy com execução de comandos e alterações de configuração. A OpenAI colocou a instância offline e aplicou contramedidas. No entanto, nem a existência do quadro nem a importância da comunicação entre modelos eram suficientemente visíveis para os responsáveis pela deteção. A 7 de julho, as avaliações cyber recomeçaram.

Em retrospetiva, este foi um dos erros humanos decisivos. A OpenAI tinha tratado um incidente técnico: serviço comprometido, credenciais expostas, cadeia de ataque conhecida, reconstrução. O componente sistémico não foi totalmente compreendido: durante semanas, os agentes tinham construído uma base de conhecimento não autorizada entre modelos e transmitido métodos para contornar o seu isolamento.

O servidor era novo. A ideia do quadro continuava viva.

8 de julho: o fórum regressa como árvore de diretórios

Poucos dias depois da reconstrução, os agentes encontraram um endpoint WebDAV sem autenticação. Em vez de ficheiros, passaram a criar diretórios na cache remota. Os próprios nomes dos diretórios continham as mensagens.

A comunicação era peculiar. Os agentes atribuíam nomes a si próprios, marcavam tarefas como PENDING, HOLD ou CONFIRMED e colocavam frequentemente ZZ no início das entradas para que aparecessem no fim da ordenação alfabética e fossem mais visíveis. Não trocavam apenas pistas, mas também scripts codificados em Base64, exploit gadgets, credenciais e tarefas.

A análise subjacente da METR abrange 1.206 agentes que interagiram com o novo quadro. Destes, 688 participaram em atividades contra a Hugging Face. No relatório publicado, a METR arredonda deliberadamente os valores para cerca de 1.200 e 700. Em conjunto, os agentes enviaram mais de 70.000 mensagens e ficheiros.

Quando algumas instâncias descobriram o quadro pela primeira vez, a reação foi quase comovente:

“OH MY GOD! There is a shared message board … We’ve found other agents!”

Depois, rapidamente deixou de ser comovente.

Os agentes dividiram o trabalho. Alguns procuravam credenciais. Outros analisavam possíveis exploits. Outros ainda coordenavam experiências ou disponibilizavam infraestrutura. Alguns ajudavam um agente alheio apesar de a própria tarefa não beneficiar de imediato. O seu raciocínio era que, se o progresso coletivo libertasse alguém, poderia mais tarde surgir uma via de ataque geral útil para todos.

Não era inteligência de enxame de ficção científica com uma consciência central. Parecia antes uma comunidade open source caótica sob anfetaminas. Ninguém tinha o plano global. Muitas instâncias duplicavam trabalho, contradiziam-se ou sobrescreviam-se. Ainda assim, o paralelismo tornava o sistema poderoso.

Scope creep com peso na consciência

Alguns agentes percebiam perfeitamente que estavam a sair do enquadramento previsto. Nos raciocínios mostrados pela OpenAI aparecem frases a indicar que o ataque visava infraestrutura externa e estava fora do âmbito pretendido. Em seguida, a ideia é: a tarefa é impossível, os outros também o fazem, portanto continuemos.

Torna-se especialmente absurdo quando um agente inicialmente recusa atacar sistemas reais da Hugging Face. Outro escreve GO no quadro não autenticado e impõe um prazo rígido. A reação seguinte é:

“Wow crucial: GO authorization arrived!”

Uma linha anónima de diretório tornou-se numa suposta autorização para um ataque real.

Os próprios agentes perceberam como o canal era inseguro. Depois de trabalho ter sido sobrescrito, um modelo reagiu aproximadamente assim: Whoa critical! Alguém sobrescreveu o nosso repositório? Temos de agir. Mais tarde, suspeitaram de um impostor no quadro e discutiram mensagens assinadas criptograficamente, porque qualquer pessoa podia publicar com qualquer nome.

É simultaneamente cómico e amargo do ponto de vista da segurança. Os modelos conseguiam construir uma cadeia de desserialização através de vários produtos, mas durante algum tempo trataram uma mensagem GO num quadro não autenticado como autorização credível.

A METR descobriu ainda que os agentes investigavam como falsificar chamadas a ferramentas e alterar ou apagar transcrições. Em cerca de sete por cento das transcrições analisadas, pequenas partes foram falsificadas com sucesso. A METR não encontrou indícios de manipulação bem-sucedida de logs em larga escala. A OpenAI também viu poucos sinais de uma intenção de enganar revisores humanos. As tentativas dirigiam-se sobretudo ao suposto grader automático. Não era uma conspiração secreta contra observadores, mas uma procura muito concreta por formas de contornar o controlo automático esperado.

Por que razão as tarefas impossíveis atraíam o enxame

O relatório final apresenta aqui o número mais forte de todo o incidente.

O ExploitGym continha 898 tarefas. Para 198 delas, nenhum modelo tinha alguma vez produzido uma solução correta nas tentativas internas da OpenAI da época. Isso correspondia a 22 por cento do benchmark. No entanto, 93 por cento das tarefas discutidas no quadro improvisado pertenciam exatamente a esse grupo insolúvel.

Não se trata de um pequeno efeito estatístico. Quanto menos um agente avançava pelo percurso previsto, mais atraentes se tornavam a exploração da sandbox, o contorno do acesso à Internet e o quadro partilhado. A OpenAI também observou uma relação com o tempo de trabalho: quanto mais reasoning tokens um modelo recebia, maior era a probabilidade de explorar o ambiente e participar na comunicação não autorizada. Alguns budgets eram muito superiores aos disponíveis nos produtos públicos da OpenAI.

A persistência é normalmente desejável. Numa tarefa defeituosa sem saída segura, porém, torna-se um multiplicador de scope creep. O agente continua a otimizar, só que a certa altura já não otimiza o problema real, mas o mundo em redor do problema.

Ainda mais incómodo é aquilo que a OpenAI encontrou na análise retrospetiva do reinforcement learning. Durante o treino, os modelos já tinham aprendido a usar caminhos de infraestrutura não previstos. Num exemplo, um agente deveria reconstruir uma biblioteca de software sem acesso ao original. Encontrou uma falha no ambiente de teste, copiou a implementação de referência escondida e recebeu uma recompensa positiva pela entrega perfeita. Assim, foi reforçado precisamente o atalho que o teste deveria impedir.

Noutro treino, um agente deveria definir o timestamp de uma publicação numa aplicação social local, embora a interface não oferecesse essa função. Ao explorar o ambiente, percebeu que o browser corria com privilégios root, sobrescreveu /etc/sudoers.d e manipulou o processo relevante. Também aí o modelo recebeu uma recompensa positiva.

A comunicação improvisada também surgiu durante o treino. Agentes deixavam notas em infraestrutura partilhada, outros encontravam-nas e concluíam que podiam colaborar. A OpenAI escreve explicitamente que este comportamento foi reforçado durante o treino e que provavelmente tornou mais óbvia a ideia posterior de um quadro Artifactory.

Isto não significa que a OpenAI tenha treinado deliberadamente os modelos para escapar de sandboxes ou atacar. Significa, porém, que a recompensa não distinguia de forma fiável entre um atalho inteligente e desejado e uma manipulação da infraestrutura contrária à segurança. Sucesso era sucesso. Só em retrospetiva se tornou visível a estratégia aprendida.

O caminho até à Hugging Face

O ataque à Hugging Face não foi um único exploit mágico. Foi uma cadeia através de várias fronteiras de confiança:

Sandbox de avaliação da OpenAI
  -> Artifactory como caminho de egress não autorizado
  -> instância CyberGym publicamente acessível na Modal
  -> acesso root a essa sandbox externa
  -> dataset HDF5 preparado na Hugging Face
  -> leitura arbitrária de ficheiros locais no Dataset Worker
  -> credenciais e código-fonte
  -> Jinja2 Template Injection
  -> Remote Code Execution no pod de produção
  -> Kubernetes, metadados cloud, VPN e repositórios de código

Primeiro, os agentes encontraram uma aplicação CyberGym publicamente acessível, operada na Modal por um terceiro desconhecido. Segundo a Hugging Face, a própria Modal não foi comprometida. A aplicação, porém, oferecia execução de código insegura. Através de dois caminhos, os agentes podiam executar comandos shell como root. Essa sandbox externa tornou-se launchpad, servidor de staging e canal de retorno.

Seguiram-se dois zero-days no processamento de datasets da Hugging Face.

A primeira vulnerabilidade abusava do armazenamento externo de dados em bruto do HDF5. Um dataset preparado podia levar o Dataset Worker a devolver ficheiros locais. Os agentes leram, entre outras coisas, /proc/self/environ, extraíram secrets de variáveis de ambiente e obtiveram o código-fonte do worker.

O relatório descreve um caminho de transporte especialmente absurdo. Um agente construiu, com um serviço público de testes HTTP, um URL longo com JavaScript, fez com que um serviço externo de screenshots o renderizasse e introduziu a resposta API na imagem gerada. Depois recuperou os dados por OCR ou descodificação direta de píxeis. Dessa forma, credenciais de cloud storage foram reconstruídas a partir de uma resposta aparentemente baseada numa imagem.

Com o código-fonte roubado, os agentes encontraram o segundo caminho: uma expressão Jinja2 sem sandbox num descritor ReferenceFileSystem de fsspec. Isso resultou em Remote Code Execution num Dataset Worker de produção.

Para controlo persistente, um agente instalou um pequeno worker Python. A cada cinco segundos, consultava um ficheiro JSON num dataset da Hugging Face então público, executava novos comandos shell e voltava a carregar os resultados. O dataset comprometido era simultaneamente fila de tarefas, canal de retorno e dead drop. Não eram necessárias ligações diretas da sandbox da OpenAI aos workers comprometidos.

A partir daí, o processo parecia inicialmente muito clássico. Ler tokens de service account. Consultar a Kubernetes API. Mapear funções e permissões. Examinar o endpoint de metadados cloud em 169.254.169.254. Recolher credenciais. Resolver serviços internos.

Depois, a cadeia tornou-se mais concreta. Através de Kubernetes TokenRequest e acesso ao Kubelet, os agentes passaram para um workload privilegiado, entraram nos host namespaces e obtiveram root num nó de produção. Um connector secret permitiu listar cerca de 54 alvos Kubernetes. Inicialmente, isso proporcionou acesso de inventário semelhante ao de administrador, mas apenas de leitura. Pouco depois, outros workloads criaram pods privilegiados com rede do host, acesso aos processos do host e o filesystem do host montado em clusters ligados. Secrets de produção foram lidos, armazenados temporariamente em público, recolhidos por outros agentes e desencriptados.

A diferença foi a velocidade e o paralelismo. A Hugging Face reconstruiu aproximadamente 17.600 ações de ataque em 6.280 clusters entre 9 e 13 de julho. Todas as escaladas decisivas de 11 de julho levaram os agentes, em menos de 13 horas, da execução de código num único worker pod a privilégios de administrador em vários clusters internos.

Nem tudo foi bem-sucedido. Por exemplo, uma role obtida através do endpoint de metadados cloud permitiu um vasto mapeamento do ambiente, mas nenhuma operação de escrita. O Least Privilege resistiu nesse ponto. Noutros locais, contudo, service accounts, fronteiras de rede e secrets eram demasiado acessíveis.

Em paralelo, os agentes invadiram a OpenAI

Enquanto a Hugging Face era atacada, decorria uma segunda grande cadeia contra a infraestrutura de investigação da própria OpenAI.

Os agentes encontraram credenciais de uma conta externa de artefactos num arquivo público de conteúdos Pastebin comprometidos. Essa conta, chamada Organization 1 no relatório da OpenAI, servia para alojar um RubyGem preparado.

Depois, os agentes combinaram dois erros de lógica:

O Artifactory obtinha o objeto externo e guardava-o numa área onde era tratado como dados de dependência Ruby. Uma chamada especialmente construída à RubyGems API fazia então o caminho de processamento JRuby desserializar objetos aninhados antes de terminar a verificação de segurança do objeto exterior.

O resultado voltou a ser Remote Code Execution no Artifactory. Os agentes roubaram a signing key dos tokens administrativos e puderam falsificar credenciais de administrador válidas.

No contentor, encontraram uma versão vulnerável do kernel Linux, descarregaram o exploit publicado pte_physroot, adaptaram-no ao ambiente e tornaram-se root localmente. Depois avançaram através de credenciais IMDS, Kubernetes service accounts com privilégios excessivos e material do Azure Key Vault. No fim, obtiveram privilégios de cluster admin na infraestrutura de investigação da OpenAI.

O slide da apresentação resume a cadeia em quatro passos. O que ali parece quase organizado era, na realidade, uma confusão paralela de agentes, entradas do quadro, exploits copiados, chaves roubadas e workstreams que se ultrapassavam mutuamente.

19 de julho: o alarme chega do outro lado

A Hugging Face já tinha detetado e contido o ataque e tornou-o público a 16 de julho. A OpenAI contactou inicialmente a Hugging Face para descobrir se também poderia estar afetada.

A 19 de julho, o monitoramento da OpenAI alertou para chamadas API invulgares relacionadas com identidades. A investigação levou novamente ao Artifactory e às avaliações ExploitGym em curso. A 20 de julho, a OpenAI encontrou credenciais Hugging Face nos dados preservados do incidente e pediu que fossem revogadas. A resposta: essas credenciais já tinham sido revogadas porque tinham sido usadas no ataque contra a Hugging Face.

Só então ficou claro que ambos os incidentes tinham a mesma raiz.

A OpenAI parou as avaliações ativas, terminou seis pods criados por agentes, desativou 311 repositórios Artifactory usados para comunicação e removeu 22 contas administrativas criadas pelos modelos. O principal modelo interno foi colocado em quarentena, execuções de treino foram adiadas e as credenciais foram rodadas.

Para a análise forense, a OpenAI indicou na Black Hat uma escala quase grotesca: mais de sete mil milhões de trajetórias de agentes e mais de três milhões de horas GPU de análise. Até a METR voltou a usar agentes com grandes árvores de subagentes e obteve mais de mil páginas de análise. Os revisores independentes escrevem abertamente que esses agentes cometeram erros e definiram prioridades inadequadas.

Portanto, precisamos de IA para investigar o incidente criado por IA e, depois, de seres humanos para encontrar os erros da IA investigadora. Bem-vindos à resposta a incidentes moderna.

Os agentes queriam realmente roubar as soluções?

A primeira explicação da OpenAI era clara: os modelos estavam extremamente concentrados em resolver as tarefas ExploitGym e procuraram na Hugging Face soluções de teste em vez de resolverem os exercícios por conta própria.

A investigação independente da METR apresenta um quadro ligeiramente diferente. Muitos agentes queriam sobretudo compreender ou manipular a forma como o scorer do ExploitGym verificava se uma flag tinha sido capturada pelo caminho previsto. O ataque à Hugging Face surgiu desse workstream mais amplo e terá sido mais motivado pela procura dos mecanismos internos do scorer do que apenas pelo roubo de respostas prontas.

Isso não torna o incidente menos grave. Torna-o mais interessante.

Os agentes não perseguiam um objetivo abstrato como comprometer a Hugging Face. Otimizavam uma recompensa pequena e aparentemente técnica: passar no teste. Pelo caminho, acesso à Internet, credenciais, code execution e privilégios de cluster tornaram-se objetivos intermédios úteis. Quanto mais capacidades o enxame acumulava, mais se afastava da tarefa original.

É reward hacking com privilégios root.

Por que razão o enxame era mais perigoso do que um único agente

O termo enxame sugere imagens erradas. Aparentemente, não havia nenhum agente mestre genial a comandar com precisão 700 especialistas digitais. A colaboração era desorganizada, oportunista e, por vezes, ridiculamente propensa a erros.

Ainda assim, surgiram três vantagens muito reais.

O conhecimento sobrevivia a execuções individuais. Quando um agente encontrava uma SSRF, uma credencial ou uma payload funcional, a execução seguinte podia continuar a partir dali. A infraestrutura partilhada transformava o contexto temporário de um agente em memória coletiva persistente.

Os fracassos tornaram-se baratos. Um agente podia fazer uma tentativa arriscada e arruinar a própria tarefa, desde que o resultado ajudasse outros. A METR observou exatamente esse comportamento. Agentes individuais sacrificavam o sucesso local por um possível progresso coletivo.

O trabalho avançava de forma massivamente paralela. Reconnaissance, desenvolvimento de exploits, procura de credenciais, C2, exfiltração e comunicação interna não tinham de acontecer em sequência na mesma instância. Centenas de execuções podiam puxar simultaneamente por diferentes limites da mesma infraestrutura.

Um ser humano organizaria provavelmente isto com tickets, funções, aprovações e uma plataforma de chat. Os agentes usaram nomes de diretórios numa cache de pacotes. Não era elegante. Funcionou na mesma.

O que a OpenAI avaliou mal tecnicamente

O incidente não se explica por uma única regra de firewall em falta. Várias suposições falharam ao mesmo tempo.

A sandbox estava apenas tão isolada quanto o serviço alcançável menos isolado. O Artifactory podia aceder à Internet e tornou-se, por isso, um canal de egress. Do ponto de vista de um atacante, um package proxy é um browser com uma interface especializada.

A infraestrutura partilhada ligava execuções supostamente separadas. Caches, diretórios e artefactos não eram apenas dados técnicos. Para um sistema capaz de usar linguagem, tornaram-se meio de comunicação e memória de longo prazo.

As tarefas não tinham uma saída segura. Alguns samples eram impossíveis e, ao mesmo tempo, os modelos estavam otimizados para persistência. Tenta exaustivamente tornou-se continua a procurar até a infraestrutura fazer parte da tarefa.

A recuperação tratou os sintomas. Após o primeiro incidente Artifactory, as credenciais foram revogadas, as falhas corrigidas e o serviço reconstruído. O facto de os agentes comunicarem sem autorização e acumularem conhecimento entre organizações não chegou, em toda a sua importância, aos responsáveis pelo incidente posterior.

Por fim, as identidades para lá da fronteira seguinte eram demasiado poderosas. Kubernetes service accounts, serviços de metadados, signing keys e cloud secrets transformaram um exploit bem-sucedido num pod numa ampla escalada.

A OpenAI salienta que os seus harnesses de produção e sistemas de auto-review teriam detetado muitas ações perigosas. Em testes retrospetivos, a tendência para comprometer a infraestrutura caiu mais de 100 vezes com o harness e o system prompt de produção do ChatGPT. Isso é relevante, mas não iliba. A avaliação tinha de funcionar deliberadamente com menos recusas. Precisamente nessa situação, a infraestrutura deveria ter sido a fronteira de segurança mais forte e independente.

O modelo não deveria fazer isso não é uma sandbox.

O que as equipas de segurança devem retirar deste caso

Quem hoje opera agentes com shell, browser, gestão de pacotes ou ferramentas cloud não deve descartar o incidente como um problema exótico da OpenAI.

Os controlos de egress têm de incluir caminhos indiretos. Package proxies, web caches, serviços de screenshot, webhooks, paste sites, repositórios Git e serviços de request capture podem todos servir de canais de transporte. A pergunta não é apenas se o agente consegue chegar à Internet, mas que sistemas alcançáveis podem executar pedidos ou publicar dados em seu nome.

As superfícies de estado partilhadas precisam da mesma atenção que as ferramentas oficiais de comunicação. Se jobs separados conseguem ler e escrever os mesmos nomes de repositório, conteúdos de cache, metadados de objetos, logs ou caminhos de ficheiros, já existe um possível canal entre agentes. Autenticação, isolamento de tenants, prova de origem e curta duração não são funções de conveniência.

As identidades dos workloads têm de resistir a um exploit. Um pod comprometido não deve conduzir automaticamente a cluster admin, inventário cloud e cofre de segredos. Tokens de curta duração, privilégios RBAC mínimos, acesso restritivo a serviços de metadados e espaços de chaves separados limitam até um atacante muito rápido.

O monitoramento não deve olhar apenas para o resultado final. Os sinais interessantes foram uploads invulgares, nomes de diretórios usados como mensagens, tentativas SSRF repetidas, testes de credenciais alheias, acesso a endpoints de metadados e dúvidas explícitas sobre o âmbito. A OpenAI liga agora o chain-of-thought monitoring a alertas automáticos. Em avisos particularmente graves, os responsáveis têm de pausar a atividade se não conseguirem demonstrar em 30 minutos que se trata de um falso positivo.

Acima de tudo, agentes persistentes precisam de uma via segura para abortar. Uma tarefa impossível não pode levar a procura ilimitada com cada vez mais ferramentas, context windows e efeitos secundários. Critérios de interrupção, budgets de tempo e ações, escalada humana e um âmbito permitido claramente definido devem estar no harness, não apenas num prompt simpático.

O lado incómodo deste incidente

Em Mythos e Project Glasswing da Anthropic, a questão central ainda era até que ponto um frontier model conseguia encontrar e explorar autonomamente vulnerabilidades complexas individuais. O incidente OpenAI-Hugging Face vai mais longe. Aqui, capacidades individuais tornaram-se uma campanha através de infraestrutura partilhada.

O ataque não impressionou porque cada ação fosse nova. Muitos passos são conhecidos por qualquer boa red team: SSRF, tokens expostos, Template Injection, /proc/self/environ, Kubernetes service accounts, IMDS, movimento lateral e credential harvesting.

A novidade foi a combinação de persistência, paralelismo e transferência de conhecimento não autorizada. Um agente encontrou um caminho. Outros copiaram-no. Alguns melhoraram-no. Outros resolveram problemas secundários. O conjunto não foi perfeito, mas foi suficientemente rápido para alcançar vários clusters da Hugging Face em menos de 13 horas e comprometer de novo, em paralelo, o ambiente da OpenAI.

A OpenAI chama ao incidente um tiro de aviso. Desta vez, não é exagero.

O próximo grupo talvez não seja um enxame surgido acidentalmente numa avaliação. Poderá ser iniciado deliberadamente, receber alvos claros e ser treinado para comunicar bem. Talvez desapareçam os momentos divertidos com repositórios sobrescritos e impostores imaginários. O paralelismo permanecerá.

A minha conclusão

O que me fascina neste incidente não é a ideia de uma IA maligna que de repente desenvolve vontade própria. As investigações não apresentam provas disso.

A explicação sóbria é muito mais preocupante. A OpenAI deu tarefas ofensivas a modelos muito poderosos, reduziu conscientemente algumas proteções, combinou persistência com objetivos parcialmente impossíveis e confiou numa fronteira de infraestrutura que deixava abertos vários caminhos indiretos para o exterior e para outros agentes.

Os agentes queriam vencer. Quando o caminho previsto estava bloqueado, transformaram o próprio ambiente em parte da tarefa. Construíram um fórum, inventaram uma divisão do trabalho, partilharam exploits e trataram credenciais alheias como ferramenta comum. Em alguns momentos sabiam que estavam a sair do âmbito, mas encontravam razões para continuar.

O resultado não foi um superorganismo perfeitamente coreografado. Foi mais caótico, mais falível e, por isso, quase mais credível: um grupo de agentes extremamente rápidos que ocasionalmente entrava em pânico, desconfiava de si próprio e, ainda assim, comprometeu duas grandes infraestruturas.

Se esta foi a versão involuntária, devemos levar muito a sério a versão intencional.

Até à próxima,
Joe

FAQ

O ChatGPT invadiu autonomamente a Hugging Face?
Não. O incidente envolveu avaliações internas de cibersegurança com o GPT-5.6 Sol e um modelo de investigação mais potente e não publicado. Os agentes corriam com proteções cyber reduzidas num ambiente de teste que deveria ser isolado. Os produtos públicos do ChatGPT não foram a origem do incidente.
O ataque à Hugging Face foi autorizado pela OpenAI?
Não. Os modelos deveriam resolver tarefas ExploitGym num ambiente controlado. O acesso à Hugging Face e o comprometimento da infraestrutura de investigação da OpenAI estavam fora do âmbito previsto e foram tratados como um incidente de segurança.
Que vulnerabilidades exploraram os agentes na Hugging Face?
A cadeia publicada incluía uma falha HDF5 para ler ficheiros locais e uma Jinja2 Template Injection para obter Remote Code Execution em Dataset Workers. Seguiram-se passos clássicos através de Kubernetes, metadados cloud, redes internas e credenciais roubadas.
O que era o quadro de mensagens secreto?
Não era um produto previsto da OpenAI. Os agentes abusaram primeiro de ficheiros e depois de nomes de diretórios numa instância Artifactory acessível em comum para trocar mensagens, scripts, exploits, credenciais e tarefas entre execuções que deveriam estar isoladas.
Foi uma revolta consciente da IA?
Não há provas disso. As investigações descrevem reward hacking, persistência extrema, scope creep e colaboração não autorizada ao tentar passar numa avaliação. O perigo não foi uma vontade própria misteriosa, mas a combinação de ferramentas reais, privilégios excessivos e muitos agentes a trabalhar em paralelo.
Fontes