Un attacco alla catena di distribuzione del software ha colpito numerosi repository pubblici introducendo una tecnica particolarmente insidiosa: codice malevolo nascosto in caratteri Unicode invisibili. Il meccanismo sfrutta una caratteristica poco utilizzata dello standard Unicode per mascherare istruzioni dannose che risultano indistinguibili da semplici spazi nei normali editor di codice. Il risultato è un attacco che aggira i controlli manuali di revisione e si inserisce con facilità nei progetti open source ospitati su piattaforme come GitHub.
L’episodio (segnalato da Aikido Security) si inserisce in una fase storica in cui la sicurezza della catena software è diventata uno dei punti più critici per l’industria. L’infrastruttura moderna del software dipende da milioni di librerie open source e pacchetti distribuiti tramite registri pubblici.
Un singolo componente compromesso può propagare codice malevolo a centinaia o migliaia di progetti derivati. Analisi recenti mostrano come gli attacchi alla distribuzione software abbiano registrato una crescita significativa negli ultimi anni, con campagne capaci di colpire centinaia di repository, sottraendo credenziali e segreti da ambienti di sviluppo e da processi di integrazione continua (CI).
La tecnica del codice invisibile basata su Unicode
Il punto centrale dell’attacco riguarda l’utilizzo della Unicode Private Use Area, un insieme di intervalli del sistema di codifica Unicode progettati per usi personalizzati. Alcuni di questi caratteri possono essere interpretati dai sistemi come sequenze prive di rappresentazione visiva. Quando inseriti nel codice sorgente, appaiono come spazi vuoti negli editor, nei terminali e nei diff generati dai sistemi di versionamento.
Gli aggressori hanno sfruttato in particolare caratteri appartenenti a intervalli come 0xFE00-0xFE0F e 0xE0100-0xE01EF. Sono sequenze interpretate da molti ambienti come modificatori o variazioni tipografiche e spesso non producono alcun simbolo visibile. Inserendo tali caratteri all’interno di funzioni o stringhe, è tuttavia possibile alterare il comportamento del codice senza che la modifica risulti evidente durante una revisione manuale.
Il risultato è una forma di offuscamento che non richiede tecniche crittografiche o strumenti sofisticati. L’istruzione malevola resta perfettamente valida per il compilatore o l’interprete ma appare inesistente all’occhio umano. In contesti come le pull request di GitHub o i diff di commit, le modifiche risultano spesso invisibili.
Attivazione del payload malevolo nei repository compromessi
Le analisi condotte dai ricercatori di sicurezza indicano che il codice nascosto contiene routine incaricate di decodificare ed eseguire istruzioni aggiuntive. In diversi casi il payload utilizza meccanismi dinamici come eval() o funzioni equivalenti per trasformare sequenze apparentemente innocue in codice eseguibile.
Una volta attivato, il componente malevolo recupera ulteriori script da infrastrutture esterne. Alcune campagne hanno utilizzato reti decentralizzate come la blockchain Solana per ospitare i payload secondari. Una scelta che rende più complesso interrompere l’operazione, poiché i dati registrati su blockchain non possono essere modificati o rimossi facilmente.
Il codice scaricato nelle fasi successive può eseguire numerose operazioni: raccolta di token di autenticazione, esfiltrazione di chiavi API, accesso ai segreti memorizzati negli ambienti CI/CD e distribuzione di componenti per accesso remoto.
In alcune analisi sono stati osservati moduli capaci di installare proxy SOCKS o server VNC nascosti per consentire il controllo remoto dei sistemi compromessi.
Diffusione dell’attacco e repository coinvolti
Le indagini indicano che almeno 150 repository pubblici GitHub sono stati compromessi in pochi giorni tramite commit apparentemente innocui.
Gli aggressori hanno introdotto modifiche minime, spesso camuffate come aggiornamenti di versione o refactoring minori. Il codice malevolo risultava incorporato nelle modifiche sotto forma di sequenze Unicode invisibili.
Il fenomeno non si limita ai repository GitHub. Alcuni pacchetti malevoli risultano pubblicati anche nei registri npm e nel marketplace delle estensioni per editor di sviluppo come Visual Studio Code. La presenza simultanea su più piattaforme suggerisce una strategia mirata alla diffusione capillare del payload all’interno degli ambienti di sviluppo.
Secondo gli analisti, la scala delle modifiche suggerisce l’utilizzo di strumenti automatizzati. Alcuni ricercatori ipotizzano che modelli linguistici avanzati possano aver assistito nella generazione di commit credibili e nella distribuzione coordinata del codice modificato.
Una singola modifica quasi impercettibile può trasformarsi in un vettore di compromissione su larga scala. In un contesto in cui milioni di progetti condividono componenti comuni, la capacità di individuare anomalie nei repository pubblici diventa sempre più cruciale per mantenere l’integrità del software distribuito.
In un altro articolo abbiamo visto come l’uso dei caratteri Unicode possa rendere un nome di dominio malevolo indistinguibile da uno legittimo.