Acerca de Corrección automática de Copilot para code scanning
Autocorrección de GitHub Copilot es una ampliación de code scanning que proporciona a los usuarios recomendaciones específicas para ayudarles a corregir alertas de code scanning y así evitar la introducción de nuevas vulnerabilidades de seguridad. Las posibles correcciones se generan automáticamente mediante modelos de lenguaje de gran tamaño (LLM) utilizando datos de la base de código y del análisis de code scanning. Autocorrección de GitHub Copilot está disponible para el análisis de CodeQL.
Nota:
No necesitas una suscripción a GitHub Copilot para usar Autocorrección de GitHub Copilot. Corrección automática 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.
Corrección automática de Copilot genera posibles correcciones que son relevantes para el código fuente existente y traduce la descripción y ubicación de una alerta en los cambios de código que pueden corregirla. Corrección automática de Copilot usa las API internas GitHub Copilot que se interconectan con el modelo de lenguaje grande GPT-5.1 de OpenAI, que tiene suficientes funcionalidades generativas para generar correcciones sugeridas en el código y texto explicativo para esas correcciones.
Corrección automática de Copilot se permite de forma predeterminada y se habilita para cada repositorio con CodeQL, pero puede optar por rechazar y deshabilitar Corrección automática de Copilot. Para aprender cómo deshabilitar Corrección automática de Copilot a nivel de empresa, organización y repositorio, consulte Deshabilitación de la corrección automática de Copilot para alertas de seguridad de escaneo de código.
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
Los usuarios de Code scanning ya pueden ver las alertas de seguridad para analizar sus solicitudes 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.
Corrección automática de Copilot reduce la barrera de entrada para los desarrolladores al combinar información sobre buenas prácticas con detalles de la base de código y de la alerta para sugerir una posible corrección. 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 compatibles para CodeQL code scanning
Corrección automática de Copilot admite la generación de correcciones para un subconjunto de consultas incluidas en los conjuntos de consultas predeterminados y de seguridad extendida de 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 Conjuntos de consultas codeQL.
Proceso de generación de sugerencias
Cuando Corrección automática de Copilot está habilitado para un repositorio, las alertas de code scanning identificadas envían información al LLM. Si el LLM puede generar una corrección potencial, esta se muestra como una sugerencia.
GitHub envía al LLM una variedad de datos provenientes del análisis de code scanning. Por ejemplo:
- Datos de alerta de CodeQL 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 de la consulta de CodeQL que identificó el problema. Para ejemplos, consulte la ayuda de consulta CodeQL.
Cualquier sugerencia de Corrección automática de Copilot se genera y almacena dentro del backend de code scanning. Se muestran como sugerencias. No se requiere interacción del usuario más allá de habilitar code scanning en la base de código y crear una solicitud de extracción.
El proceso de generación de correcciones no recopila ni utiliza ningún dato de cliente más allá del ámbito descrito anteriormente. Por tanto, el uso de esta característica se rige por los términos y condiciones existentes asociados a Advanced Security. Además, los datos gestionados por Corrección automática de Copilot ino se utilizan estrictamente para el entrenamiento de los LLM. Para obtener más información sobre los términos y condiciones de Advanced Security consulte Términos de GitHub para productos y funciones adicionales en la documentación de Free, Pro & y Team..
Limitaciones y uso no determinista de Corrección automática de Copilot
Corrección automática de Copilot para alertas de code scanning no podrá generar una corrección para todas las alertas en todas las situaciones. 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 sugerencia de Corrección automática de Copilot
Varios factores pueden impedir que Corrección automática de Copilot 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 lenguajes y frameworks:_ Aunque Corrección automática de Copilot admite una lista creciente de lenguajes y alertas de CodeQL, no cubre todos los tipos de alertas ni todos los lenguajes posibles.
Calidad de las sugerencias
GitHub utiliza un entorno de pruebas automatizado para supervisar continuamente la calidad de las sugerencias de Corrección automática 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 combinando todos los cambios sugeridos, sin editar, antes de ejecutar code scanning y las pruebas unitarias del repositorio sobre el código resultante.
- ¿Se corrigió la alerta de code scanning mediante la sugerencia?
- ¿Se ha introducido alguna nueva alerta de code scanning?
- ¿La corrección introdujo 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. Prevemos que las sugerencias para otros proyectos que utilicen lenguajes compatibles con Corrección automática de Copilot sigan un patrón similar.
- Corrección automática de Copilot probablemente agregará 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. Corrección automática de Copilot proporciona información valiosa para ayudarle a resolver alertas de code scanning, pero en última instancia sigue siendo su responsabilidad evaluar el cambio propuesto y garantizar la seguridad y precisión de su 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 Corrección automática de Copilot, siempre debe tener en cuenta sus limitaciones de IA y editar los cambios según sea necesario antes de aceptarlos. También debe considerar actualizar las pruebas de CI y la gestión de dependencias de un repositorio antes de habilitar Corrección automática 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 Corrección automática de Copilot es seguir las mejores prácticas. 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)