Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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. |