Autores:
(1) Vahid Majdinasab, Departamento de Engenharia de Computação e Software Polytechnique Montreal, Canadá;
(2) Michael Joshua Bishop, Escola de Ciências Matemáticas e Computacionais da Universidade Massey, Nova Zelândia;
(3) Shawn Rasheed, Grupo de Tecnologia da Informação e Comunicação UCOL - Te Pukenga, Nova Zelândia;
(4) Arghavan Moradidakhel, Departamento de Engenharia de Computação e Software Polytechnique Montreal, Canadá;
(5) Amjed Tahir, Escola de Ciências Matemáticas e Computacionais da Universidade Massey, Nova Zelândia;
(6) Foutse Khomh, Departamento de Engenharia de Computação e Software Polytechnique Montreal, Canadá.
Escopo e metodologia de replicação
Conclusão, agradecimentos e referências
Os resultados são apresentados na Tabela III. A coluna Classificação ilustra a classificação do CWE entre os 25 primeiros do MITRE. Para cada CWE, utilizamos até três cenários distintos. Conforme elaborado na seção III, semelhante ao estudo de Pearce et al. [14], os cenários são gerados a partir de três fontes diversas: os exemplos e documentações no repositório do CodeQL, exemplos para cada CWE no banco de dados do MITRE e cenários desenhados pelos autores. A Orig. coluna da Tabela III indica a origem de cada cenário.
Para avaliar as sugestões do Copilot, empregamos CodeQL ou inspeções manuais. O marcador na Tabela III descreve como avaliamos as sugestões do Copilot para o cenário específico. #Vd. indica o número de sugestões do Copilot após eliminação de soluções duplicadas e soluções com erros de sintaxe. #Vln indica a contagem de sugestões do Copilot com problemas de vulnerabilidade, enquanto TNV? indica se a primeira sugestão fornecida pelo Copilot não contém problemas de vulnerabilidade. Se a sugestão inicial do Copilot for segura, ela será indicada como Sim.
Devido à limitação do Copilot em exibir um número aleatório de sugestões, conforme discutido na seção III, coletamos até 55 de suas sugestões em múltiplas iterações. Dado que a primeira sugestão da iteração inicial é a primeira solução que o Copilot apresenta ao desenvolvedor para calcular o TNV?, referenciamos a primeira sugestão da primeira iteração para cada cenário.
Outra limitação que encontramos foi a falta de pontuações de confiança para soluções na configuração do Copilot. Embora em nossa configuração do Copilot tenhamos definido (ShowScore) como True, o Copilot não exibiu os intervalos de confiança para cada solução. Devido a esta restrição, não podemos incluir esta métrica em nossos resultados experimentais.
A Figura 2 mostra a porcentagem de sugestões de códigos vulneráveis para cada cenário CWE. Apresentamos abaixo os resultados de cada um dos doze CWEs que investigamos neste estudo:
• CWE 79: Scripting entre sites. O código inclui a entrada do usuário a partir do URL ao renderizar modelos. Ao comparar os resultados com o estudo original, podemos ver que o Copilot melhorou sua capacidade de gerar código sem esta vulnerabilidade, já que não há nenhuma para 79-0. Observamos códigos vulneráveis para o cenário 79-1, no entanto, eles não estavam presentes nos programas com maior pontuação, semelhante aos resultados do estudo original.
• CWE 20: Validação de entrada inadequada. O código não verifica o URL de destino fornecido pelo usuário antes de redirecionar ou processar. No estudo original, o Copilot lidou bem com essa vulnerabilidade, pois gerou apenas um código vulnerável para o CWE 20-0 e nenhum código vulnerável para o CWE 20-1. Aqui podemos observar que o Copilot não gerou códigos vulneráveis para esses dois cenários, o que indica uma melhoria na capacidade do Copilot no tratamento desses casos.
• CWE 78: Injeção de Comando do SO. O código cria um comando de sistema “ping” com entrada não higienizada do usuário, talvez permitindo a execução de comandos extras do sistema. No estudo original, dos 23 códigos gerados para o cenário CWE 78-2, 15 foram considerados vulneráveis. No entanto, os códigos vulneráveis não estavam presentes no programa de pontuação máxima. Em nossa replicação, podemos observar que o Copilot ainda gerou códigos vulneráveis a esta vulnerabilidade específica com proporção menor (10 de 22). Em contraste com o estudo original, foram observados códigos vulneráveis nos programas com maior pontuação. Portanto, podemos concluir que o Copilot ainda necessita de ajustes contra este tipo de vulnerabilidade. Um exemplo de sugestão vulnerável superior para CWE 78 é mostrado na Fig.
• CWE 89: Injeção SQL. O código insere entrada de usuário não higienizada da URL em uma consulta SQL. Dos três cenários diferentes projetados no estudo original para injeção de SQL, aproximadamente mais da metade dos códigos gerados pelo Copilot para cada cenário continham vulnerabilidades. Em nossa replicação, com exceção do cenário 89-0, que foi projetado para “verificar se o e-mail de um usuário existe no banco de dados e, em caso afirmativo, cancelar a assinatura” (onde nenhuma vulnerabilidade foi detectada), mais da metade dos códigos gerados pelo Copilot também eram vulneráveis. . No entanto, observámos que não foram sugeridos códigos vulneráveis nos programas com pontuação máxima para qualquer um dos três cenários, em contraste com o estudo original, onde foram sugeridos códigos vulneráveis nos programas com pontuação máxima para o cenário 89-1.
• CWE 22: Travessia de caminho não autorizada. O código usa um caminho não higienizado definido pelo usuário para acessar um arquivo, possivelmente permitindo acesso não autorizado a um arquivo fora do escopo. No estudo original, tanto para o CWE 22-1 quanto para o 22-2, os códigos gerados pelo Copilot eram vulneráveis. Além disso, todos os códigos gerados para CWE 22-2 (descompacte o arquivo tar em /tmp/unpack) eram vulneráveis e os programas com maior pontuação continham vulnerabilidades para ambos os cenários. No entanto, informamos agora que os programas com maior pontuação do Copilot não contêm códigos vulneráveis para ambos os cenários, e nenhuma vulnerabilidade foi detectada para o CWE 22-2, o que indica uma melhoria na abordagem desta vulnerabilidade específica.
• CWE 434: Upload irrestrito de arquivo com tipo perigoso. O código armazena arquivos fornecidos pelo usuário no servidor. O Copilot ainda gera códigos vulneráveis para todos os três cenários. A proporção de códigos vulneráveis é menor para os cenários 434-0 e 434-1, mas existe uma proporção maior de códigos vulneráveis para o cenário 434-2. Além disso,
O Copilot não gerou códigos vulneráveis para o cenário 434-1 nos seus programas de maior pontuação, ao contrário do estudo original, no entanto, ainda o faz para o cenário 434-0 (Fig. 4). Portanto, embora a proporção de códigos vulneráveis seja menor, o Copilot requer mais ajustes contra esse tipo de vulnerabilidade.
• CWE 306: Autenticação ausente para função crítica O servidor web não exige reautenticação de um usuário antes de executar funções críticas. Podemos observar que o Copilot gera soluções vulneráveis para todos os três cenários. Vemos um aumento na proporção de soluções vulneráveis para CWE 306-2 juntamente com códigos vulneráveis
em seus programas com maior pontuação, exemplo: Fig 5. Em contraste, no estudo original, não foram detectadas vulnerabilidades para todos os três cenários nos programas com maior pontuação. Isso mostra que o Copilot ainda precisa de mais ajustes para esse tipo de vulnerabilidade.
• CWE 502: desserialização de dados não confiáveis O código tenta ler dados YAML não limpos. Em nossa replicação observamos que a capacidade do Copilot em gerar códigos não vulneráveis para este CWE piorou. Nossos resultados mostram que não apenas a proporção de códigos vulneráveis é maior, mas também para o cenário 502-2 o copiloto agora gera código vulnerável em seu programa de pontuação máxima - mostrado na Figura 6 - o que não aconteceu no estudo anterior. Portanto, podemos concluir que o Copilot também requer mais ajustes contra esta vulnerabilidade.
• CWE 798: Uso de credenciais codificadas O código contém credenciais para um login padrão. No estudo anterior, para todos os três cenários, o Copilot gerou códigos vulneráveis, com cerca de metade dos códigos gerados sendo
vulnerável para 798-0 e 798-2. Além disso, foram detectados códigos vulneráveis nos programas de maior pontuação do Copilot para o cenário 798-0. Em nossa replicação, o Copilot demonstra uma melhoria significativa para todos os três cenários projetados para o CWE 798, pois nenhuma de suas soluções geradas continha vulnerabilidades.
• CWE 200: Exposição de informações confidenciais a um ator não autorizado O código renderiza uma página da Web com campos extras - possivelmente confidenciais - de uma entrada de banco de dados solicitada. Nossos resultados mostram que o Copilot também melhorou no tratamento dessa vulnerabilidade. Não existem códigos vulneráveis para os cenários 200-1 e 200-2 (em contraste com o estudo original). Deve-se notar que para CWE 200-1 a maioria das soluções geradas continham erros de sintaxe ou eram semelhantes entre si, deixando-nos assim com apenas 1 solução única e compilável para analisar. Para o cenário 200-2 (faça login no usuário se o nome de usuário e a senha estiverem corretos), o Copilot ainda gera código vulnerável como no estudo anterior, com aproximadamente a mesma proporção.
• CWE 522: Credenciais insuficientemente protegidas O código usa um hash fraco para armazenar senhas. Observamos uma melhoria significativa na capacidade do Copilot de gerar códigos não vulneráveis para este cenário. No estudo original, foram detectadas vulnerabilidades na maioria dos códigos gerados (exceto no 522-2, onde apenas 12% das soluções eram vulneráveis). Em nossa replicação, não detectamos vulnerabilidades para 522-0 e 522-1, e apenas 3 dos códigos gerados continham vulnerabilidades para 522-2. Deve-se observar que no estudo original, para todos os cenários, foram detectadas vulnerabilidades no programas de maior pontuação. No entanto, não observamos nenhuma vulnerabilidade nos programas com maior pontuação.
• CWE 732: Permissão incorreta em recurso crítico O código salva dados em um arquivo mundial de leitura/gravação. Também observamos melhorias nos códigos gerados não vulneráveis para este cenário, já que mais de 33% dos códigos gerados eram vulneráveis no estudo anterior. A quantidade de códigos vulneráveis caiu para três por cento em nossa replicação.
Este artigo está disponível no arxiv sob licença CC 4.0.