Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
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. |