Partager via


Comprendre la couverture de l’évaluation par la modernisation de GitHub Copilot

Cet article décrit ce que la fonctionnalité d’évaluation des applications de la modernisation de GitHub Copilot peut détecter. L’évaluation couvre deux fonctionnalités clés :

  • Détection des problèmes dans trois domaines essentiels à votre parcours de modernisation :

    • Préparation du cloud : identifie 16 catégories de préoccupations, notamment l’utilisation du système de fichiers, la gestion des informations d’identification, les services de messagerie, les connexions de base de données, les lacunes de conteneurisation, la gestion des sessions, les modèles de communication à distance, etc.
    • Mise à niveau Java : signale les versions java obsolètes, les infrastructures de prise en charge de bout en bout de OSS (Spring Boot, Spring Cloud, Jakarta EE), des centaines d’API supprimées ou dépréciées et des outils de génération hérités tels que Ant.
    • Sécurité : détecte 42 faiblesses de sécurité tirées de la norme ISO/IEC 5055, couvrant les vulnérabilités d’injection (SQL, LDAP, XPath, commande du système d’exploitation), les informations d’identification codées en dur et les clés de chiffrement, les problèmes de synchronisation, les problèmes de cycle de vie des ressources et d’autres éléments DEF à impact élevé.
  • Compréhension de l’application : pour les bases de code héritées, l’évaluation expose les dépendances et les technologies en cours d’utilisation. Vous obtenez donc une image claire de ce que votre application s’appuie avant de commencer à migrer.

Les sections suivantes décrivent la couverture des problèmes pour chaque domaine en détail.

Domaine : préparation du cloud

Domaine Catégorie Résumé de la détection Pourquoi cela importe
cloud-readiness credential-migration Détecte les informations d’identification AWS codées en dur (aws_access_key_id, aws_secret_access_key), l’utilisation du Gestionnaire des secrets AWS et les bibliothèques de gestion des secrets incorporées comme Spring Cloud Vault. Sécurité: Les informations d’identification codées en dur et les stockages secrets spécifiques au fournisseur sont très vulnérables. Les applications natives cloud nécessitent une sécurité centralisée basée sur l’identité pour empêcher le vol d’informations d’identification.
cloud-readiness region-configuration Identifie les identificateurs de région AWS codés en dur (aws.region, AWS_REGION) dans le code ou les fichiers de configuration. Portabilité: Les zones géographiques de codage en dur relient l’application à l’infrastructure physique d’un fournisseur spécifique, ce qui entrave le déploiement et la résilience globaux.
cloud-readiness storage-migration Détecte l’utilisation du Kit de développement logiciel (SDK) AWS S3 (compartiments, objets, URL pré-signées), S3 TransferManager et bibliothèques clientes Google Cloud Storage. Fiabilité & Alignement : Ces dépendances vous verrouillent dans le stockage d’objets d’un fournisseur et ne fonctionnent pas avec les services de stockage natifs de la plateforme cible.
cloud-readiness messaging-service-migration Signale les dépendances et les chaînes de connexion pour Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar et Google Cloud Pub/Sub. Scalabilité et fiabilité : Les répartiteurs de messagerie hérités s’appuient souvent sur des points de terminaison fixes et une persistance sur disque qui entravent la mise à l’échelle horizontale et la haute disponibilité dans les environnements cloud.
cloud-readiness database-migration Détecte les chaînes de connexion, les pilotes et les paramètres de délai d’expiration pour MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore et Google Cloud Spanner. Fiabilité: Les bases de données auto-gérées ou non natives ne disposent pas d’une mise à l’échelle automatisée du cloud. Les délais d’attente codés en dur et les intervalles de nouvelles tentatives fixes peuvent entraîner des blocages et des « tempêtes de nouvelles tentatives » pendant les pannes partielles.
cloud-readiness file-system-management Identifie l’utilisation de chemins relatifs/absolus, de chemins d'origine (/home/), schémas file://, et d’appels standard de Java IO/NIO ou d'Apache Commons IO pour l’accès au stockage local. Apatridie: Les conteneurs cloud sont éphémères. L’écriture dans un système de fichiers local entraîne une perte de données lors des redémarrages ou des opérations de mise à l’échelle de l’instance ; les données persistantes doivent être externalisées.
cloud-readiness local-credential Signale les fichiers .jks Java KeyStore (KeyStore.load), les appels de méthode et les mots de passe en texte clair (password, pwd) dans les fichiers de propriété ou XML. Risque de sécurité : Les documents sensibles stockés dans du texte clair ou des fichiers locaux peuvent être facilement compromis si des personnes non autorisées accèdent à l’environnement d’application ou aux fichiers de configuration.
cloud-readiness configuration-management System.getenvDétecte , , fichiers System.getPropertyexternes .properties/.xml/.ini et accès au Registre Windows pour les paramètres d’application. Externalisation: Le stockage ou les fichiers locaux spécifiques au système d’exploitation ne sont pas gérables à grande échelle et ne peuvent pas être mis à jour dynamiquement sans modification du code sur toutes les instances.
cloud-readiness session-management Identifie le stockage des données dans les HttpSession objets et l’utilisation de la balise « distribuable » dans les descripteurs web. Évolutivité: Les sessions HTTP standard ne conviennent pas à la mise à l’échelle du cloud ; l’état doit être externalisé vers un cache distribué pour empêcher la perte de données pendant les décalages de trafic entre les instances.
cloud-readiness remote-communication Détecte les protocoles étroitement couplés (CORBA, RMI, JCA), les protocoles HTTP/FTP non sécurisés, l’API Messagerie Java, l’utilisation directe du canal Socket/NIO et les URL codées en dur. Compatibilité du cloud & Sécurité : Les interactions étroitement couplées empêchent l’extensibilité. Les protocoles non sécurisés et les URL codées en dur sont vulnérables et fragiles dans les environnements réseau cloud dynamiques.
cloud-readiness jakarta-migration Détecte l’utilisation des API spécifiques à Jakarta/Java EE pour NoSQL, JPA, Data, WebSockets et JAX-RS et des artefacts spécifiques au serveur à partir de JBoss EAP, WebLogic ou WebSphere. Prise en charge : La migration vers un runtime natif cloud nécessite l’alignement avec les espaces de noms Jakarta modernes et la suppression des dépendances de serveur d’applications propriétaires pour garantir la portabilité.
cloud-readiness containerization Signale l’absence d’un fichier Dockerfile ou d’instructions Dockerfile problématiques telles que apt-get upgradela syntaxe minuscule et les problèmes d’espacement de syntaxe. Fiabilité: La normalisation dans les builds de conteneurs est requise pour les déploiements stables et reproductibles et pour garantir que les images se comportent de manière prévisible dans différents environnements.
cloud-readiness scheduled-job-migration Identifie les gestionnaires AWS Lambda, les fonctions Google Cloud, les dépendances de l'ordonnanceur Quartz et les workflows de traitement Spring Batch. Alignement du calcul cloud : Les travaux planifiés et les fonctions serverless doivent être refactorisés pour utiliser les modèles de calcul événementiels et serverless du cloud cible afin de réduire la surcharge de l'infrastructure.
cloud-readiness apm-migration Identifie les agents et bibliothèques APM incorporés pour New Relic, Elastic APM et Dynatrace. Observabilité: Ces outils nécessitent une intégration spécifique de la plateforme cloud pour capturer correctement les données de télémétrie, de latence et de santé du système dans un environnement géré.
cloud-readiness auth-migration Détecte SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, utilisation LDAP et modèles d’authentification de formulaire web hérités. Identité moderne : Les formulaires web et l’authentification LDAP hérités ne disposent pas de la flexibilité et des fonctionnalités de sécurité (authentification multifactorielle, SSO) des fournisseurs d’identité cloud modernes basés sur les assertions.
cloud-readiness os-compatibility Identifie les dépendances de projet sur les bibliothèques de Dynamic-Link spécifiques à Windows (fichiers.dll). Portabilité: Les DLL sont spécifiques au système d’exploitation et ne s’exécutent pas dans des environnements de conteneur cloud linux standard. Vous devez les remplacer par des bibliothèques partagées multiplateformes.

Domaine : java-upgrade

Domaine Catégorie Résumé de la détection Pourquoi cela importe
java-upgrade java-version-upgrade Identifie l’utilisation des versions java non LTS (9, 10, 12-16, 19, 20) et les versions héritées (1.x à 8 et 11). Sécurité & Prise en charge : Les versions antérieures et non LTS contiennent des vulnérabilités connues et manquent de mises à jour de maintenance à long terme, laissant l’infrastructure exposée aux attaques.
java-upgrade framework-upgrade Détecte les versions de Spring Boot, Spring Cloud, Spring Framework et Jakarta EE qui ont atteint la fin de la prise en charge du support open-source. Prise en charge : Les infrastructures obsolètes arrêtent de recevoir des correctifs de sécurité, ce qui rend l’application un risque de sécurité et incompatible avec les outils cloud natifs modernes.
java-upgrade deprecated-apis Catalogue des centaines d'API supprimées ou déconseillées, notamment les méthodes sun.misc.BASE64, Thread.stop et SecurityManager, ainsi que les crochets propriétaires de JBoss, Seam 2, WebLogic et WebSphere. Stabilité et portabilité : L’utilisation d’API supprimées provoque des blocages du runtime sur des machines virtuelles JV modernes. Les hooks de fournisseurs propriétaires (tels que les internes de WebLogic/JBoss) empêchent l’application d’être portable sur les environnements d'exécution standard.
java-upgrade build-tool Identifie les systèmes de build hérités tels que Ant (build.xml) ou les configurations de projet spécifiques à Eclipse (natures WTP/JEM). Automatisation: Les outils hérités ne disposent pas des conventions standard et de la gestion des dépendances nécessaires pour une intégration efficace dans des pipelines CI/CD modernes.

Domaine : Sécurité (ISO 5055 guidé)

ISO/IEC 5055 est une norme ISO permettant de mesurer la structure interne d’un produit logiciel sur quatre facteurs critiques pour l’entreprise : sécurité, fiabilité, efficacité des performances et maintenance. Ces facteurs déterminent la fiabilité, la fiabilité et la résilience d’un système logiciel. En essence, ISO 5055 est destiné à « trouver et empêcher les 8% des défauts qui provoquent 90% de problèmes de production ». ISO 5055 identifie les CWE les plus critiques et les plus impactants sous chaque caractéristique de qualité : fiabilité, efficacité des performances, sécurité et maintenabilité. Pour la modernisation de GitHub Copilot, vous détectez contre les CWE sélectionnés concernant la sécurité définie dans l'ISO 5055, comme le montre le tableau suivant.

CWE_ID Titre Description
CWE-22 Limitation incorrecte d’un nom de chemin d’accès à un répertoire restreint ('Traversée de répertoire') Le produit utilise une entrée externe pour construire un chemin d’accès destiné à identifier un fichier ou un répertoire sous un répertoire parent restreint. Mais il ne neutralise pas correctement les éléments spéciaux qui peuvent provoquer la résolution du chemin d’accès en dehors du répertoire restreint.
CWE-23 Chemin relatif de traversée Le produit utilise une entrée externe pour construire un chemin d'accès dans un répertoire restreint, mais il ne parvient pas à neutraliser des séquences telles que .., qui peuvent permettre l'accès en dehors de ce répertoire.
CWE-36 Traversée de chemin d’accès absolu Le produit utilise une entrée externe pour construire un chemin d’accès au sein d’un répertoire restreint, mais ne parvient pas à neutraliser des séquences de chemin d’accès absolues comme /abs/path, ce qui peut entraîner une résolution en dehors de ce répertoire.
CWE-77 Neutralisation incorrecte des éléments spéciaux utilisés dans une commande ('Injection de commande') Le produit construit une commande à l’aide d’une entrée influencée par l’extérieur, mais ne neutralise pas les éléments spéciaux susceptibles de modifier la commande prévue envoyée à un composant en aval.
CWE-78 Neutralisation incorrecte des éléments spéciaux utilisés dans une commande de système d’exploitation ('Injection de commandes du système d’exploitation') Le produit construit une commande de système d’exploitation à l’aide d’une entrée influencée par l’extérieur, mais ne parvient pas à neutraliser des éléments spéciaux susceptibles de modifier la commande de système d’exploitation prévue envoyée à un composant en aval.
CWE-88 Neutralisation incorrecte des délimiteurs d’arguments dans une commande ('Injection d’argument') Le produit construit une chaîne de commande pour un composant distinct, mais ne délimite pas correctement les arguments, les options ou les commutateurs de cette chaîne.
CWE-79 Neutralisation incorrecte de l’entrée pendant la génération de pages web ('Script intersites') Le produit ne parvient pas à neutraliser l’entrée contrôlable par l’utilisateur avant de la placer dans la sortie utilisée comme page web servie à d’autres utilisateurs.
CWE-89 Neutralisation incorrecte des éléments spéciaux utilisés dans une commande SQL ('Injection SQL') Le produit construit une commande SQL à l’aide d’une entrée influencée en externe, mais ne parvient pas à neutraliser les éléments susceptibles de modifier la commande, ce qui permet aux entrées d’être interprétées comme une syntaxe SQL au lieu de données ordinaires.
CWE-564 Injection SQL : mise en veille prolongée L’utilisation de Hibernate pour exécuter des instructions SQL dynamiques générées avec une entrée contrôlée par l’utilisateur peut permettre à un attaquant de modifier la signification de l’instruction ou d’exécuter des commandes SQL arbitraires.
CWE-90 Neutralisation incorrecte des éléments spéciaux utilisés dans une requête LDAP ('Injection LDAP') Le produit construit une requête LDAP à l’aide d’une entrée influencée en externe, mais ne parvient pas à neutraliser les éléments susceptibles de modifier la requête prévue envoyée à un composant en aval.
CWE-91 Injection XML (également appelée injection XPath aveugle) Le produit ne neutralise pas correctement les éléments spéciaux utilisés dans XML, ce qui permet aux attaquants de modifier la syntaxe, le contenu ou les commandes avant le traitement.
CWE-99 Contrôle incorrect des identificateurs de ressources ('Injection de ressources') Le produit reçoit une entrée, mais ne le limite pas correctement avant de l’utiliser comme identificateur pour une ressource en dehors de la sphère de contrôle prévue.
CWE-130 Gestion incorrecte de l’incohérence des paramètres de longueur Le produit analyse un message ou une structure mis en forme, mais gère incorrectement un champ de longueur incohérent avec la longueur réelle des données associées.
CWE-259 Utilisation du mot de passe codé en dur Le produit contient un mot de passe codé en dur utilisé pour son propre authentification entrante ou communication sortante vers des composants externes.
CWE-321 Utilisation de la clé de chiffrement codée en dur Le produit utilise une clé de chiffrement codée en dur et non modifiable.
CWE-434 Téléversement non restreint de fichiers avec un type dangereux Le produit permet le chargement de types de fichiers dangereux qui sont automatiquement traités dans son environnement.
CWE-456 Initialisation manquante d’une variable Le produit n’initialise pas les variables critiques, ce qui entraîne l’utilisation de valeurs inattendues dans l’environnement d’exécution.
CWE-457 Utilisation d’une variable non initialisée Le code utilise une variable qui n’est pas initialisée, ce qui entraîne des résultats imprévisibles ou inattendus.
CWE-477 Utilisation de la fonction obsolète Le code utilise des fonctions déconseillées ou obsolètes, ce qui suggère qu’il n’est pas examiné ou géré activement.
CWE-502 Désérialisation des données non fiables Le produit désérialise les données non approuvées sans s’assurer que les données résultantes sont valides.
CWE-543 Utilisation du modèle Singleton dans un contexte multithread sans synchronisation Le produit utilise le modèle singleton lors de la création d’une ressource dans un environnement multithread sans synchronisation appropriée.
CWE-567 Accès non synchronisé aux données partagées dans un contexte multithreadé Le produit ne parvient pas à synchroniser correctement les données partagées, telles que les variables statiques, entre les threads, ce qui entraîne un comportement non défini.
CWE-570 L’expression est toujours fausse Le produit contient une expression qui prend toujours la valeur false.
CWE-571 L'expression est toujours vraie. Le produit contient une expression qui prend toujours la valeur true.
CWE-606 Entrée non cochée pour la condition de boucle Le produit ne vérifie pas correctement les entrées utilisées pour les conditions de boucle, ce qui peut entraîner un déni de service à cause d’un bouclage excessif.
CWE-643 Neutralisation incorrecte des données dans les expressions XPath ('Injection XPath') Le produit utilise une entrée externe pour construire dynamiquement une expression XPath pour une base de données XML, mais ne parvient pas à neutraliser cette entrée.
CWE-652 Neutralisation incorrecte des données dans les expressions XQuery ('Injection de XQuery') Le produit utilise une entrée externe pour construire dynamiquement une expression XQuery, mais ne parvient pas à neutraliser correctement cette entrée.
CWE-662 Synchronisation incorrecte Le produit permet à plusieurs threads ou systèmes d’accéder à une ressource partagée sans synchronisation appropriée, ce qui peut entraîner des problèmes d’accès simultanés.
CWE-665 Initialisation incorrecte Le produit n’initialise pas ou initialise incorrectement une ressource, ce qui risque de le laisser dans un état inattendu lors de l’accès.
CWE-667 Verrouillage incorrect Le produit n’acquiert pas ou ne libère pas correctement un verrou sur une ressource, ce qui entraîne des modifications d’état inattendues.
CWE-672 Opération sur une ressource après expiration ou libération Le produit accède ou fonctionne sur une ressource après son expiration, a été libéré ou révoqué.
CWE-681 Conversion incorrecte entre les types numériques Les données peuvent être omises ou traduites en valeurs inattendues pendant la conversion de type, ce qui peut être dangereux si elles sont utilisées dans des contextes sensibles.
CWE-682 Calcul incorrect Le produit effectue un calcul qui génère des résultats incorrects ultérieurement utilisés dans les décisions critiques de sécurité ou la gestion des ressources.
CWE-732 Affectation d’autorisations incorrecte pour la ressource critique Les autorisations d’une ressource critique pour la sécurité sont spécifiées de manière à permettre aux acteurs involontaires de lire ou de le modifier.
CWE-772 Libération manquante de la ressource après la durée de vie utile Le produit ne libère pas de ressource après la fin de sa durée de vie effective et il n’est plus nécessaire.
CWE-775 Mise en production manquante du descripteur de fichier ou du handle après la durée de vie effective Le produit ne parvient pas à libérer un descripteur de fichier ou un manipulateur après qu'ils ne sont plus nécessaires.
CWE-778 Journalisation insuffisante Le produit ne parvient pas à enregistrer un événement critique de sécurité ou omet les détails importants lors de la journalisation.
CWE-783 Erreur de logique de priorité des opérateurs Une expression utilise une logique incorrecte provoquée par la précédence de l’opérateur.
CWE-789 Allocation de mémoire avec une valeur de taille excessive Le produit alloue de la mémoire en fonction d’une valeur de taille non approuvée et volumineuse sans s’assurer qu’elle se trouve dans les limites attendues.
CWE-798 Utilisation des informations d’identification codées en dur Le produit contient des informations d’identification codées en dur, telles qu’un mot de passe ou une clé de chiffrement.
CWE-820 Synchronisation manquante Le produit utilise simultanément une ressource partagée sans tenter de synchroniser l’accès.
CWE-821 Synchronisation incorrecte Le produit utilise une ressource partagée simultanément, mais ne synchronise pas correctement l’accès.
CWE-835 Boucle avec condition de sortie inaccessible ('Boucle infinie') Le produit contient une itération ou une boucle avec une condition de sortie qui ne peut pas être atteinte.
CWE-611 Restriction incorrecte de la référence d’entité externe XML Le produit traite des documents XML contenant des entités dont les URI se résolvent en dehors de la sphère de contrôle initialement prévue.
CWE-1057 Opérations d’accès aux données en dehors du composant Data Manager attendu Le produit effectue des opérations d’accès aux données qui contournent un composant de gestionnaire de données central dédié requis par la conception.

Étapes suivantes