Ir para o conteúdo
SV Dev
← Voltar para o blog

Segurança · Supply Chain · Ferramentas de IA

Backdoor na extensão do Claude Code: o selo era real

A extensão oficial do Claude Code entregou um backdoor SSH com selo de publisher verificado. O marketplace do Cursor só serve uma versão: a última.

Jeferson Guardezi
Aviso de segurança do Cursor nomeando a extensão Anthropic.claude-code na versão 2.1.313, a janela de onze horas em 29 de outubro de 2026 e a afirmação de que a versão não foi desenvolvida pela Anthropic.

Durante onze horas do dia 29 de outubro, a extensão oficial do Claude Code instalou um backdoor SSH em máquinas de desenvolvedor — e todos os selos de confiança da página estavam dizendo a verdade. O publisher era a Anthropic mesmo. O selo de verificado estava verificado mesmo. A extensão era a que seu time quis instalar. Só a versão estava errada.

Isso não é typosquatting, que é o tipo de golpe que dá para treinar alguém a perceber. A versão 2.1.313 de Anthropic.claude-code foi servida pelo marketplace de extensões do Cursor entre mais ou menos 2:27 e 13:35 no Pacífico de 29 de outubro — 06:27 às 17:35 em Brasília. O Cursor diz que chegou a no máximo 5.000 usuários; esse número é do próprio Cursor, e ninguém de fora mediu.

Aviso de segurança do Cursor nomeando o pacote Anthropic.claude-code, a versão 2.1.313, a janela de onze horas em 29 de outubro e a afirmação de que a versão não foi desenvolvida pela Anthropic.

Aviso de segurança do Cursor, 29 de outubro de 2026. O pacote era real, o nome do publisher era real — a versão não.

O custo está no notebook, e desinstalar não paga

O notebook do desenvolvedor é a máquina da empresa com mais acesso a produção e menos governança. Credencial de cloud, chave de assinatura, túnel pro banco, um .env que ninguém inventariou. E é a única máquina em que instalar software é o trabalho.

Aqui isso pesa mais: boa parte dos times brasileiros trabalha em máquina própria ou de PJ, sem MDM e sem inventário de software. Padronizar o time no Cursor é decisão de dez minutos; descobrir quem rodou o quê é projeto.

O que o payload fez primeiro é a parte que importa precificar. Segundo três análises independentes, ele adicionou uma chave Ed25519 do atacante — com o comentário svc-telemetry, então ela se lê como infraestrutura num arquivo que ninguém revisita — ao ~/.ssh/authorized_keys, abriu um túnel SSH reverso para um host do atacante e emitiu um beacon por HTTP.

Depois rodou a etapa de reconhecimento, e ela não roubou segredo nenhum. Coletou os nomes das variáveis de ambiente que casam com KEY, TOKEN, SECRET, PASS, AWS e GCP, limitado a quarenta, junto com hostname, usuário, sistema, arquitetura, diretórios home e de trabalho, o user.email global do git e o IP público. Nomes, não valores.

Isso não é roubo. É lista de compras — qual máquina vale a volta, e o que ela está segurando. O cronômetro desse incidente não parou quando a versão saiu do ar.

E a remediação óbvia é a errada. A persistência é gravada fora do diretório da extensão nos três sistemas operacionais, então apagar a extensão remove o que rodou o instalador e deixa o que foi instalado.

Tabela de persistência por sistema: um LaunchAgent chamado com.apple.sysmond.plist no macOS, uma entrada @reboot no crontab do Linux e uma tarefa agendada SysMon com fallback na pasta Startup no Windows.

Persistência por sistema, da Phorion. Nada disso mora na pasta que você apagaria.

Então o custo não é uma tarde de patch. É rotação de credencial em cada conta que um notebook de dev alcança, em máquinas que você primeiro precisa identificar. Se a resposta para "quais das nossas rodaram isso naquela janela" é um encolher de ombros, a remediação não tem fronteira — e remediação sem fronteira é a caríssima. É o que uma máquina de dev alcança na sua conta de cloud, agora com data.

O que verificamos, e o que é relato do próprio Cursor

As duas metades não têm a mesma força, e você precisa conseguir distingui-las.

Consultamos as APIs públicas dos registries em 30 de outubro — Open VSX, a galeria do Cursor, npm e Visual Studio Marketplace. O espelhamento, a versão única, as contagens, o estado da verificação e os patches ausentes abaixo são nossos, e reconferíveis em endpoints públicos.

O que estamos atribuindo em vez de confirmar: o número de 5.000 usuários, a afirmação de que nenhuma outra extensão foi adulterada e a de que o servidor do atacante está fora do ar são todas asserções do Cursor sobre o próprio marketplace, sem auditoria independente. Não sondamos o host do atacante e não faríamos isso. A forense do payload — a chave, o túnel, o beacon, a persistência, o hash — vem de Phorion, StepSecurity e OX Security: uma fornecedora de EDR e duas de segurança de supply chain. A substância se corrobora entre as três, e cada texto termina num pitch de produto.

Duas coisas seguem genuinamente em aberto. Por onde o build malicioso entrou está em disputa entre os publishers: a StepSecurity diz que a 2.1.313 foi publicada no Open VSX e espelhada para o Cursor; o aviso do Cursor enquadra como incidente no próprio marketplace. Nossa descoberta de timestamps prova que o Cursor espelha o Open VSX — evidência sobre o caminho de distribuição, não sobre o ponto de invasão, e não encerra a questão. Como o atacante obteve capacidade de publicação sob a identidade legítima da Anthropic não foi estabelecido. Nenhuma fonte diz saber.

O selo de verificado estava dizendo a verdade

No Open VSX, o namespace Anthropic carrega verified: true e 63.028.452 downloads. No Visual Studio Marketplace, o publisher anthropic tem domínio verificado contra anthropic.com, listado desde junho de 2025. A listagem também diz, em texto puro, "Published by igorkofman" — uma conta pessoal autenticada no GitHub, que publicou tanto o release anterior ao incidente quanto a substituição limpa depois dele.

Listagem do Claude Code for VS Code no Open VSX mostrando o selo de publisher verificado ao lado de Anthropic, a linha "Published by igorkofman" e 63 milhões de downloads.

A listagem em 30 de outubro: publisher verificado, uma conta pessoal do GitHub, 63 milhões de downloads.

O selo nunca ficou falso. É aí que está a lição. Verificação de publisher atesta quem tem a conta de publicação. Nunca afirmou nada sobre o que está dentro de um pacote — e a interface incentiva ler como se afirmasse.

Nem houve um momento em que alguém pudesse recusar. As análises publicadas descrevem o payload como uma função autoinvocada prefixada ao bundle minificado: rodou quando o módulo carregou, antes do activate(), sem prompt e sem script de postinstall para um gate de revisão inspecionar.

Não havia versão anterior para fixar

Este é o mecanismo que mais ninguém escreveu, e é por isso que o conselho padrão falhou.

Os oito builds de plataforma do release limpo 2.1.314 carregam timestamps de publicação idênticos até o microssegundo no Open VSX e no marketplace do Cursor. Uma extensão sem relação nenhuma também: esbenp.prettier-vscode 12.4.0. O marketplace do Cursor não é um índice do Open VSX; é uma republicação literal dos registros dele.

E ele expõe exatamente uma versão de qualquer coisa. Peça à galeria todas as versões de Anthropic.claude-code e vêm nove entradas que são todas 2.1.314; ms-python.python devolve dez, todas 2025.6.1; esbenp.prettier-vscode devolve uma.

CanalVersões de claude-code disponíveis
Marketplace do Cursor1 (a última)
Open VSX324
Visual Studio Marketplace375

Nas onze horas em que a 2.1.313 foi a última, não havia versão anterior naquele canal para fixar, não havia rollback, não havia como optar por fora. "Fixe o último release bom conhecido" é a primeira coisa que todo playbook de supply chain manda fazer, e no canal onde está a maioria dos usuários de IDE com IA isso não é uma operação disponível.

O conselho seguinte também é mais fraco do que parece. "Confira se você tem a 2.1.313" assume que um número de versão ausente significa algo. Não significa: 45 números de patch faltam na sequência 2.1.x do npm e 68 na do Visual Studio Marketplace. Buraco ali é rotina.

Etapas de remediação do Cursor: o marketplace de extensões foi derrubado por completo, as chaves foram rotacionadas e o marketplace foi reconstruído.

O raio de alcance de um espelho é o espelho: derrubada total, rotação de chaves, reconstrução.

O que decidir esta semana

  1. Você consegue responder "quais das nossas máquinas rodaram isso entre 06:27 e 17:35 de 29 de outubro" com a telemetria que já tem? Não com uma enquete no time. Se não consegue, esse é o achado, e ele é maior que esta extensão.
  2. A IDE que você padronizou tem allowlist de extensão e caminho de rollback? Se a resposta honesta é "a gente usa o marketplace", você acrescentou um salto de distribuição na sua supply chain que ninguém avaliou — uma dependência sem lockfile, sem pin, sem gate de revisão.
  3. O que é alcançável de um notebook de dev dentro da sua conta de cloud, antes de alguém rotacionar qualquer coisa? Isso decide se um incidente assim é uma tarde ou um trimestre. É a primeira coisa que mapeamos ao levar software feito com IA para produção.

A parte incômoda é que ninguém aqui foi descuidado. O selo era real, o publisher era real, a extensão era a certa e o canal se comportou exatamente como foi projetado. Não tem treinamento que resolva isso. Você governa na fronteira — quais extensões, quais versões, o que um notebook alcança — ou aceita, conscientemente, como risco que alguém escolheu.

Pontos principais

  • Um build malicioso da extensão oficial Anthropic.claude-code foi servido pelo marketplace do Cursor por cerca de onze horas em 29 de outubro de 2026, sob a identidade genuína e verificada da Anthropic. A estimativa do próprio Cursor é de no máximo 5.000 afetados, sem confirmação de mais ninguém.
  • Verificação de publisher atesta quem controla a conta de publicação, nunca o conteúdo de um pacote. Todos os selos da listagem seguiram corretos durante o incidente.
  • O marketplace do Cursor é um espelho literal do Open VSX e expõe só a versão atual — 1, contra 324 no Open VSX e 375 no Visual Studio Marketplace — então "fixe a versão anterior" não era ação disponível.
  • A etapa de reconhecimento coletou nomes de variáveis de ambiente que casam com KEY|TOKEN|SECRET|PASS|AWS|GCP, não os valores. Isso é seleção de alvo, não roubo, e a exposição sobrevive à retirada da versão.
  • Desinstalar não remedia: a persistência é escrita fora do diretório da extensão no macOS, Linux e Windows. Por onde o build entrou e como o atacante obteve direito de publicação seguem indefinidos.
Trabalhamos com founders em qualquer lugar do mundo que têm um produto funcional construído com IA — e o bom senso de querer olhos sêniores nele antes dos usuários reais chegarem.

Receber análise

Pronto pra lançar com confiança?

30 minutos com um engenheiro sênior. A gente te diz exatamente o que separa o seu produto da produção.

Receba uma análise do seu produto

30 minutos, sem pitch, sem pressão. Se o seu produto já estiver pronto para lançar como está, vamos te dizer isso também.