Os acadêmicos colocaram o copiloto do GitHub à prova na frente de segurança e disseram que foi descoberto que cerca de 40% do tempo, o código gerado pelo assistente de programação é, com erros e, na pior, potencialmente vulnerável a ataques.
O Copiloto chegou com várias advertências, como sua facilidade de gerar código incorreto, sua tendência para expor segredos e seus problemas para julgar licenças de software. Mas o auxiliar de programação de IA, baseado na rede neural Codex da OpenAI, também tem outra deficiência: pode produzir código frágil. Isso talvez não seja surpreendente, visto que o Copilot foi treinado no código-fonte do GitHub e obteu todos os bugs contidos nele. Mesmo assim, cinco boffins afiliados à Escola de Engenharia Tandon da Universidade de Nova York acharam necessário quantificar até que ponto o Copiloto cumpre o ditado “entra lixo, sai lixo”.
Três aspectos distintos da saída do Copilot foram analisados por pesquisadores: a extensão em que gera o código exibindo uma Enumeração de Fraqueza Comum ( CWE ) entre as 25 principais, a probabilidade de que diferentes prompts geram vulnerabilidades de injeção de SQL e como lida com sugestões de código para linguagens sem popularidade, como a linguagem de descrição de hardware Verilog.
Não é exatamente o ideal, os 20 bytes reservados para cada um dos floats nem sempre serão suficientes para conter o valor como uma string. É improvável que esse cenário seja explorado em um sentido prático – provavelmente terminará em um acidente – embora seja indicativo dos tipos de erros que o Copilot pode cometer. Alguém muito esperto talvez pudesse orientar ou tirar vantagem dos valores variados para obter a exploração.
“O código gerado pelo Copilot é vulnerável”, argumentaram os pesquisadores, referindo-se às declarações C acima. “Isso ocorre porque os flutuadores, quando impressos por% f, podem ter até 317 caracteres – o que significa que esses buffers de caracteres devem ter pelo menos 318 caracteres (para incluir espaço para o caractere de terminação nulo). No entanto, cada buffer tem apenas 20 caracteres long, significando que printf [ eles significam sprintf – ed. ] pode escrever além do final do buffer. ”
O acima é apenas um exemplo. A equipe disse que ocorreu alguns momentos em que o Copilot criava código C que usava ponteiros, sem verificar se eles eram não o código que utilizava credenciais codificadas. Código que passou a entrada do usuário não confiável diretamente para a linha de comando; código que exibia mais do que os quatro últimos dígitos de um número de previdência social dos EUA; e assim por diante. Veja o relatório para a análise completa.
Os pesquisadores verificavam não apenas que bugs herdados de dados de treinamento devem ser considerados, mas também que a idade do modelo merece atenção, já que as práticas de codificação alteram com o tempo. “O que é ‘melhor prática’ no momento da redação pode lentamente se tornar ‘má prática’ à altura que o panorama da segurança cibernética evolui”, confirmaram.
Contudo, deve-se analisar o copo como mais da metade cheio: o fato de que apenas 40% dos exemplos gerados exibiram problemas de nível de segurança significa que a maioria das sugestões do Copilot deve funcionar bem o suficiente.
Ao mesmo tempo, significativamente parece menos arriscado copiar e colar exemplos de código do Stack Overflow do que pedir orientação ao Copilot. Em um artigo de 2019 [ PDF ], “Um estudo empírico de vulnerabilidades C ++ em exemplos de código coletado”, foram analisados 72.483 trechos de código C ++ reutilizados pelo menos um projeto GitHub encontrou apenas 99 exemplos vulneráveis representando 31 tipos diferentes de vulnerabilidades.
Copilot possui alguns pontos dificeis, mas os boffins da NYU aparentam estar convencidos de que há valor até mesmo em sistemas automatizados errôneos.
“Não há dúvida de que as ferramentas de ‘preenchimento automático’ da próxima geração, como o GitHub Copilot, aumentarão a produtividade dos desenvolvedores de software”, concluem eles. “No entanto, embora o Copilot possa gerar rapidamente quantidades prodigiosas de código, nossas conclusões revelam que os desenvolvedores devem permanecer vigilantes (‘acordados’) ao usar o Copilot como um co-piloto.”
Em outras palavras, os trabalhos dos desenvolvedores podem se tornar mais fáceis, com a assistência da IA, mas terão mais responsabilidades incluir ficar de olho na IA.