Sobre a Copilot Autofix para o code scanning
O GitHub Copilot Autofix é uma expansão do code scanning que fornece aos usuários recomendações direcionadas para auxiliar a corrigir alertas do code scanning, para que possam evitar a introdução novas vulnerabilidades de segurança. As correções potenciais são geradas automaticamente por modelos de linguagem de grande escala (LLMs) usando dados da base de código e da análise da code scanning. GitHub Copilot Autofix está disponível para análise de CodeQL e suporta a ferramenta de terceiros ESLint (o suporte de terceiros se encontra em versão prévia pública e está sujeito a alterações).
Note
Você não precisa de uma assinatura do GitHub Copilot para usar o GitHub Copilot Autofix. O Copilot Autofix está disponível para todos os repositórios públicos em GitHub.com, bem como repositórios privados em empresas no GitHub Enterprise Cloud que tenham uma licença para GitHub Advanced Security.
O Copilot Autofix gera possíveis correções que são relevantes para o código-fonte existente e traduz a descrição e o local de um alerta em alterações de código que podem corrigir o alerta. O Copilot Autofix usa APIs internas do GitHub Copilot que fazem interface com o modelo de linguagem grande GPT-4o da OpenAI, que tem recursos generativos suficientes para produzir correções sugeridas em código e texto explicativo para essas correções.
O Copilot Autofix é permitido por padrão e está habilitado para cada repositório usando o CodeQL, mas você pode optar por recusar e desabilitar o Copilot Autofix. Para saber como desabilitar o Copilot Autofix nos níveis de empresa, organização e repositório, consulte "Desabilitar a Correção Automática do Copilot para verificação de código".
No painel de visão geral de segurança de uma organização, você pode exibir o número total de sugestões de código geradas em pull requests abertas e fechadas na organização por um determinado período. Para obter mais informações, confira a "Exibir insights de segurança" na documentação do GitHub Enterprise Cloud.
Experiência do desenvolvedor
Os usuários do Code scanning já podem visualizar todos os alertas de segurança detectados para analisar suas pull requests. No entanto, os desenvolvedores geralmente têm pouco treinamento em segurança de código, de modo que a correção desses alertas exige um esforço substancial. Eles devem primeiro ler e entender o local e a descrição do alerta e, em seguida, usar esse entendimento para editar o código-fonte para corrigir a vulnerabilidade.
O Copilot Autofix reduz a barreira de entrada para desenvolvedores, combinando informações sobre práticas recomendadas com detalhes da base de código e alerta para sugerir uma possível correção ao desenvolvedor. Em vez de começar com uma pesquisa de informações sobre a vulnerabilidade, o desenvolvedor começa com uma sugestão de código que demonstra uma possível solução para sua base de código. O desenvolvedor avalia a possível correção para determinar se é a melhor solução para sua base de código e garantir que ela mantenha o comportamento pretendido.
Depois de confirmar uma correção sugerida ou uma correção modificada, o desenvolvedor deve sempre verificar se o teste de integração contínua (CI) para a base de código continua aprovado e se o alerta é mostrado como resolvido antes de mesclar sua solicitação de pull.
Idiomas com suporte para CodeQL code scanning
O Copilot Autofix dá suporte à geração de correção para um subconjunto de consultas incluídas nos conjuntos de consultas padrão e com segurança estendida CodeQL para C#, C/C++, Go, Java/Kotlin, Swift, JavaScript/TypeScript, Python e Ruby. Para obter mais informações sobre esses conjuntos de consultas, confira "Conjuntos de consultas CodeQL".
Processo de geração de sugestões
Quando a Copilot Autofix estiver habilitada para um repositório, os alertas de code scanning identificados enviarão a entrada para o LLM. Se o LLM puder gerar uma correção possível, a correção será mostrada como uma sugestão.
O GitHub envia ao LLM uma variedade de dados da análise do code scanning. Por exemplo:
- Dados de alerta do CodeQL em formato SARIF. Para obter mais informações, confira "Suporte SARIF para a varredura de código".
- Código da versão atual de branch.
- Trechos curtos de código em cada local de origem, local de coleta e qualquer local referenciado na mensagem de alerta ou incluído no caminho de fluxo.
- Primeiras ~10 linhas de cada arquivo envolvido em qualquer um desses locais.
- Texto de ajuda para a consulta do CodeQL que identificou o problema. Para obter exemplos, confira “Ajuda para consultas do CodeQL.”
Quaisquer sugestões do Copilot Autofix são geradas e armazenadas no back-end do code scanning. Eles são exibidos como sugestões. Nenhuma interação do usuário é necessária além de habilitar a code scanning na base de código e criar uma pull request.
O processo de geração de correções não coleta ou utiliza dados do cliente além do escopo descrito acima. Portanto, o uso desse recurso é regido pelos termos e condições existentes associados a GitHub Advanced Security. Além disso, os dados tratados pelo Copilot Autofix não são estritamente usados para fins de treinamento de LLM. Para obter mais informações sobre os termos e condições de GitHub Advanced Security, consulte "Termos do GitHub para produtos e recursos adicionais."
Qualidade das sugestões
O GitHub usa um agente de teste automatizado para monitorar continuamente a qualidade das sugestões do Copilot Autofix. Isso nos permite entender como as sugestões geradas pelo LLM mudam à medida que o modelo se desenvolve.
O agente de teste inclui um conjunto de mais de 2.300 alertas de um conjunto diversificado de repositórios públicos no qual o código destacado tem cobertura de teste. As sugestões para esses alertas são testadas para ver até que ponto elas são boas, ou seja, o quanto um desenvolvedor precisaria editá-las antes de confirmá-las na base de código. Para muitos dos alertas de teste, as sugestões geradas pelo LLM podem ser confirmadas no estado em que se encontram para corrigir o alerta enquanto continuam a passar com êxito em todos os testes de CI existentes.
Além disso, o sistema tem teste de estresse para verificar qualquer possível dano (muitas vezes referido como agrupamento vermelho), e um sistema de filtragem no LLM ajuda a evitar que sugestões potencialmente prejudiciais sejam exibidas aos usuários.
Como o GitHub testa sugestões
Testamos a eficácia das sugestões mesclando todas as alterações sugeridas, não editadas, antes de executar a code scanning e os testes de unidade do repositório no código resultante.
- O alerta da code scanning foi corrigido pela sugestão?
- A correção introduziu novos alertas de code scanning?
- A correção introduziu algum erro de sintaxe que o code scanning consegue detectar?
- A correção alterou a saída de algum dos testes do repositório?
Além disso, verificamos muitas das sugestões bem-sucedidas e confirmamos que elas corrigem o alerta sem introduzir novos problemas. Quando uma ou mais dessas verificações falharam, nossa triagem manual mostrou que, em muitos casos, a correção proposta estava quase correta, mas precisava de algumas pequenas modificações que um usuário poderia identificar e executar manualmente.
Eficácia em outros projetos
O conjunto de testes contém uma ampla gama de diferentes tipos de projetos e alertas. Prevemos que sugestões para outros projetos que usam linguagens que têm suporte no Copilot Autofix devem seguir um padrão semelhante.
- É provável que o Copilot Autofix adicione uma sugestão de código à maioria dos alertas.
- Quando os desenvolvedores avaliam as sugestões, esperamos que a maioria das correções possa ser confirmada sem edição ou com pequenas atualizações para refletir o contexto mais amplo do código.
- Uma pequena porcentagem de correções sugeridas refletirá um mal-entendido significativo da base de código ou da vulnerabilidade.
No entanto, cada projeto e base de código é exclusivo, ou seja, os desenvolvedores podem precisar editar uma porcentagem maior de correções sugeridas antes de confirmá-las. O Copilot Autofix fornece informações valiosas para ajudar você a resolver alertas do code scanning, mas, em última análise, é sua responsabilidade avaliar a alteração proposta e garantir a segurança e a precisão do código.
Note
A geração de correções para idiomas com suporte está sujeita à capacidade operacional do LLM. Além disso, cada correção sugerida é testada antes de ser adicionada a uma solicitação de pull. Se nenhuma sugestão estiver disponível ou se a correção sugerida for reprovada no teste interno, nenhuma sugestão será exibida.
Limitações de sugestões
Ao examinar uma sugestão do Copilot Autofix, você deve sempre considerar as limitações da IA e editar as alterações conforme necessário antes de aceitá-las. Você também deve considerar atualizar o teste de CI e o gerenciamento de dependências de um repositório antes de habilitar o Copilot Autofix para o code scanning. Para obter mais informações, confira "Atenuar as limitações das sugestões".
Limitações das sugestões de código
- Linguagens humanas: O sistema usa principalmente dados em inglês, incluindo os prompts enviados ao sistema, o código visto pelos LLMs em seus conjuntos de dados e os casos de teste usados para avaliação interna. As sugestões geradas pelo LLM podem ter uma taxa de sucesso menor para código-fonte e comentários escritos em outras linguagens e usando outros conjuntos de caracteres.
- Erros de sintaxe: O sistema pode sugerir correções que não são alterações de código sintaticamente corretas; por isso, é importante executar verificações de sintaxe nas pull requests.
- Erros de local: O sistema pode sugerir correções que são código sintaticamente correto, mas são sugeridas no local incorreto, o que significa que, se um usuário aceitar uma correção sem editar o local, ele introduzirá um erro de sintaxe.
- Erros semânticos: O sistema pode sugerir correções que são sintaticamente válidas, mas que alteram a semântica do programa. O sistema não tem compreensão da intenção do programador ou da base de código em como o código deve se comportar. Ter uma boa cobertura de teste ajuda os desenvolvedores a verificar se uma correção não altera o comportamento da base de código.
- Vulnerabilidades de segurança e enganos: O sistema pode sugerir correções que não conseguem corrigir a vulnerabilidade de segurança subjacente e/ou introduzem novas vulnerabilidades.
- Correções parciais: O sistema pode sugerir correções que resolvam apenas parcialmente a vulnerabilidade de segurança ou preservem apenas parcialmente a funcionalidade de código pretendida. O sistema vê apenas um pequeno subconjunto do código na base de código e nem sempre produz soluções globalmente ideais ou corretas.
Limitações das sugestões de dependência
Às vezes, uma correção sugerida inclui uma alteração nas dependências da base de código. Se você usar um sistema de gerenciamento de dependências, todas as alterações serão realçadas automaticamente para que o desenvolvedor revise. Antes de mesclar uma solicitação de pull, sempre verifique se as alterações de dependência são seguras e mantêm o comportamento pretendido da base de código.
- Dependências novas ou atualizadas: O sistema pode sugerir a adição ou atualização de dependências de software como parte de uma correção sugerida. Por exemplo, sugerindo alterar o arquivo
package.json
para projetos JavaScript para adicionar dependências do npm. - Dependências sem suporte ou inseguras: O sistema não sabe quais versões de uma dependência existente são suportadas ou seguras.
- Dependências fabricadas: O sistema tem conhecimento incompleto das dependências publicadas no ecossistema mais amplo. Isso pode levar a sugestões que adicionam uma nova dependência de software mal-intencionado que os invasores publicaram sob um nome de dependência estatisticamente provável.
Atenuar as limitações das sugestões
A melhor maneira de mitigar as limitações das sugestões do Copilot Autofix é seguir as práticas recomendadas. Por exemplo, usando o teste de CI de pull requests para verificar se os requisitos funcionais não são afetados e usando soluções de gerenciamento de dependência, como a API e a ação de revisão de dependência. Para obter mais informações, confira "Sobre a análise de dependência".
É importante lembrar que o autor de uma solicitação de pull mantém a responsabilidade sobre como responder aos comentários de revisão e às alterações de código sugeridas, sejam propostas por colegas ou por ferramentas automatizadas. Os desenvolvedores devem sempre analisar criticamente as sugestões de alterações de código. Se necessário, eles devem editar as alterações sugeridas para garantir que o código resultante e o aplicativo estejam corretos, seguros, atendam aos critérios de desempenho e satisfaçam todos os outros requisitos funcionais e não funcionais do aplicativo.