Compartir a través de


Comprender la cobertura de la evaluación mediante la modernización de GitHub Copilot

En este artículo se describe qué puede detectar la función de evaluación de la aplicación en la modernización de GitHub Copilot. La evaluación abarca dos funcionalidades clave:

  • Detección de problemas en tres dominios críticos para el recorrido de modernización:

    • Preparación para la nube: identifica 16 categorías de preocupaciones, como el uso del sistema de archivos, la administración de credenciales, los servicios de mensajería, las conexiones de base de datos, las brechas de contenedorización, el control de sesiones, los patrones de comunicación remota, etc.
    • Actualización de Java: marca las versiones obsoletas de Java, los marcos con soporte OSS descontinuado (Spring Boot, Spring Cloud, Jakarta EE), cientos de API eliminadas o en desuso, y herramientas de compilación heredadas como Ant.
    • Seguridad: detecta 42 puntos débiles de seguridad extraídos del estándar ISO/IEC 5055, que cubre vulnerabilidades de inyección (SQL, LDAP, XPath, comando del sistema operativo), credenciales codificadas de forma rígida y claves criptográficas, problemas de sincronización, problemas de ciclo de vida de los recursos y otros CWE de alto impacto.
  • Comprensión de aplicaciones: en el caso de los código base heredados, la evaluación expone dependencias y tecnologías en uso, por lo que obtendrá una visión clara de lo que la aplicación se basa antes de empezar a migrar.

En las secciones siguientes se describe la cobertura de problemas de cada dominio en detalle.

Dominio: preparación para la nube

Dominio Categoría Resumen de detección Por qué importa
cloud-readiness credential-migration Detecta credenciales de AWS codificadas de forma codificada (aws_access_key_id, aws_secret_access_key), uso de AWS Secrets Manager y bibliotecas de administración de secretos insertadas como Spring Cloud Vault. Seguridad: Las credenciales codificadas de forma dura y los almacenes de secretos específicos del proveedor son muy vulnerables. Las aplicaciones nativas de la nube requieren seguridad centralizada basada en identidades para evitar el robo de credenciales.
cloud-readiness region-configuration Identifica identificadores de región de AWS codificados de forma rígida (aws.region, AWS_REGION) en archivos de código o configuración. Portabilidad: Las zonas geográficas de codificación dura vinculan la aplicación a la infraestructura física de un proveedor específico, lo que dificulta la implementación global y la resistencia.
cloud-readiness storage-migration Detecta el uso del SDK de AWS S3 (cubos, objetos, direcciones URL firmadas previamente), TransferManager S3 y bibliotecas cliente de Google Cloud Storage. Confiabilidad y alineación: Estas dependencias le bloquean en el almacenamiento de objetos de un proveedor y no funcionan con los servicios de almacenamiento nativos de la plataforma de destino.
cloud-readiness messaging-service-migration Marca las dependencias y las cadenas de conexión para Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar y Google Cloud Pub/Sub. Escalabilidad y confiabilidad: Los agentes de mensajería heredados suelen basarse en puntos de conexión fijos y persistencia basada en disco que dificultan el escalado horizontal y la alta disponibilidad en entornos en la nube.
cloud-readiness database-migration Detecta cadenas de conexión, controladores y configuración de tiempo de espera para MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore y Google Cloud Spanner. Confiabilidad: Las bases de datos autoadministradas o no nativas carecen de escalado automatizado en la nube. Los tiempos de espera codificados y los intervalos de reintento fijos pueden provocar bloqueos y "tormentas de reintento" durante interrupciones parciales.
cloud-readiness file-system-management Identifica el uso de rutas de acceso relativas o absolutas, rutas de acceso de inicio (/home/), esquemas file:// y llamadas estándar de E/S de Java IO/NIO o Apache Commons IO para el acceso de almacenamiento local. Sin estado: Los contenedores en la nube son efímeros. La escritura en un sistema de archivos local conduce a la pérdida de datos tras reiniciar o escalar operaciones de instancia; los datos persistentes se deben externalizar.
cloud-readiness local-credential Marca los archivos .jks de Java KeyStore (KeyStore.load), las llamadas a métodos y las contraseñas de texto no cifrado (password, pwd) en los archivos de propiedad o XML. Riesgo de seguridad: El material confidencial almacenado en texto no cifrado o archivos locales se puede poner en peligro fácilmente si los usuarios no autorizados acceden al entorno de la aplicación o a los archivos de configuración.
cloud-readiness configuration-management Detecta System.getenv, System.getProperty, archivos externos .properties/.xml/.ini y acceso al Registro de Windows para la configuración de la aplicación. Externalización: El almacenamiento específico del sistema operativo o los archivos locales no se pueden administrar a escala y no se pueden actualizar dinámicamente sin cambios de código en todas las instancias.
cloud-readiness session-management Identifica el almacenamiento de datos en HttpSession objetos y el uso de la etiqueta "distribuible" en descriptores web. Escalabilidad: Las sesiones HTTP estándar no son adecuadas para el escalado en la nube; el estado debe externalizarse en una caché distribuida para evitar la pérdida de datos durante los desplazamientos de tráfico entre instancias.
cloud-readiness remote-communication Detecta protocolos estrechamente acoplados (CORBA, RMI, JCA), protocolos HTTP/FTP no seguros, API de correo de Java, uso directo del canal de Socket/NIO y direcciones URL codificadas de forma predeterminada. Compatibilidad y seguridad en la nube: Las interacciones estrechamente acopladas dificultan la escalabilidad. Los protocolos no seguros y las direcciones URL codificadas de forma fija son vulnerables y frágiles en entornos de red dinámicos en la nube.
cloud-readiness jakarta-migration Detecta el uso de API específicas de Jakarta/Java EE para NoSQL, JPA, Data, WebSockets y JAX-RS y artefactos específicos del servidor de JBoss EAP, WebLogic o WebSphere. Compatibilidad: La migración a un entorno de ejecución nativo de la nube requiere la alineación con los espacios de nombres modernos de Jakarta y la eliminación de dependencias de servidor de aplicaciones propietarias para garantizar la portabilidad.
cloud-readiness containerization Marca la ausencia de un Dockerfile o instrucciones problemáticas de Dockerfile como apt-get upgrade, sintaxis en minúsculas y problemas de espaciado de sintaxis. Confiabilidad: La estandarización en las compilaciones de contenedores es necesaria para implementaciones estables y reproducibles y para garantizar que las imágenes se comporten de forma predecible en distintos entornos.
cloud-readiness scheduled-job-migration Identifica controladores de AWS Lambda, Google Cloud Functions, dependencias de Quartz Scheduler y flujos de trabajo de Spring Batch. Alineación de proceso en la nube: Los trabajos programados y las funciones sin servidor deben refactorizarse para usar los modelos de proceso sin servidor y controlados por eventos de la nube de destino para reducir la sobrecarga de infraestructura.
cloud-readiness apm-migration Identifica las bibliotecas y agentes de APM insertados para New Relic, Elastic APM y Dynatrace. Observabilidad: Estas herramientas requieren una integración específica de la plataforma en la nube para capturar correctamente datos de telemetría, latencia y estado en un entorno administrado.
cloud-readiness auth-migration Detecta SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, uso de LDAP y patrones de autenticación heredada de formularios web. Identidad moderna: El formato web heredado y la autenticación LDAP carecen de la flexibilidad y las características de seguridad (MFA, SSO) de los proveedores de identidades en la nube modernos basados en notificaciones.
cloud-readiness os-compatibility Identifica las dependencias del proyecto en bibliotecas de Dynamic-Link específicas de Windows (archivos.dll). Portabilidad: Los archivos DLL son específicos del sistema operativo y no se ejecutan en entornos de contenedor en la nube basados en Linux estándar. Debe reemplazarlos por librerías compartidas multiplataforma.

Dominio: java-upgrade

Dominio Categoría Resumen de detección Por qué importa
java-upgrade java-version-upgrade Identifica el uso de versiones de Java que no son LTS (9, 10, 12-16, 19, 20) y versiones heredadas (1.x a 8 y 11). Seguridad y soporte técnico: Las versiones anteriores y no de LTS contienen vulnerabilidades conocidas y carecen de actualizaciones de mantenimiento a largo plazo, lo que deja la infraestructura expuesta a ataques.
java-upgrade framework-upgrade Detecta las versiones de Spring Boot, Spring Cloud, Spring Framework y Jakarta EE que llegaron al final de la compatibilidad con el soporte de software de código abierto. Compatibilidad: Los marcos obsoletos dejan de recibir correcciones de seguridad, lo que hace que la aplicación sea un riesgo de seguridad e incompatible con las herramientas modernas nativas de la nube.
java-upgrade deprecated-apis Cataloga cientos de API eliminadas o en desuso, como sun.misc.BASE64, Thread.stopSecurityManager, métodos y enlaces propietarios de JBoss, Seam 2, WebLogic y WebSphere. Estabilidad y portabilidad: El uso de API eliminadas provoca bloqueos en tiempo de ejecución en JVM modernos. Los hooks propietarios del proveedor (como los internos de WebLogic/JBoss) impiden que la aplicación sea portátil a través de los entornos de ejecución estándar.
java-upgrade build-tool Identifica sistemas de compilación heredados como ant (build.xml) o configuraciones de proyecto específicas de Eclipse (naturalezas WTP/JEM). Automatización: Las herramientas heredadas carecen de las convenciones estándar y la administración de dependencias necesarias para una integración eficaz en canalizaciones modernas de CI/CD.

Dominio: Seguridad (guiada por ISO 5055)

ISO/IEC 5055 es un estándar ISO para medir la estructura interna de un producto de software en cuatro factores críticos para la empresa: Seguridad, Confiabilidad, Eficiencia del rendimiento y Mantenimiento. Estos factores determinan cómo es confiable, confiable y resistente un sistema de software. En esencia, la norma ISO 5055 está pensada para "encontrar y evitar los 8% de defectos que provocan 90% de problemas de producción". ISO 5055 identifica los CWE más críticos e impactantes en cada característica de calidad: Confiabilidad, Eficiencia del rendimiento, Seguridad y Mantenimiento. Para la modernización de GitHub Copilot, detecta contra los CWE seleccionados en la seguridad definida por ISO 5055, como revela la siguiente tabla.

CWE_ID Título Descripción
CWE-22 Limitación incorrecta de un nombre de ruta de acceso a un directorio restringido ('Ruta de acceso transversal') El producto usa la entrada externa para construir un nombre de ruta de acceso destinado a identificar un archivo o directorio debajo de un directorio primario restringido. Sin embargo, no neutraliza correctamente los elementos especiales que pueden hacer que el nombre de ruta de acceso se resuelva fuera del directorio restringido.
CWE-23 Traversal de ruta relativa El producto usa la entrada externa para construir un nombre de ruta dentro de un directorio restringido, pero no puede neutralizar secuencias como .., que pueden resolverse fuera de ese directorio.
CWE-36 Travesía de ruta absoluta El producto usa la entrada externa para construir un nombre de ruta de acceso dentro de un directorio restringido, pero no puede neutralizar secuencias de ruta de acceso absolutas como /abs/path, que pueden resolverse fuera de ese directorio.
CWE-77 Neutralización incorrecta de elementos especiales usados en un comando ('Inyección de comandos') El producto construye un comando utilizando una entrada influenciada desde el exterior, pero no neutraliza los elementos especiales que podrían modificar el comando previsto enviado a un componente posterior.
CWE-78 Neutralización incorrecta de elementos especiales usados en un comando del sistema operativo (inyección de comandos del sistema operativo) El producto construye un comando de OS mediante la entrada influida externamente, pero no puede neutralizar elementos especiales que podrían modificar el comando de OS previsto enviado a un componente posterior.
CWE-88 Neutralización incorrecta de delimitadores de argumentos en un comando ('Inyección de argumentos') El producto crea una cadena de comandos para un componente independiente, pero no delimita correctamente argumentos, opciones o modificadores dentro de esa cadena.
CWE-79 Neutralización incorrecta de la entrada durante la generación de páginas web ("Scripting entre sitios") El producto no puede neutralizar la entrada controlable por el usuario antes de colocarla en la salida utilizada como página web para otros usuarios.
CWE-89 Neutralización incorrecta de elementos especiales usados en un comando SQL ("inyección de CÓDIGO SQL") El producto construye un comando SQL mediante la entrada influenciada externamente, pero no puede neutralizar los elementos que podrían modificar el comando, lo que permite interpretar las entradas como sintaxis SQL en lugar de datos normales.
CWE-564 Inyección de CÓDIGO SQL: hibernación El uso de Hibernate para ejecutar instrucciones SQL dinámicas creadas con entrada controlada por el usuario puede permitir que un atacante modifique el significado de la instrucción o ejecute comandos SQL arbitrarios.
CWE-90 Neutralización incorrecta de elementos especiales usados en una consulta LDAP ("inyección LDAP") El producto construye una consulta LDAP utilizando entrada influida externamente, pero no logra neutralizar los elementos que podrían modificar la consulta prevista enviada a un componente aguas abajo.
CWE-91 Inyección XML (también conocida como inyección de XPath ciega) El producto no neutraliza correctamente los elementos especiales usados en XML, lo que permite a los atacantes modificar la sintaxis, el contenido o los comandos antes del procesamiento.
CWE-99 Control incorrecto de identificadores de recursos ("Inyección de recursos") El producto recibe la entrada, pero no lo restringe correctamente antes de usarlo como identificador para un recurso fuera de la esfera de control prevista.
CWE-130 Manejo inapropiado de la inconsistencia del parámetro de longitud El producto analiza un mensaje o estructura con formato, pero controla incorrectamente un campo de longitud incoherente con la longitud real de los datos asociados.
CWE-259 Uso de contraseña codificada de forma rígida El producto contiene una contraseña codificada de forma rígida que se usa para su propia autenticación de entrada o comunicación saliente a componentes externos.
CWE-321 Uso de clave criptográfica codificada de forma rígida El producto usa una clave criptográfica codificada de forma rígida e inmutable.
CWE-434 Carga sin restricciones de archivo con tipo peligroso El producto permite la carga de tipos de archivo peligrosos que se procesan automáticamente dentro de su entorno.
CWE-456 Falta la inicialización de una variable El producto no inicializa variables críticas, lo que hace que el entorno de ejecución use valores inesperados.
CWE-457 Uso de una variable sin inicializar El código usa una variable que no se inicializa, lo que conduce a resultados imprevisibles o no deseados.
CWE-477 Uso de la función obsoleta El código usa funciones obsoletas o en desuso, lo que sugiere que no se revisa ni mantiene activamente.
CWE-502 Deserialización de datos no fiables El producto deserializa los datos que no son de confianza sin asegurarse de que los datos resultantes sean válidos.
CWE-543 Uso del patrón Singleton sin sincronización en un contexto multiproceso El producto usa el patrón singleton al crear un recurso dentro de un entorno multiproceso sin una sincronización adecuada.
CWE-567 Acceso no sincronizado a datos compartidos en un contexto multiproceso El producto no puede sincronizar correctamente los datos compartidos, como variables estáticas, entre subprocesos, lo que provoca un comportamiento indefinido.
CWE-570 La expresión es Siempre Falsa El producto contiene una expresión que siempre se evalúa como falso.
CWE-571 La expresión es siempre verdadera El producto contiene una expresión que siempre se evalúa como verdadero.
CWE-606 Condición de bucle con entrada no verificada El producto no comprueba correctamente las entradas usadas para las condiciones del bucle, lo que podría provocar una denegación de servicio debido a bucles excesivos.
CWE-643 Neutralización incorrecta de datos dentro de expresiones XPath ("Inyección de XPath") El producto usa entradas externas para construir dinámicamente una expresión XPath para una base de datos XML, pero no puede neutralizar esa entrada.
CWE-652 Neutralización incorrecta de los datos dentro de expresiones XQuery ("Inyección de XQuery") El producto usa la entrada externa para construir dinámicamente una expresión XQuery, pero no puede neutralizar correctamente esa entrada.
CWE-662 Sincronización incorrecta El producto permite que varios subprocesos o sistemas accedan a un recurso compartido sin una sincronización adecuada, lo que podría provocar problemas de acceso simultáneo.
CWE-665 Inicialización incorrecta El producto no inicializa ni inicializa incorrectamente un recurso, lo que podría dejarlo en un estado inesperado cuando se accede a él.
CWE-667 Bloqueo incorrecto El producto no adquiere o libera correctamente un bloqueo en un recurso, lo que conduce a cambios de estado inesperados.
CWE-672 Operación en un recurso después de la expiración o liberación El producto accede o opera en un recurso después de que haya expirado, haya sido liberado o haya sido revocado.
CWE-681 Conversión incorrecta entre tipos numéricos Los datos se pueden omitir o traducir en valores inesperados durante la conversión de tipos, lo que puede ser peligroso si se usa en contextos confidenciales.
CWE-682 Cálculo incorrecto El producto realiza un cálculo que genera resultados incorrectos que se usan más adelante en decisiones críticas para la seguridad o administración de recursos.
CWE-732 Asignación de permisos incorrecta para el recurso crítico Los permisos para un recurso crítico para la seguridad se especifican de una manera que permite a los actores no deseados leerlo o modificarlo.
CWE-772 Falta la liberación del recurso después de su vida útil El producto no libera un recurso una vez finalizada su vigencia efectiva y ya no es necesario.
CWE-775 Falta la liberación del descriptor de archivo o del identificador después de su vida útil efectiva El producto no logra liberar un descriptor de archivo o un identificador cuando ya no es necesario.
CWE-778 Registro insuficiente El producto no puede registrar un evento crítico para la seguridad o omitir detalles importantes al registrarlo.
CWE-783 Error de lógica de precedencia del operador Una expresión usa una lógica incorrecta causada por la precedencia del operador.
CWE-789 Asignación de memoria con un valor de tamaño excesivo El producto asigna memoria basada en un valor de tamaño grande que no es de confianza sin asegurarse de que está dentro de los límites esperados.
CWE-798 Uso de credenciales codificadas de forma rígida El producto contiene credenciales codificadas de forma rígida, como una contraseña o una clave criptográfica.
CWE-820 Falta sincronización El producto utiliza un recurso compartido simultáneamente sin intentar sincronizar el acceso.
CWE-821 Sincronización incorrecta El producto utiliza un recurso compartido simultáneamente, pero no sincroniza correctamente el acceso.
CWE-835 Bucle con condición de salida inaccesible ("Bucle infinito") El producto contiene una iteración o bucle con una condición de salida que no se puede alcanzar.
CWE-611 Restricción inadecuada de la referencia de entidad externa XML El producto procesa documentos XML que contienen entidades con URI que se resuelven fuera de la esfera de control prevista.
CWE-1057 Operaciones de acceso a datos fuera del componente esperado de Data Manager El producto realiza operaciones de acceso a datos que omiten un componente de administrador de datos central dedicado que requiere el diseño.

Pasos siguientes