Il 29 ottobre, per circa 11 ore, il marketplace di estensioni di Cursor ha distribuito una versione manomessa dell’estensione di Claude Code, l’assistente di programmazione di Anthropic. Il codice aggiunto installava una backdoor SSH persistente, cioè un accesso remoto nascosto, sui computer di chi la scaricava. Secondo Cursor, gli utenti esposti sono circa 5.000.

Le versioni compromesse sono la 2.1.312 e la 2.1.313 per macOS e Windows, rimaste disponibili tra le 10:27 e le 21:35 ora italiana. Cursor le ha rimosse, ha spento per precauzione l’intero marketplace, ha ruotato le proprie chiavi crittografiche e chiede ora agli utenti di passare alla versione 2.1.314. L’aggiornamento però non è sufficiente: il codice malevolo lascia sul sistema script persistenti che continuano a funzionare anche dopo la disinstallazione dell’estensione.

Chi ha pubblicato la versione malevola

Su questo punto le versioni divergono, o meglio, una delle due manca. Felix Rieseberg, membro dello staff tecnico di Anthropic, ha scritto su X che l’incidente non deriva da una compromissione dei sistemi dell’azienda né dei portatili dei dipendenti. Secondo Anthropic, un attore malevolo ha sfruttato un accesso al marketplace di Cursor per pubblicare una copia alterata dell’estensione, che Anthropic non ha né sviluppato né pubblicato. Le versioni distribuite attraverso i canali ufficiali non sono coinvolte.

Cursor conferma che il pacchetto non è stato sviluppato da Anthropic e dichiara di aver verificato che nessun’altra estensione del suo catalogo sia stata alterata. Non ha però spiegato come l’attaccante sia riuscito a pubblicare il pacchetto con il nome dell’editore legittimo. Le verifiche dei ricercatori di OpenSourceMalware indicano che l’estensione sul Visual Studio Marketplace di Microsoft, quella su Open VSX e il pacchetto npm di Claude Code per il terminale non contengono codice malevolo.

Cosa fa il codice malevolo

La compromissione è stata individuata da Phorion, azienda britannica che sviluppa sistemi EDR (Endpoint Detection and Response) per macOS. L’attaccante ha inserito un blocco JavaScript all’inizio del file principale dell’estensione, lasciando intatto il resto del codice. Il blocco si attiva non appena l’editor carica l’estensione: l’utente non deve nemmeno aprire Claude Code.

La sequenza è in quattro passaggi:

  • aggiunge una chiave pubblica dell’attaccante, etichettata svc-telemetry, all’elenco delle chiavi autorizzate ad accedere via SSH al computer;
  • tenta di attivare il servizio SSH locale e apre un tunnel SSH inverso verso un server esterno. In pratica è il computer della vittima a stabilire una connessione in uscita, che l’attaccante può poi percorrere al contrario per raggiungerlo, aggirando i firewall che bloccano le connessioni in ingresso;
  • rende il tunnel persistente con un LaunchAgent camuffato da componente Apple (com.apple.sysmond) su macOS, un’attività pianificata chiamata SysMon o uno script di avvio su Windows, una voce di cron su Linux. Il collegamento viene ritentato circa ogni 60 secondi;
  • invia all’attaccante un rapporto sulla macchina: nome host, utente, sistema operativo, cartelle di lavoro, indirizzo email configurato in Git, IP pubblico e i nomi – non i valori – di un massimo di 40 variabili d’ambiente che contengono parole come KEY, TOKEN, SECRET, PASS, AWS o GCP.

Quest’ultimo dettaglio non va sottovalutato. Il codice non sottrae direttamente le credenziali, ma fornisce all’operatore un inventario di quali macchine custodiscono chiavi cloud e token di accesso, utile per decidere dove concentrare un’intrusione successiva.

Un attacco riuscito a metà, ma da bonificare comunque

Il codice contiene alcuni errori che ne limitano l’efficacia. Su macOS lo script verifica se l’accesso remoto è disattivato senza avere i privilegi per leggerlo: il sistema risponde con un messaggio d’errore, lo script lo interpreta come «già attivo» e salta il passaggio di attivazione. Su Windows il comando di configurazione passa per una shell Unix che non esiste. In generale, l’attivazione del servizio SSH richiede diritti di amministratore che l’estensione, sulla maggior parte delle macchine, non ha. Su Linux, secondo Phorion, un errore nella gestione di cron può cancellare le attività pianificate già presenti.

Secondo Cursor, quindi, sulla maggior parte dei computer macOS e Windows l’attaccante non avrebbe potuto collegarsi attraverso il tunnel. Il server di comando, inoltre, è stato spento con la collaborazione del fornitore cloud che lo ospitava. Il quadro però non è rassicurante: la chiave dell’attaccante è stata comunque aggiunta, la persistenza installata e i dati della macchina inviati. Su un Mac dove l’accesso remoto era già attivo, o viene attivato in seguito, la porta resta aperta.

Cursor indica una procedura in cinque passi per chi ha installato o aggiornato l’estensione nella finestra incriminata:

  1. cercare la chiave svc-telemetry nei file delle chiavi SSH autorizzate, con i comandi pubblicati nell’avviso;
  2. incrociare la telemetria di rete, degli endpoint e delle installazioni con gli indicatori di compromissione pubblicati;
  3. isolare le macchine che mostrano segni di esecuzione del codice;
  4. rimuovere chiave, meccanismi di persistenza e processi del tunnel, con gli script forniti per macOS e Windows, valutando la reinstallazione del sistema;
  5. ruotare, da un sistema fidato, le credenziali e le sessioni accessibili dalle macchine colpite.

Non sono disponibili dati sul numero di macchine in cui il tunnel è stato effettivamente stabilito, né su eventuali accessi dell’attaccante: la cifra di 5.000 utenti indica l’esposizione potenziale, non infezioni confermate.

Il punto debole sono i marketplace dei fork di VS Code

L’episodio è un classico attacco alla catena di fornitura del software (supply chain attack): invece di colpire le vittime una a una, l’attaccante compromette un canale di distribuzione di cui si fidano. In questo caso il canale è particolare. Cursor, come altri editor derivati dal codice aperto di Visual Studio Code, non può usare il marketplace ufficiale di Microsoft, riservato ai prodotti della casa. Questi editor si appoggiano quindi al registro aperto Open VSX o a marketplace propri, che ridistribuiscono estensioni sviluppate da terzi.

Per lo sviluppatore il risultato è un’estensione che porta il nome Anthropic, ma la cui integrità dipende dalla sicurezza di chi la ridistribuisce. E un’estensione di un IDE (ambiente di sviluppo integrato) gira con i permessi dell’utente: ha accesso immediato al codice sorgente, alle chiavi SSH, alle credenziali cloud e agli strumenti di sviluppo.

Per chi gestisce postazioni di sviluppo le indicazioni pratiche sono: fare un inventario delle estensioni installate e dei marketplace da cui provengono, elenchi di estensioni autorizzate, un controllo sugli aggiornamenti automatici. Phorion suggerisce inoltre di monitorare i processi dell’editor che modificano i file di autenticazione SSH, un comportamento che un’estensione legittima non ha motivo di avere. Resta aperta la domanda principale: finché Cursor non spiegherà come l’attaccante abbia ottenuto l’accesso al marketplace, non è possibile valutare se la falla sia stata davvero chiusa.