Sobre Autofixo do Copilot para code scanning
Correção Automática do GitHub Copilot é uma expansão de code scanning que fornece aos usuários recomendações direcionadas para ajudá-los a corrigir alertas de code scanning, assim eles podem evitar a introdução de novas vulnerabilidades de segurança. As correções potenciais são geradas automaticamente por LLMs (grandes modelos de linguagem) usando dados da base de código e da code scanning análise.
Correção Automática do GitHub Copilot está disponível para análise de CodeQL.
Observação
Você não precisa de uma assinatura do GitHub Copilot para usar o Correção Automática do GitHub Copilot. O Autofixo do Copilot está disponível para todos os repositórios públicos no GitHub.com, bem como repositórios internos ou privados de propriedade de organizações e empresas que tenham uma licença para o GitHub Code Security.
Autofixo do Copilot gera correções potenciais relevantes para o código-fonte existente e converte a descrição e o local de um alerta em alterações de código que podem corrigir o alerta.
Autofixo do Copilot usa APIs internas GitHub Copilot que interagem com o modelo de linguagem extenso GPT-5.1 do OpenAI, que tem capacidade de geração suficiente para produzir tanto correções sugeridas no código quanto texto explicativo das correções.
Autofixo do Copilot é permitido por padrão e habilitado para cada repositório usando CodeQL, mas você pode optar por recusar e desabilitar Autofixo do Copilot. Para saber como desabilitar Autofixo do Copilot nos níveis corporativo, organizacional e repositório, consulte [AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/disabling-autofix-for-code-scanning).
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 saber mais, confira Exibir insights de segurança.
Experiência do desenvolvedor
Code scanning os usuários já podem ver alertas de segurança para analisar suas solicitações de pull. No entanto, os desenvolvedores geralmente têm pouco treinamento em codificação segura, 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.
Autofixo do Copilot 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 para o 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 CodeQLcode scanning
Autofixo do Copilot dá suporte à geração de correção para um subconjunto de consultas incluídas nos conjuntos de consultas padrão e estendidos de segurança CodeQL para C#, C/C++, Go, Java/Kotlin, Swift, JavaScript/TypeScript, Python, Ruby e Rust. Para obter mais informações sobre esses conjuntos de consultas, consulte [AUTOTITLE](/code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites#built-in-codeql-query-suites).
Processo de geração de sugestões
Quando Autofixo do Copilot estiver habilitado para um repositório, code scanning os alertas 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.
GitHub envia à LLM uma variedade de dados da code scanning análise. Por exemplo:
* CodeQL dados de alerta no formato SARIF. Para saber mais, confira Suporte SARIF para a varredura de código.
- Código da versão atual da ramificação.
- 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 CodeQL consulta que identificou o problema. Para obter exemplos, consulte CodeQL a ajuda de consulta.
Todas as Autofixo do Copilot sugestões são geradas e armazenadas no code scanning back-end. Eles são exibidos como sugestões. Nenhuma interação do usuário é necessária além de habilitar code scanning na base de código e criar uma solicitação de pull.
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 Advanced Security. Além disso, os dados manipulados por Autofixo do Copilot não são estritamente utilizados para fins de treinamento de LLM. Para obter mais informações sobre Advanced Security termos e condições, consulte Termos do GitHub para produtos e recursos adicionais.
Limitações e não determinismo de Autofixo do Copilot
Autofixo do Copilot para code scanning alertas não será capaz de gerar uma correção para cada alerta em cada situação. O recurso opera com base no melhor esforço e não tem a garantia de ter êxito em 100% das vezes.
Quando uma Autofixo do Copilot sugestão pode não ser gerada
Vários fatores podem impedir Autofixo do Copilot a geração bem-sucedida de uma correção sugerida.
-
_Não determinismo:_ o modelo de linguagem grande subjacente é um modelo generativo e, portanto, não determinístico. Isso significa que, mesmo com o mesmo alerta e código, ele pode não produzir uma sugestão viável ou a sugestão pode variar entre as tentativas. -
_Complexidade e contexto do problema:_ alguns alertas de segurança, como aqueles que exigem o fluxo de dados de rastreamento em uma base de código complexa com vários arquivos, ou aqueles que representam falhas lógicas sutis, podem ser difíceis de resolver para o modelo. -
_Tamanho do arquivo:_ se o código afetado estiver dentro de um arquivo ou repositório muito grande, o contexto fornecido para o LLM poderá ser truncado. O modelo precisa de contexto suficiente para entender a lógica do código ao redor e aplicar uma correção com segurança; quando esse contexto for limitado, o recurso não tentará uma correção. -
_Cobertura de linguagem e estrutura:_ Embora dê Autofixo do Copilot suporte a uma lista crescente de idiomas e alertas CodeQL, ele não abrange todos os tipos de alerta ou idioma possíveis.
Qualidade das sugestões
GitHub usa um harness de teste automatizado para monitorar continuamente a qualidade das sugestões de Autofixo do Copilot. 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 da execução code scanning e os testes de unidade do repositório no código resultante.
-
code scanning O alerta foi corrigido com a sugestão? - A correção introduziu novos code scanning alertas?
- A correção introduziu algum erro de sintaxe que code scanning pode 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 as sugestões para outros projetos que usam idiomas suportados por Autofixo do Copilot devem seguir um padrão semelhante.
-
Autofixo do Copilot é provável que 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. Autofixo do Copilot fornece informações valiosas para ajudá-lo a resolver code scanning alertas, mas, em última análise, continua sendo sua responsabilidade avaliar a alteração proposta e garantir a segurança e a precisão do código.
Observação
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 de Autofixo do Copilot, você sempre deve considerar as limitações da IA e editá-las conforme necessário antes de aceitá-las. Você também deve considerar atualizar o teste de CI e o gerenciamento de dependência para um repositório antes de habilitar Autofixo do Copilot para code scanning. Para obter mais informações, consulte Atenuar as limitações das sugestões.
Limitações das sugestões de código
-
_Idiomas humanos:_ 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 atenuar as limitações das sugestões de Autofixo do Copilot é 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 saber mais, 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.
Próximas etapas
-
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/triaging-code-scanning-alerts-in-pull-requests#working-with-autofix-suggestions-for-alerts-on-a-pull-request) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/resolving-code-scanning-alerts#generating-suggested-fixes-for-code-scanning-alerts) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/disabling-autofix-for-code-scanning)