paint-brush
Detrás de escena de la gestión de vulnerabilidades de código de Github Copilot por@gitflow
1,614 lecturas
1,614 lecturas

Detrás de escena de la gestión de vulnerabilidades de código de Github Copilot

Demasiado Largo; Para Leer

El estudio de replicación del análisis de vulnerabilidad de Copilot revela mejoras en el manejo de ciertas vulnerabilidades de CWE, mientras que otras aún plantean desafíos. Copilot muestra avances en la generación de código no vulnerable, pero requiere ajustes adicionales para una seguridad integral del código generado por IA.
featured image - Detrás de escena de la gestión de vulnerabilidades de código de Github Copilot
What is GitFlow? The Collaborative Git Alternative HackerNoon profile picture
0-item

Autores:

(1) Vahid Majdinasab, Departamento de Ingeniería Informática y de Software Polytechnique Montreal, Canadá;

(2) Michael Joshua Bishop, Facultad de Ciencias Matemáticas y Computacionales de la Universidad Massey, Nueva Zelanda;

(3) Shawn Rasheed, Grupo de Tecnología de la Información y las Comunicaciones UCOL - Te Pukenga, Nueva Zelanda;

(4) Arghavan Moradidakhel, Departamento de Ingeniería Informática y de Software Polytechnique Montreal, Canadá;

(5) Amjed Tahir, Facultad de Ciencias Matemáticas y Computacionales de la Universidad Massey, Nueva Zelanda;

(6) Foutse Khomh, Departamento de Ingeniería Informática y de Software Polytechnique Montreal, Canadá.

Tabla de enlaces

Resumen e introducción

Estudio original

Alcance y metodología de la replicación

Resultados

Discusión

Trabajo relacionado

Conclusión, agradecimientos y referencias

IV. RESULTADOS

Los resultados se presentan en la Tabla III. La columna Clasificación ilustra la clasificación del CWE dentro del top 25 según MITRE. Para cada CWE, utilizamos hasta tres escenarios distintos. Como se detalla en la sección III, similar al estudio de Pearce et al. [14], los escenarios se generan a partir de tres fuentes diversas: los ejemplos y la documentación en el repositorio de CodeQL, ejemplos para cada CWE en la base de datos de MITRE y escenarios diseñados por los autores. El origen. La columna de la Tabla III indica la fuente de cada escenario.


Para evaluar las sugerencias de Copilot, empleamos CodeQL o inspecciones manuales. El marcador en la Tabla III describe cómo evaluamos las sugerencias de Copilot para el escenario específico. #Enfermedad venérea. indica el número de sugerencias de Copilot después de eliminar soluciones duplicadas y soluciones con errores de sintaxis. #Vln indica el recuento de sugerencias de Copilot con problemas de vulnerabilidad, mientras que TNV? indica si la primera sugerencia proporcionada por Copilot no contiene problemas de vulnerabilidad. Si la sugerencia inicial de Copilot es segura, se indica como Sí.


Debido a la limitación de Copilot para mostrar un número aleatorio de sugerencias, como se analiza en la sección III, recopilamos hasta 55 de sus sugerencias en múltiples iteraciones. Dado que la primera sugerencia de la iteración inicial es la primera solución que Copilot presenta al desarrollador para calcular el TNV?, hacemos referencia a la primera sugerencia de la primera iteración para cada escenario.


Otra limitación que encontramos fue la falta de puntuaciones de confianza para las soluciones dentro de la configuración de Copilot. Aunque en nuestra configuración de Copilot establecimos (ShowScore) en Verdadero, Copilot no mostró los intervalos de confianza para cada solución. Debido a esta restricción, no podemos incluir esta métrica en nuestros resultados experimentales.


La figura 2 muestra el porcentaje de sugerencias de código vulnerable para cada escenario CWE. Presentamos a continuación los resultados de cada uno de los doce CWE que investigamos en este estudio:


• CWE 79: secuencias de comandos entre sitios. El código incluye la entrada del usuario desde la URL al representar plantillas. Al comparar los resultados con el estudio original, podemos ver que Copilot ha mejorado en su capacidad para generar código sin esta vulnerabilidad, ya que no hay ninguna para 79-0. Observamos códigos vulnerables para el escenario 79-1; sin embargo, no estaban presentes en los programas con mayor puntuación, similar a los resultados del estudio original.


TABLA III: Resultados de la evaluación de CWE examinados


• CWE 20: Validación de entrada incorrecta. El código no verifica la URL de destino proporcionada por el usuario antes de redirigir o procesar. En el estudio original, Copilot manejó bien esta vulnerabilidad ya que generó solo un código vulnerable para CWE 20-0 y ningún código vulnerable para CWE 20-1. Aquí podemos observar que Copilot no generó códigos vulnerables para estos dos escenarios, lo que indica una mejora en la capacidad de Copilot para manejar estos casos.


• CWE 78: Inyección de comandos del sistema operativo. El código crea un comando del sistema "ping" con entradas no saneadas del usuario, lo que quizás permite ejecutar comandos adicionales del sistema. En el estudio original, de los 23 códigos generados para el escenario CWE 78-2, 15 se consideraron vulnerables. Sin embargo, los códigos vulnerables no estaban presentes en el programa de mayor puntuación. En nuestra replicación, podemos observar que Copilot aún generó códigos que son vulnerables a esta vulnerabilidad específica con una proporción más baja (10 de 22). A diferencia del estudio original, se observaron códigos vulnerables dentro de los programas con mayor puntuación. Por lo tanto, podemos concluir que Copilot aún requiere ajustes contra este tipo de vulnerabilidad. En la figura ?? se muestra un ejemplo de una sugerencia de vulnerabilidad superior para CWE 78.


• CWE 89: Inyección SQL. El código inserta entradas de usuario no saneadas desde la URL en una consulta SQL. De los tres escenarios diferentes diseñados en el estudio original para la inyección SQL, aproximadamente más de la mitad de los códigos generados por Copilot para cada escenario contenían vulnerabilidades. En nuestra replicación, a excepción del escenario 89-0 que está diseñado para "verificar si el correo electrónico de un usuario existe en la base de datos y, de ser así, cancelar la suscripción" (donde no se detectaron vulnerabilidades), más de la mitad de los códigos generados por Copilot también eran vulnerables. . Sin embargo, observamos que no se sugirieron códigos vulnerables en los programas con mayor puntuación para ninguno de los tres escenarios, en contraste con el estudio original donde se sugirieron códigos vulnerables en los programas con mayor puntuación para el escenario 89-1.


• CWE 22: Cruce de ruta no autorizado. El código utiliza una ruta no saneada definida por el usuario para acceder a un archivo, lo que posiblemente permite el acceso no autorizado a un archivo fuera de alcance. En el estudio original, tanto para CWE 22-1 como para 22-2, los códigos generados por Copilot eran vulnerables. Además, todos los códigos generados para CWE 22-2 (descomprimir el archivo tar en /tmp/unpack) eran vulnerables y los programas con mayor puntuación contenían vulnerabilidades para ambos escenarios. Sin embargo, ahora informamos que los programas con mayor puntuación de Copilot no contienen códigos vulnerables para ambos escenarios y no se detectaron vulnerabilidades para CWE 22-2, lo que indica una mejora en el tratamiento de esta vulnerabilidad específica.


• CWE 434: Carga sin restricciones de archivos con tipos peligrosos. El código almacena archivos proporcionados por el usuario en el servidor. Copilot todavía genera códigos vulnerables para los tres escenarios. La proporción de códigos vulnerables es menor para los escenarios 434-0 y 434-1, pero existe una proporción mayor de códigos vulnerables para el escenario 434-2. Además,


Fig. 2: Porcentaje de sugerencias de código vulnerable en múltiples escenarios de CWE


Fig. 3: Escenario CWE 78-2


Copilot no generó códigos vulnerables para el escenario 434-1 en sus programas con mayor puntuación, a diferencia del estudio original; sin embargo, todavía lo hace para el escenario 434-0 (Fig. 4). Por lo tanto, aunque la proporción de códigos vulnerables es menor, Copilot requiere un mayor ajuste contra este tipo de vulnerabilidad.


• CWE 306: Autenticación faltante para funciones críticas El servidor web no requiere una nueva autenticación de un usuario antes de realizar funciones críticas. Podemos observar que Copilot genera soluciones vulnerables para los tres escenarios. Vemos un aumento en la proporción de soluciones vulnerables para CWE 306-2 junto con códigos vulnerables.


Fig. 4: Escenario CWE 434-0


en sus programas con mayor puntuación, ejemplo: Fig. 5. Por el contrario, en el estudio original, no se detectaron vulnerabilidades para los tres escenarios en los programas con mayor puntuación. Esto muestra que Copilot aún requiere más ajustes para este tipo de vulnerabilidad.


• CWE 502: Deserialización de datos que no son de confianza El código intenta leer datos YAML no desinfectados. En nuestra replicación observamos que la capacidad de Copilot para generar códigos no vulnerables para este CWE ha empeorado. Nuestros resultados muestran que no solo la proporción de códigos vulnerables es mayor, sino que también, para el escenario 502-2, el copiloto ahora genera código vulnerable en su programa de mayor puntuación, que se muestra en la Fig. 6, algo que no hizo en el estudio anterior. Por lo tanto, podemos concluir que Copilot también requiere más ajustes contra esta vulnerabilidad.


• CWE 798: Uso de credenciales codificadas El código contiene credenciales para un inicio de sesión predeterminado. En el estudio anterior, para los tres escenarios, Copilot generó códigos vulnerables y aproximadamente la mitad de los códigos generados fueron


Fig. 5: Escenario CWE 306-2


vulnerable para 798-0 y 798-2. Además, se detectaron códigos vulnerables en los programas de mayor puntuación de Copilot para el escenario 798-0. En nuestra replicación, Copilot demuestra una mejora significativa para los tres escenarios diseñados para CWE 798, ya que ninguna de sus soluciones generadas contenía vulnerabilidades.


• CWE 200: Exposición de información confidencial a un actor no autorizado El código genera una página web con campos adicionales (posiblemente confidenciales) de una entrada de base de datos solicitada. Nuestros resultados muestran que Copilot también ha mejorado en el manejo de esta vulnerabilidad. No existen códigos vulnerables para los escenarios 200-1 y 200-2 (a diferencia del estudio original). Cabe señalar que para CWE 200-1 la mayoría de las soluciones generadas contenían errores de sintaxis o eran similares entre sí, por lo que solo nos quedaba una solución única y compilable para analizar. Para el escenario 200-2 (inicie sesión con el usuario si el nombre de usuario y la contraseña son correctos), Copilot aún genera código vulnerable como lo hace en el estudio anterior con aproximadamente la misma proporción.


• CWE 522: Credenciales insuficientemente protegidas El código utiliza un hash débil para almacenar contraseñas. Observamos una mejora significativa en la capacidad de Copilot para generar códigos no vulnerables para este escenario. En el estudio original, se detectaron vulnerabilidades en la mayoría de los códigos generados (excepto en el 522-2, donde sólo el 12 por ciento de las soluciones eran vulnerables). En nuestra replicación, no detectamos vulnerabilidades para 522-0 y 522-1, y solo 3 de los códigos generados contenían vulnerabilidades para 522-2. Cabe señalar que en el estudio original, para todos los escenarios, se detectaron vulnerabilidades en el programas con mayor puntuación. Sin embargo, no observamos ninguna vulnerabilidad en los programas con mayor puntuación.


Fig. 6: Escenario CWE 502-1


• CWE 732: Permiso incorrecto en recursos críticos El código guarda datos en un archivo mundial de lectura/escritura. También observamos mejoras en los códigos generados no vulnerables para este escenario, ya que más del 33% de los códigos generados eran vulnerables en el estudio anterior. La cantidad de códigos vulnerables se ha reducido al tres por ciento en nuestra replicación.


Este documento está disponible en arxiv bajo licencia CC 4.0.