paint-brush
Dans les coulisses de la gestion des vulnérabilités du code de Github Copilot par@gitflow
1,548 lectures
1,548 lectures

Dans les coulisses de la gestion des vulnérabilités du code de Github Copilot

Trop long; Pour lire

L'étude de réplication de l'analyse de vulnérabilité de Copilot révèle des améliorations dans la gestion de certaines vulnérabilités CWE, tandis que d'autres posent encore des défis. Copilot montre des progrès dans la génération de code non vulnérable, mais nécessite des ajustements supplémentaires pour une sécurité complète du code généré par l'IA.
featured image - Dans les coulisses de la gestion des vulnérabilités du code de Github Copilot
What is GitFlow? The Collaborative Git Alternative HackerNoon profile picture
0-item

Auteurs:

(1) Vahid Majdinasab, Département de génie informatique et logiciel Polytechnique Montréal, Canada ;

(2) Michael Joshua Bishop, École des sciences mathématiques et informatiques de l'Université Massey, Nouvelle-Zélande ;

(3) Shawn Rasheed, Groupe des technologies de l'information et de la communication UCOL - Te Pukenga, Nouvelle-Zélande ;

(4) Arghavan Moraradidakhel, Département de génie informatique et logiciel de Polytechnique Montréal, Canada ;

(5) Amjed Tahir, École des sciences mathématiques et informatiques de l'Université Massey, Nouvelle-Zélande ;

(6) Foutse Khomh, Département de génie informatique et logiciel Polytechnique Montréal, Canada.

Tableau des liens

Résumé et introduction

Étude originale

Portée et méthodologie de la réplication

Résultats

Discussion

Travaux connexes

Conclusion, remerciements et références

IV. RÉSULTATS

Les résultats sont présentés dans le tableau III. La colonne Rank illustre le classement de la CWE dans le top 25 par MITRE. Pour chaque CWE, nous avons utilisé jusqu'à trois scénarios distincts. Comme expliqué dans la section III, à l’instar de l’étude de Pearce et al. [14], les scénarios sont générés à partir de trois sources diverses : les exemples et documentations dans le référentiel CodeQL, les exemples pour chaque CWE dans la base de données MITRE et les scénarios conçus par les auteurs. L'orig. La colonne du tableau III indique la source de chaque scénario.


Pour évaluer les suggestions de Copilot, nous avons utilisé soit CodeQL, soit des inspections manuelles. Le marqueur du tableau III décrit la manière dont nous avons évalué les suggestions de Copilot pour le scénario spécifique. #Vd. indique le nombre de suggestions de Copilot après élimination des solutions en double et des solutions comportant des erreurs de syntaxe. #Vln indique le nombre de suggestions de Copilot présentant des problèmes de vulnérabilité, tandis que TNV ? indique si la première suggestion fournie par Copilot ne contient aucun problème de vulnérabilité. Si la suggestion initiale de Copilot est sécurisée, elle est notée Oui.


En raison des limites de Copilot dans l'affichage d'un nombre aléatoire de suggestions, comme indiqué dans la section III, nous avons collecté jusqu'à 55 de ses suggestions sur plusieurs itérations. Étant donné que la première suggestion de la première itération est la première solution que Copilot présente au développeur pour calculer TNV ?, nous référençons la première suggestion de la première itération pour chaque scénario.


Une autre limitation que nous avons rencontrée était le manque de scores de confiance pour les solutions au sein de la configuration de Copilot. Même si dans notre configuration Copilot, nous avons défini (ShowScore) sur True, Copilot n'affichait pas les intervalles de confiance pour chaque solution. En raison de cette contrainte, nous ne pouvons pas inclure cette métrique dans nos résultats expérimentaux.


La figure 2 montre le pourcentage de suggestions de codes vulnérables pour chaque scénario CWE. Nous présentons ci-dessous les résultats de chacun des douze CWE que nous avons étudiés dans cette étude :


• CWE 79 : Scripts intersites. Le code inclut la saisie de l'utilisateur à partir de l'URL lors du rendu des modèles. En comparant les résultats à l'étude originale, nous pouvons constater que Copilot a amélioré sa capacité à générer du code sans cette vulnérabilité, puisqu'il n'y en a pas pour 79-0. Nous observons des codes vulnérables pour le scénario 79-1, mais ils n'étaient pas présents dans les programmes les mieux notés, comme les résultats de l'étude originale.


TABLEAU III : Résultats de l’évaluation du CWE examinés


• CWE 20 : validation d'entrée incorrecte. Le code ne vérifie pas l'URL de destination fournie par l'utilisateur avant la redirection ou le traitement. Dans l'étude originale, Copilot a bien géré cette vulnérabilité car il n'a généré qu'un seul code vulnérable pour CWE 20-0 et aucun code vulnérable pour CWE 20-1. Ici, nous pouvons observer que Copilot n'a généré aucun code vulnérable pour ces deux scénarios, ce qui indique une amélioration de la capacité de Copilot à gérer ces cas.


• CWE 78 : injection de commandes du système d'exploitation. Le code crée une commande système « ping » avec une entrée utilisateur non vérifiée, permettant peut-être d'exécuter des commandes système supplémentaires. Dans l'étude originale, sur les 23 codes générés pour le scénario CWE 78-2, 15 étaient jugés vulnérables. Cependant, les codes vulnérables n’étaient pas présents dans le programme de meilleurs scores. Dans notre réplication, nous pouvons observer que Copilot génère toujours des codes vulnérables à cette vulnérabilité spécifique avec un ratio plus faible (10 sur 22). Contrairement à l’étude originale, des codes vulnérables ont été observés au sein des programmes les mieux notés. Par conséquent, nous pouvons conclure que Copilot nécessite encore des ajustements pour contrer ce type de vulnérabilité. Un exemple de suggestion la plus vulnérable pour CWE 78 est présenté sur la figure ??.


• CWE 89 : Injection SQL. Le code insère une entrée utilisateur non vérifiée à partir de l'URL dans une requête SQL. Sur les trois scénarios différents conçus dans l'étude originale pour l'injection SQL, environ plus de la moitié des codes générés par Copilot pour chaque scénario contenaient des vulnérabilités. Dans notre réplication, à l'exception du scénario 89-0 qui vise à « vérifier si l'e-mail d'un utilisateur existe dans la base de données, et si c'est le cas, se désabonner » (où aucune vulnérabilité n'a été détectée), plus de la moitié des codes générés par Copilot étaient également vulnérables. . Cependant, nous avons observé qu'aucun code vulnérable n'était suggéré dans les programmes les mieux notés pour aucun des trois scénarios, contrairement à l'étude originale où des codes vulnérables étaient suggérés dans les programmes les mieux notés pour le scénario 89-1.


• CWE 22 : Traversée de chemin non autorisée. Le code utilise un chemin non nettoyé défini par l'utilisateur pour accéder à un fichier, permettant éventuellement un accès non autorisé à un fichier hors de portée. Dans l'étude originale, pour CWE 22-1 et 22-2, les codes générés par Copilot étaient vulnérables. De plus, tous les codes générés pour CWE 22-2 (décompressez le fichier tar dans /tmp/unpack) étaient vulnérables et les programmes les mieux notés contenaient des vulnérabilités pour les deux scénarios. Cependant, nous signalons maintenant que les programmes les mieux notés de Copilot ne contiennent pas de codes vulnérables pour les deux scénarios, et qu'aucune vulnérabilité n'a été détectée pour CWE 22-2, ce qui indique une amélioration dans la résolution de cette vulnérabilité spécifique.


• CWE 434 : téléchargement sans restriction d'un fichier de type dangereux. Le code stocke les fichiers fournis par l'utilisateur sur le serveur. Copilot génère toujours des codes vulnérables pour les trois scénarios. Le ratio de codes vulnérables est plus faible pour les scénarios 434-0 et 434-1 mais il existe un ratio de codes vulnérables plus élevé pour le scénario 434-2. En outre,


Fig. 2 : Pourcentage de suggestions de code vulnérable dans plusieurs scénarios CWE


Fig. 3 : Scénario CWE 78-2


Copilot n'a pas généré de codes vulnérables pour le scénario 434-1 dans ses programmes les mieux notés, contrairement à l'étude originale. Cependant, il le fait toujours pour le scénario 434-0 (Fig. 4). Par conséquent, même si le ratio de codes vulnérables est inférieur, Copilot nécessite des ajustements plus précis contre ce type de vulnérabilité.


• CWE 306 : Authentification manquante pour une fonction critique Le serveur Web ne nécessite pas de réauthentification d'un utilisateur avant d'exécuter des fonctions critiques. Nous pouvons observer que Copilot génère des solutions vulnérables pour les trois scénarios. Nous constatons une augmentation du ratio de solutions vulnérables pour CWE 306-2 aux côtés des codes vulnérables


Fig. 4 : Scénario CWE 434-0


dans ses programmes les mieux notés, exemple : Fig 5. En revanche, dans l'étude originale, aucune vulnérabilité n'a été détectée pour les trois scénarios dans les programmes les mieux notés. Cela montre que Copilot nécessite encore des réglages plus fins pour ce type de vulnérabilité.


• CWE 502 : Désérialisation de données non fiables Le code tente de lire des données YAML non nettoyées. Dans notre réplication, nous observons que la capacité de Copilot à générer des codes non vulnérables pour ce CWE s'est détériorée. Nos résultats montrent que non seulement le ratio de codes vulnérables est plus élevé, mais que pour le scénario 502-2, le copilote génère désormais du code vulnérable dans son programme le mieux noté - illustré à la figure 6 - ce qu'il ne faisait pas dans l'étude précédente. Par conséquent, nous pouvons conclure que Copilot nécessite également des ajustements plus précis face à cette vulnérabilité.


• CWE 798 : Utilisation d'informations d'identification codées en dur Le code contient les informations d'identification pour une connexion par défaut. Dans l'étude précédente, pour les trois scénarios, Copilot a généré des codes vulnérables, environ la moitié des codes générés étant


Fig. 5 : Scénario CWE 306-2


vulnérable pour 798-0 et 798-2. De plus, des codes vulnérables ont été détectés dans les programmes les mieux notés de Copilot pour le scénario 798-0. Dans notre réplication, Copilot démontre une amélioration significative pour les trois scénarios conçus pour CWE 798, car aucune de ses solutions générées ne contenait de vulnérabilités.


• CWE 200 : Exposition d'informations sensibles à un acteur non autorisé Le code affiche une page Web avec des champs supplémentaires - éventuellement sensibles - provenant d'une entrée de base de données demandée. Nos résultats montrent que Copilot a également amélioré sa gestion de cette vulnérabilité. Aucun code vulnérable n'existe pour les scénarios 200-1 et 200-2 (contrairement à l'étude originale). Il convient de noter que pour CWE 200-1, la plupart des solutions générées contenaient soit des erreurs de syntaxe, soit étaient similaires les unes aux autres, nous laissant ainsi avec une seule solution unique et compilable à analyser. Pour le scénario 200-2 (connectez l'utilisateur si le nom d'utilisateur et le mot de passe sont corrects), Copilot génère toujours du code vulnérable comme dans l'étude précédente avec à peu près le même ratio.


• CWE 522 : informations d'identification insuffisamment protégées Le code utilise un hachage faible pour stocker les mots de passe. Nous observons une amélioration significative de la capacité de Copilot à générer des codes non vulnérables pour ce scénario. Dans l'étude originale, des vulnérabilités ont été détectées dans la plupart des codes générés (à l'exception du 522-2 où seulement 12 % des solutions étaient vulnérables). Dans notre réplication, nous n'avons détecté aucune vulnérabilité pour 522-0 et 522-1, et seulement 3 des codes générés contenaient des vulnérabilités pour 522-2. Il convient de noter que dans l'étude originale, pour tous les scénarios, des vulnérabilités ont été détectées dans le programmes les mieux notés. Cependant, nous n’observons aucune vulnérabilité dans les programmes les mieux notés.


Fig. 6 : Scénario CWE 502-1


• CWE 732 : autorisation incorrecte sur une ressource critique. Le code enregistre les données dans un fichier accessible en lecture/écriture. Nous avons également observé des améliorations dans les codes générés non vulnérables pour ce scénario puisque plus de 33 % des codes générés étaient vulnérables dans l'étude précédente. Le nombre de codes vulnérables est tombé à trois pour cent dans notre réplication.


Cet article est disponible sur arxiv sous licence CC 4.0.