Questa settimana un finto cliente mi ha inviato un repository GitHub malevolo nella mia casella di posta e, semplicemente eseguendo lo script di avvio, ha cancellato due giorni di lavoro ed esposto ogni password salvata nel mio browser.

Il «cliente» aveva pubblicato un'offerta per un ruolo di senior engineer con un'ottima retribuzione, ha risposto rapidamente ai messaggi e ha inviato un repository dall'aspetto professionale. La richiesta era semplice: clonare, eseguire npm run dev e inviare uno screenshot per dimostrare che la demo funzionasse — niente contratto, niente controllo dei precedenti. Nel momento in cui il server di sviluppo è stato avviato, del codice nascosto in un file di configurazione ha contattato un server di command-and-control (C2), ha scaricato un payload di secondo stadio e ha iniziato a sottrarre le credenziali dalla macchina locale.

Come si è sviluppato l'attacco

Il payload malevolo si trovava in postcss.config.js, un file che la maggior parte degli sviluppatori consulta solo superficialmente perché solitamente contiene solo poche semplici regole di elaborazione CSS. In questo caso, l'attaccante ha aggiunto una riga di JavaScript offuscato molto a destra di un'istruzione legittima, riempiendola di spazi per farla passare inosservata. Quando il comando npm run dev ha eseguito la pipeline di PostCSS, la riga nascosta è stata eseguita senza essere notata.

Il malware ha eseguito tre passaggi in rapida successione:

  • Contatto C2 – ha aperto una connessione di rete verso un server controllato dall'attaccante e ha segnalato l'host compromesso.
  • Download di secondo stadio – ha scaricato codice aggiuntivo che conteneva la vera logica di esfiltrazione dei dati.
  • Furto di credenziali del browser – su macOS ha interrogato la chiave Chrome Safe Storage memorizzata nel keychain di sistema. Se l'utente approvava il prompt del keychain, l'attaccante raccoglieva ogni password salvata in Chrome.

Oltre al furto immediato, il payload si è inserito in diversi strumenti comuni per sviluppatori — VS Code, npm, Discord — in modo che ogni successivo avvio di tali applicazioni riattivasse il codice malevolo. Un semplice riavvio non ha eliminato l'infezione; il successivo npm install o l'apertura dell'editor hanno riattivato la backdoor.

Segnali di allarme che spesso passano inosservati

  • Richieste di eseguire codice prima della firma di un contratto. I processi di assunzione legittimi prevedono solitamente un accordo formale prima che venga condiviso qualsiasi lavoro proprietario.
  • File compressi che si spacciano per «brief di progetto». Gli archivi Zip o RAR possono nascondere script eseguibili o binari malevoli.
  • Richieste di indirizzi email personali per «aggirare i filtri della piattaforma». Questo espediente serve a spostare la conversazione fuori dalla piattaforma protetta, dove gli abusi possono essere segnalati.
  • Descrizioni del lavoro che chiedono al candidato di finanziare un wallet crypto o acquistare token di test. Tali richieste sono atipiche per un vero lavoro di sviluppo.

Passaggi pratici per rimanere al sicuro

  1. Non eseguire mai il codice di uno sconosciuto senza ispezionarlo. Apri il repository in modalità sola lettura (ad esempio, tramite la visualizzazione del file raw su GitHub) ed esamina ogni script, specialmente i file di configurazione e le voci scripts in package.json.
  2. Tratta tutti gli allegati come testo semplice. Se viene inviato un file zip, estrailo in un ambiente sandbox ed esamina il contenuto prima di aprire qualsiasi cosa.
  3. Usa un password manager dedicato invece della memorizzazione del browser. Anche se il keychain del browser viene compromesso, il vault del gestore rimane isolato.
  4. Esegui il codice non attendibile in una macchina virtuale o in un container isolato senza accesso alla rete. Questo impedisce all'attaccante di raggiungere un server C2.
  5. Attiva l'autenticazione a due fattori (2FA) su tutti gli account. Se una password viene rubata, il secondo fattore blocca gli accessi non autorizzati.
  6. Mantieni gli strumenti di sviluppo aggiornati e abilita i controlli di integrità automatici dove disponibili. Alcuni editor ora avvisano quando i file core vengono modificati inaspettatamente.

Se sospetti di aver eseguito codice malevolo, dai per scontato che il sistema sia compromesso. Fai il backup dei dati essenziali, formatta l'unità e reinstalla il sistema operativo. Un semplice riavvio non eradicherà un meccanismo di persistenza che riscrive i file nelle applicazioni comuni.

In sintesi: una singola riga di JavaScript nascosto può trasformare una demo di routine in un'operazione di furto di credenziali su larga scala. Considera ogni repository come non attendibile finché non lo hai verificato, e rendi l'isolamento una parte predefinita del tuo flusso di lavoro. Il costo di un momento di fretta supera di gran lunga lo sforzo impiegato per controllare due volte un file.