Acerca de Autofijo de Copilot para code scanning
GitHub Copilot Corrección automática es una expansión de code scanning que proporciona a los usuarios recomendaciones dirigidas para ayudarles a corregir code scanning alertas para que puedan evitar la introducción de nuevas vulnerabilidades de seguridad. Los modelos de lenguaje grande (LLM) generan automáticamente las posibles correcciones mediante datos del código base y del code scanning análisis.
GitHub Copilot Corrección automática está disponible para el análisis de CodeQL.
Nota:
No necesitas una suscripción a GitHub Copilot para usar GitHub Copilot Corrección automática. Autofijo de Copilot está disponible para todos los repositorios públicos en GitHub.com, así como repositorios internos o privados que pertenecen a organizaciones y empresas que tienen una licencia para GitHub Code Security.
Autofijo de Copilot genera posibles correcciones que son relevantes para el código fuente existente y traduce la descripción y la ubicación de una alerta en los cambios de código que pueden corregir la alerta.
Autofijo de Copilot usa API internas GitHub Copilot que se interconectan con el modelo GPT-5.1 de lenguaje grande de OpenAI, que tiene suficientes funcionalidades generativas para generar correcciones sugeridas en el código y texto explicativo para esas correcciones.
Autofijo de Copilot está permitido de forma predeterminada y habilitado para cada repositorio mediante CodeQL, pero puede elegir no usarlo y desactivar Autofijo de Copilot. Para obtener información sobre cómo deshabilitar Autofijo de Copilot en los niveles de empresa, organización y repositorio, consulte [AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/disabling-autofix-for-code-scanning).
En el panel de información general de seguridad de una organización, puede ver el número total de sugerencias de código generadas en solicitudes de incorporación de cambios abiertas y cerradas en la organización durante un período de tiempo determinado. Para más información, consulta Visualización de información de seguridad.
Experiencia del desarrollador
Code scanning los usuarios ya pueden ver alertas de seguridad para analizar sus solicitudes de incorporación de cambios. Sin embargo, los desarrolladores suelen tener poco entrenamiento en codificación segura, por lo que la corrección de estas alertas requiere un esfuerzo considerable. Primero deben leer y comprender la ubicación y la descripción de la alerta y luego usar esa comprensión para editar el código fuente y así corregir la vulnerabilidad.
Autofijo de Copilot reduce la barrera de entrada a los desarrolladores mediante la combinación de información sobre los procedimientos recomendados con detalles del código base y la alerta para sugerir una posible corrección para el desarrollador. En lugar de empezar con una búsqueda de información sobre la vulnerabilidad, el desarrollador comienza con una sugerencia de código que muestra una posible solución para el código base. El desarrollador evalúa la posible corrección para determinar si es la mejor solución para el código base y para asegurarse de que mantiene el comportamiento previsto.
Después de confirmar una corrección sugerida o modificada, el desarrollador siempre debe comprobar que las pruebas de integración continua (CI) del código base se siguen aprobando y que la alerta se muestra como resuelta antes de combinar su solicitud de incorporación de cambios.
Idiomas admitidos para CodeQLcode scanning
Autofijo de Copilot admite la generación de correcciones para un subconjunto de consultas incluidas en los paquetes de consultas predeterminados y ampliados de seguridad CodeQL para C#, C/C++, Go, Java/Kotlin, Swift, JavaScript/TypeScript, Python, Ruby y Rust. Para obtener más información sobre estos conjuntos de consultas, consulte [AUTOTITLE](/code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites#built-in-codeql-query-suites).
Proceso de generación de sugerencias
Cuando se habilita Autofijo de Copilot para un repositorio, las alertas identificadas por code scanning envían datos al LLM. Si el LLM puede generar una corrección potencial, esta se muestra como una sugerencia.
GitHub envía a LLM una variedad de datos del code scanning análisis. Por ejemplo:
* CodeQL datos de alerta en formato SARIF. Para más información, consulta Soporte de SARIF para escaneo de código.
- Código de la versión actual de la rama.
- Fragmentos cortos de código alrededor de cada ubicación de origen, ubicación del receptor y cualquier ubicación a la que se haga referencia en el mensaje de alerta o que esté incluida en la ruta de acceso del flujo.
- Primero 10 líneas (aproximadamente) de cada archivo implicado en cualquiera de esas ubicaciones.
- Texto de ayuda para la consulta CodeQL que identificó el problema. Para obtener ejemplos, consulte CodeQL la ayuda de consulta.
Todas las Autofijo de Copilot sugerencias se generan y almacenan dentro del code scanning back-end. Se muestran como sugerencias. No se necesita ninguna interacción del usuario más allá de habilitar code scanning en el código base y crear un pull request.
El proceso de generación de correcciones no recopila ni utiliza ningún dato de cliente más allá del ámbito descrito anteriormente. Por lo tanto, el uso de esta característica se rige por los términos y condiciones existentes asociados a Advanced Security. Además, los datos administrados por Autofijo de Copilot no se emplean estrictamente para fines de entrenamiento de LLM. Para obtener más información sobre Advanced Security los términos y condiciones, consulte Términos de GitHub para productos y funciones adicionales.
Limitaciones y no determinismo de Autofijo de Copilot
Autofijo de Copilot para code scanning las alertas no podrá generar una corrección para cada alerta en cada situación. La característica funciona según el mejor esfuerzo y no se garantiza que se realice correctamente el 100 % del tiempo.
Cuando no se puede generar una Autofijo de Copilot sugerencia
Varios factores pueden impedir que Autofijo de Copilot se genere correctamente una corrección sugerida.
-
_No determinismo:_ El modelo de lenguaje subyacente es un modelo generativo y, por lo tanto, no es determinista. Esto significa que incluso con la misma alerta y el mismo código, podría no generar una sugerencia viable o la sugerencia podría variar entre intentos. -
_Complejidad del problema y contexto:_ Algunas alertas de seguridad, como aquellas que requieren rastrear el flujo de datos a través de una base de código compleja de varios archivos o que representan fallos lógicos sutiles, pueden ser difíciles de resolver para el modelo. -
_Tamaño del archivo:_ Si el código afectado se encuentra dentro de un archivo o repositorio muy grande, el contexto proporcionado al LLM puede truncarse. El modelo necesita contexto suficiente para comprender la lógica del código adyacente y aplicar una corrección de forma segura; cuando este contexto está limitado, la característica no intentará una corrección. -
_Cobertura de lenguaje y marco:_ Aunque Autofijo de Copilot admite una lista creciente de idiomas y alertas de CodeQL, no cubre todos los tipos de alerta o idioma posibles.
Calidad de las sugerencias
GitHub usa un arnés de prueba automatizado para supervisar continuamente la calidad de las sugerencias de Autofijo de Copilot. Esto nos permite comprender cómo cambian las sugerencias generadas por el LLM a medida que el modelo evoluciona.
La herramienta de ejecución de pruebas incluye más de 2300 alertas de un conjunto diverso de repositorios públicos en los que el código resaltado tiene cobertura de pruebas. Las sugerencias para estas alertas se prueban para evaluar su calidad, es decir, cuánto tendría que editarlas un desarrollador antes de confirmarlas en la base de código. Para muchas de las alertas de prueba, las sugerencias generadas por el LLM podrían confirmarse tal cual para corregir la alerta y seguir superando correctamente todas las pruebas de CI existentes.
Además, el sistema se somete a pruebas de esfuerzo para comprobar posibles daños (a menudo denominados formación de equipos rojos). Además, un sistema de filtrado en el LLM ayuda a evitar que se muestren sugerencias potencialmente perjudiciales a los usuarios.
Cómo GitHub prueba las sugerencias
Probamos la eficacia de las sugerencias mediante la combinación de todos los cambios sugeridos, sin editar, antes de ejecutar code scanning y las pruebas unitarias del repositorio en el código resultante.
- ¿Se ha corregido la code scanning alerta según la sugerencia?
- ¿Ha introducido la corrección alguna nueva code scanning alerta?
- ¿Ha introducido la corrección algún error de sintaxis que code scanning pueda detectar?
- ¿Ha cambiado la corrección la salida de cualquiera de las pruebas del repositorio?
Además, detectamos muchas de las sugerencias correctas y comprobamos que corrigen la alerta sin introducir nuevos problemas. Cuando se produjo un error en una o varias de estas comprobaciones, nuestra evaluación de prioridades manual mostró que, en muchos casos, la corrección propuesta era casi correcta, pero necesitaba modificaciones menores que un usuario podría identificar y hacer manualmente.
Eficacia en otros proyectos
El conjunto de pruebas contiene una amplia gama de distintos tipos de proyectos y alertas. Se predice que las sugerencias para otros proyectos que usan lenguajes admitidos por Autofijo de Copilot deben seguir un patrón similar.
-
Autofijo de Copilot es probable que agregue una sugerencia de código a la mayoría de las alertas. - Cuando los desarrolladores evalúan las sugerencias, esperamos que la mayoría de las correcciones puedan confirmarse sin edición o con actualizaciones menores para reflejar el contexto más amplio del código.
- Un pequeño porcentaje de correcciones sugeridas reflejará un malentendido significativo del código base o la vulnerabilidad.
Sin embargo, cada proyecto y código base es único, por lo que es posible que los desarrolladores necesiten editar un porcentaje mayor de correcciones sugeridas antes de confirmarlas. Autofijo de Copilot proporciona información valiosa para ayudarle a resolver code scanning alertas, pero en última instancia sigue siendo su responsabilidad evaluar el cambio propuesto y garantizar la seguridad y la precisión del código.
Nota:
La generación de correcciones para los idiomas admitidos está sujeta a la capacidad operativa de LLM. Además, cada corrección sugerida se prueba antes de agregarla a una solicitud de incorporación de cambios. Si no hay ninguna sugerencia disponible, o si la corrección sugerida falla en las pruebas internas, no se muestra ninguna sugerencia.
Limitaciones de las sugerencias
Al revisar una sugerencia de Autofijo de Copilot, siempre debe tener en cuenta las limitaciones de la inteligencia artificial y editar los cambios según sea necesario antes de aceptar los cambios. También debe considerar la posibilidad de actualizar las pruebas de CI y la administración de dependencias de un repositorio antes de habilitar Autofijo de Copilot para code scanning. Para obtener más información, consulte Mitigar las limitaciones de las sugerencias.
Limitaciones de las sugerencias de código
-
_Lenguajes humanos:_ El sistema utiliza principalmente datos en inglés, incluidos los mensajes enviados al sistema, el código visto por los LLM en sus conjuntos de datos y los casos de prueba utilizados para la evaluación interna. Las sugerencias generadas por el LLM pueden tener una tasa de éxito menor para el código fuente y los comentarios escritos en otros lenguajes y usando otros juegos de caracteres. -
_Errores de sintaxis:_ El sistema puede sugerir correcciones que no sean cambios de código sintácticamente correctos, por lo que es importante ejecutar comprobaciones de sintaxis en las solicitudes de extracción. -
_Errores de ubicación:_ El sistema puede sugerir correcciones que sean código sintácticamente correcto pero que se sugieran en una ubicación incorrecta, lo que significa que, si un usuario acepta una corrección sin editar la ubicación, introducirá un error de sintaxis. -
_Errores semánticos_: El sistema puede sugerir correcciones que sean sintácticamente válidas, pero que cambien la semántica del programa. El sistema no entiende la intención del programador o del código base sobre cómo debe comportarse el código. Tener una buena cobertura de pruebas ayuda a los desarrolladores a comprobar que una corrección no cambia el comportamiento del código base. -
_Vulnerabilidades de seguridad y correcciones engañosas:_ El sistema puede sugerir correcciones que no remedien la vulnerabilidad de seguridad subyacente y/o que introduzcan nuevas vulnerabilidades de seguridad. -
_Correcciones parciales:_ El sistema puede sugerir correcciones que solo aborden parcialmente la vulnerabilidad de seguridad o que solo conserven parcialmente la funcionalidad prevista del código. El sistema solo ve un pequeño subconjunto del código en el código base y no siempre produce soluciones óptimas o correctas globalmente.
Limitaciones de las sugerencias de dependencias
A veces, una corrección sugerida incluye un cambio en las dependencias del código base. Si usas un sistema de administración de dependencias, los cambios se resaltarán automáticamente para que el desarrollador los revise. Antes de combinar una solicitud de incorporación de cambios, comprueba siempre que los cambios de dependencia sean seguros y mantengan el comportamiento previsto del código base.
-
_Dependencias nuevas o actualizadas:_ El sistema puede sugerir agregar o actualizar dependencias de software como parte de una corrección sugerida. Por ejemplo, si se sugiere cambiar el archivo `package.json` de los proyectos de JavaScript para agregar dependencias desde npm. -
_Dependencias no compatibles o inseguras:_ El sistema no sabe qué versiones de una dependencia existente son compatibles o seguras. -
_Dependencias fabricadas:_ El sistema tiene un conocimiento incompleto de las dependencias publicadas en el ecosistema más amplio. Esto puede provocar sugerencias que agreguen una nueva dependencia de software malintencionado que los atacantes han publicado con un nombre de dependencia estadísticamente probable.
Mitigar las limitaciones de las sugerencias
La mejor manera de mitigar las limitaciones de las sugerencias de Autofijo de Copilot es seguir los procedimientos recomendados. Por ejemplo, el uso de pruebas de CI de solicitudes de incorporación de cambios para comprobar que los requisitos funcionales no se ven afectados y usan soluciones de administración de dependencias, como la API y la acción de revisión de dependencias. Para más información, consulta Acerca de la revisión de dependencias.
Es importante recordar que el autor de una solicitud de incorporación de cambios conserva la responsabilidad sobre cómo responden a los comentarios y a los cambios de código sugeridos, ya sean propuestos por compañeros o herramientas automatizadas. Los desarrolladores siempre deben examinar de forma crítica las sugerencias de los cambios de código. Si es necesario, deben editar los cambios sugeridos para asegurarse de que el código y la aplicación resultantes sean correctos, seguros, cumplan los criterios de rendimiento y con todos los demás requisitos funcionales y no funcionales de la aplicación.
Pasos siguientes
-
[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)