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.

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, 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.

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.

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.
| Canal | Versões de claude-code disponíveis |
|---|---|
| Marketplace do Cursor | 1 (a última) |
| Open VSX | 324 |
| Visual Studio Marketplace | 375 |
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.

O raio de alcance de um espelho é o espelho: derrubada total, rotação de chaves, reconstrução.
O que decidir esta semana
- 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.
- 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.
- 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-codefoi 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.