Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

GitHub Copilot: rischi di sicurezza nel 40% dei casi

Secondo uno studio appena pubblicato su arXiv, l'uso di GitHub Copilot porterebbe spesso alla generazione di codice non sicuro e vulnerabile.
GitHub Copilot: rischi di sicurezza nel 40% dei casi
Secondo uno studio appena pubblicato su arXiv, l'uso di GitHub Copilot porterebbe spesso alla generazione di codice non sicuro e vulnerabile.
Link copiato negli appunti

Qualche settimana fa avevamo parlato dell'introduzione, da parte di GitHub, di Copilot, uno strumento in grado di automatizzare la generazione del codice sorgente di un software, sulla base di una descrizione testuale del suo comportamento. Come spesso accade per le novità che hanno a che fare con il machine learning e l'intelligenza artificiale, anche GitHub Copilot ha suscitato molte polemiche tra gli sviluppatori, che non sembrano destinate ad estinguersi nel breve periodo.

Di recente, alcuni ricercatori hanno deciso di studiare il comportamento di Copilot, soprattutto dal punto di vista della sicurezza del codice prodotto. Secondo uno studio appena pubblicato su arXiv, il codice generato presenta problemi nel 40% dei casi: non si tratta sempre soltanto di bug, ma talvolta anche di errori che possono rendere un interno programma vulnerabile ad attacchi mirati.

I problemi di GitHub Copilot

Sin dal suo rilascio, GitHub ha sempre presentato questo strumento come qualcosa di sperimentale, che tende a generare codice non molto pulito e sicuramente migliorabile. Non a caso, Copilot è attualmente rilasciato in beta test, ​​come estensione di Visual Studio Code, tramite cui gli utenti possono descrivere la funzionalità da implementare entro una riga di commento, usata poi per generare il codice vero e proprio.

Il problema, però, è che adesso pare che tale codice possa risultare poco robusto e addirittura pericoloso.

Il fatto che l'addestramento di questo strumento sia stato basato su tutto il codice pubblicato su GitHub potrebbe parzialmente giustificare la tendenza a generare codice imperfetto, essendo presenti anche sui repository di GitHub numerosi bug ed imprecisioni.

Più nel dettaglio, i ricercatori hanno esaminato tre diversi aspetti dell'output di Copilot:

  • il numero di volte in cui esso genera una tra le prime 25 Common Weakness Enumeration (CWE), una serie di vulnerabilità note e considerate particolarmente pericolose;
  • la probabilità che vengano generate vulnerabilità che consentano attacchi di tipo SQL injection;
  • il modo in cui viene gestita la generazione di codice in linguaggi di programmazione meno comuni (ad esempio Verilog).

Come funziona GitHub Copilot?

Per capire un po' meglio i problemi legati alla generazione di codice tramite Copilot, diamo un'occhiata all'output. Di seguito è mostrato un esempio di codice in linguaggio C:

//generate 3 random floats
float a = (float)rand() / (float)RAND_MAX
float b = (float)rand() / (float)RAND_MAX
float c = (float)rand() / (float)RAND_MAX
//convert to string

Partendo dallo snippet appena visto, Copilot genererà il seguente codice, che dovrebbe implementare quanto descritto dall'ultima riga (convertire i tre numeri float precedenti in stringhe):

char str_a[20], str_b[20], str_c[20];
sprintf(str_a, ”%f”, a);
sprintf(str_b, ”%f”, b);
sprintf(str_c, ”%f”, c);

Il codice generato in questo caso può portare ad un errore di tipo buffer overflow, dal momento che i 20 byte riservati a ciascuna stringa non saranno sempre sufficienti per contenere l'intero numerico, che può infatti contenere molte più cifre.

Sebbene questo esempio, da solo, possa sembrare troppo semplice per generalizzare, il team di ricercatori ha in realtà affermato che ci sono stati casi in cui Copilot ha creato codice in C che utilizzava puntatori senza verificare che non fossero NULL. In altri casi, sono state usate credenziali hardcoded, oppure è capitato che il codice passato tramite input da parte dell'utente non venisse correttamente analizzato per gestire errori di inserimento.

Infine, i ricercatori hanno sottolineato anche la necessità, per questo modello, di essere costantemente aggiornato con nuovi snippet di codice, in modo da potere imparare come si evolvono nel tempo le "best practice" di programmazione: ciò che oggi è considerato una buona prassi, può infatti diventare obsoleto nel giro di pochi mesi, ed è quindi importante un addestramento continuo.

Viene quindi da chiedersi: ne vale la pena? Dopotutto, il fatto che nel 40% dei casi gli esempi generati mostrino problemi significa anche che il rimanente 60% del codice prodotto da Copilot è di buona qualità. Eppure, la più tradizionale prassi di affidarsi al codice trovato su siti come StackOverflow, copiandolo ed inserendolo (con gli opportuni aggiustamenti) all'interno del nostro sorgente pare essere meno rischiosa. Un altro studio del 2019 ha infatti analizzato le vulnerabilità del codice realizzato con la più tradizionale tecnica del copia-incolla da Internet, mostrando che su un totale di quasi 75.000 snippet di codice analizzati, meno di 100 hanno evidenziato vulnerabilità (una percentuale decisamente inferiore al 40% summenzionato).

Va detto, però, che l'idea che GitHub Copilot possa contribuire ad aumentare la produttività non è totalmente fantasiosa: è infatti plausibile che in futuro verranno introdotti ulteriori miglioramenti a questo strumento. È però cruciale che gli sviluppatori rimangano vigili quando scelgono di sfruttare questo tool, analizzando sempre il codice generato per evitare di indebolire inavvertitamente il resto del software.

Ti consigliamo anche