Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo descreve o que a funcionalidade de avaliação de aplicações da modernização do GitHub Copilot pode detetar. A avaliação abrange duas capacidades principais:
Deteção de problemas em três domínios críticos para a sua jornada de modernização:
- Prontidão para a cloud: Identifica 16 categorias de preocupações, incluindo utilização do sistema de ficheiros, gestão de credenciais, serviços de mensagens, ligações à base de dados, lacunas de containerização, gestão de sessões, padrões de comunicação remota e mais.
- Atualização do Java: Sinaliza versões desatualizadas do Java, frameworks de suporte ao fim do OSS (Spring Boot, Spring Cloud, Jakarta EE), centenas de APIs removidas ou obsoletas, e ferramentas de compilação legadas como o Ant.
- Security: Detete problemas de segurança de duas formas complementares: conclusões guiadas pela ISO/IEC 5055 CWE no seu código-fonte (vulnerabilidades de injeção, credenciais codificadas fixamente e chaves criptográficas, problemas de sincronização, problemas no ciclo de vida dos recursos e outros CWEs de alto impacto) e vulnerabilidades CVE nas suas dependências diretas e transitivas de terceiros, proveniente da base de dados GitHub Security Advisories.
Compreensão da aplicação: para bases de código legadas, a avaliação revela dependências e tecnologias em uso, para que tenhas uma visão clara do que a tua aplicação depende antes de começares a migrar.
As secções seguintes descrevem em detalhe a cobertura das questões para cada domínio.
Domínio: prontidão para a nuvem
| Domain | Categoria | Resumo da deteção | Por que é importante |
|---|---|---|---|
cloud-readiness |
credential-migration |
Deteta credenciais AWS codificadas fixamente (aws_access_key_id, aws_secret_access_key), utilização do AWS Secrets Manager e bibliotecas de gestão de segredos embutidas como o Spring Cloud Vault. |
Segurança: Credenciais codificadas e lojas secretas específicas de fornecedores são altamente vulneráveis. As aplicações cloud-native requerem segurança centralizada baseada em identidade para evitar o roubo de credenciais. |
cloud-readiness |
region-configuration |
Identifica identificadores de região AWS codificados fixamente (aws.region, AWS_REGION) em ficheiros de código ou de configuração. |
Portabilidade: A codificação geográfica fixa liga a aplicação à infraestrutura física de um fornecedor específico, dificultando a implementação global e a resiliência. |
cloud-readiness |
storage-migration |
Detecta o uso do AWS S3 SDK (buckets, objetos, URLs pré-assinados), S3 TransferManager e bibliotecas de cliente do Google Cloud Storage. | Fiabilidade e Alinhamento: Estas dependências prendem-no ao armazenamento de objetos de um fornecedor e não funcionam com os serviços nativos de armazenamento da plataforma alvo. |
cloud-readiness |
messaging-service-migration |
Sinaliza dependências e cadeias de ligação para Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar e Google Cloud Pub/Sub. | Escalabilidade e Fiabilidade: Os brokers de mensagens legados dependem frequentemente de endpoints fixos e persistência baseada em disco, o que dificulta a escalabilidade horizontal e a elevada disponibilidade em ambientes cloud. |
cloud-readiness |
database-migration |
Deteta strings de ligação, drivers e definições de timeout para MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore e Google Cloud Spanner. | Fiabilidade: Bases de dados autogeridas ou não nativas não possuem escalabilidade automatizada na cloud. Timeouts embutidos e intervalos fixos para novas tentativas podem causar bloqueios e "tempestades de tentativas de nova execução" durante interrupções parciais. |
cloud-readiness |
file-system-management |
Identifica a utilização de caminhos relativos ou absolutos, caminhos iniciais (/home/), esquemas file:// e chamadas padrão Java IO/NIO ou Apache Commons IO para acesso local ao armazenamento. |
Ausência de estado: Os recipientes de nuvem são efémeros. A escrita num sistema de ficheiros local leva à perda de dados ao reiniciar a instância ou operações de escalabilidade; os dados persistentes devem ser externalizados. |
cloud-readiness |
local-credential |
Sinaliza ficheiros Java KeyStore (.jks), chamadas de método (KeyStore.load) e palavras-passe em texto claro (password, pwd) em ficheiros de propriedades ou XML. |
Risco de Segurança: Material sensível armazenado em texto claro ou ficheiros locais pode ser facilmente comprometido se indivíduos não autorizados acedirem ao ambiente da aplicação ou aos ficheiros de configuração. |
cloud-readiness |
configuration-management |
Deteta System.getenv, System.getProperty, ficheiros externos .properties/.xml/.ini e o acesso ao Registo do Windows para as definições da aplicação. |
Externalização: O armazenamento específico do sistema operativo ou ficheiros locais não são geríveis em larga escala e não podem ser atualizados dinamicamente sem alterações de código em todas as instâncias. |
cloud-readiness |
session-management |
Identifica o armazenamento de dados em HttpSession objetos e o uso da etiqueta "distributable" em descritores web. |
Escalabilidade: As sessões HTTP padrão não são adequadas para escalonamento na nuvem; O estado deve ser externalizado para uma cache distribuída para evitar a perda de dados durante as mudanças de tráfego entre instâncias. |
cloud-readiness |
remote-communication |
Deteta protocolos fortemente acoplados (CORBA, RMI, JCA), protocolos HTTP/FTP não seguros, API Java Mail, uso direto de canais Socket/NIO e URLs codificados fixamente. | Compatibilidade e Segurança na Cloud: Interações fortemente acopladas dificultam a escalabilidade. Protocolos não seguros e URLs codificados são vulneráveis e frágeis em ambientes de rede de cloud dinâmicos. |
cloud-readiness |
jakarta-migration |
Deteta o uso de APIs específicas de Jacarta/Java EE para NoSQL, JPA, Data, WebSockets e JAX-RS, bem como artefactos específicos de servidor provenientes do JBoss EAP, WebLogic ou WebSphere. | Suportabilidade: Migrar para um runtime cloud-native requer alinhar-se com os namespaces modernos de Jacarta e remover dependências proprietárias de servidores de aplicações para garantir portabilidade. |
cloud-readiness |
containerization |
Sinaliza a ausência de um Dockerfile ou instruções problemáticas no Dockerfile como apt-get upgrade, sintaxe minúscula e problemas de espaçamento de sintaxe. |
Fiabilidade: A padronização nas construções de contentores é necessária para implementações estáveis e reprodutíveis e para garantir que as imagens se comportam de forma previsível em diferentes ambientes. |
cloud-readiness |
scheduled-job-migration |
Identifica manipuladores AWS Lambda, funções do Google Cloud, dependências do Quartz Scheduler e fluxos de trabalho de processamento do Spring Batch. | Alinhamento de Computação em Nuvem: Tarefas agendadas e funções sem servidor devem ser refatoradas para utilizar os modelos de computação event-driven e sem servidor da nuvem alvo, reduzindo a sobrecarga da infraestrutura. |
cloud-readiness |
apm-migration |
Identifica agentes e bibliotecas APM embutidos para New Relic, Elastic APM e Dynatrace. | Observabilidade: Estas ferramentas requerem integração específica com plataforma cloud para capturar corretamente dados de telemetria, latência e saúde num ambiente gerido. |
cloud-readiness |
auth-migration |
Detecta padrões de autenticação SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, LDAP e autenticação legada de formulários web. | Identidade Moderna: Formulários web legados e autenticação LDAP carecem da flexibilidade e das funcionalidades de segurança (MFA, SSO) dos modernos fornecedores de identidade na nuvem baseados em declarações. |
cloud-readiness |
os-compatibility |
Identifica dependências de projetos em bibliotecas Dynamic-Link específicas do Windows (ficheiros.dll). | Portabilidade: As DLLs são específicas do sistema operativo e não funcionam em ambientes padrão de contentores baseados em Linux. Precisa de as substituir por bibliotecas partilhadas multiplataforma. |
Domínio: java-upgrade
| Domain | Categoria | Resumo da deteção | Por que é importante |
|---|---|---|---|
java-upgrade |
java-version-upgrade |
Identifica a utilização de versões Java não-LTS (9, 10, 12-16, 19, 20) e versões legadas (1.x a 8 e 11). | Segurança e Suporte: Versões mais antigas e não LTS contêm vulnerabilidades conhecidas e carecem de atualizações de manutenção a longo prazo, deixando a infraestrutura exposta a ataques. |
java-upgrade |
framework-upgrade |
Detete versões do Spring Boot, Spring Cloud, Spring Framework e Jakarta EE que atingiram o fim do suporte OSS. | Suportabilidade: Frameworks desatualizados deixam de receber correções de segurança, tornando a aplicação um risco de segurança e incompatível com as ferramentas modernas nativas da cloud. |
java-upgrade |
deprecated-apis |
Cataloga centenas de APIs removidas ou obsoletas, incluindo sun.misc.BASE64, Thread.stop, SecurityManager métodos e hooks proprietários do JBoss, Seam 2, WebLogic e WebSphere. |
Estabilidade e Portabilidade: Usar APIs removidas causa crashes em tempo de execução nas JVMs modernas. Ganchos proprietários de fornecedores (como as integrações internas de WebLogic/JBoss) impedem que a aplicação seja portátil em ambientes de execução padrão. |
java-upgrade |
build-tool |
Identifica sistemas de compilação legados como Ant (build.xml) ou configurações específicas de projetos Eclipse (naturezas WTP/JEM). |
Automação: As ferramentas legadas carecem das convenções padrão e da gestão de dependências necessárias para uma integração eficiente em pipelines modernos de CI/CD. |
Domínio: Segurança (guiado ISO 5055)
O domínio da segurança abrange dois tipos de questões complementares:
- Conclusões do CWE no seu código-fonte, guiadas pela ISO/IEC 5055.
- Constatações de CVE nas suas dependências de terceiros, incluindo dependências transitivas.
Cobertura CWE (orientada pela ISO/IEC 5055)
ISO/IEC 5055 é uma norma ISO para medir a estrutura interna de um produto de software com base em quatro fatores críticos para o negócio: Segurança, Fiabilidade, Eficiência de Desempenho e Manutenibilidade. Estes fatores determinam quão fiável, fiável e resiliente é um sistema de software. Em essência, a ISO 5055 destina-se a "encontrar e prevenir os 8% de falhas que causam 90% de problemas de produção". A ISO 5055 identifica os CWEs mais críticos e impactantes sob cada característica de qualidade: Fiabilidade, Desempenho e Eficiência, Segurança e Manutenibilidade. Para a modernização do GitHub Copilot, verifica-se contra os CWEs selecionados relacionados com segurança definidos na ISO 5055, como revela a tabela seguinte.
| CWE_ID | Título | Descrição |
|---|---|---|
CWE-22 |
Limitação Indevida de um Nome de Caminho a uma Directoria Restrita ('Traversal de Caminho') | O produto utiliza entrada externa para construir um nome de caminho destinado a identificar um ficheiro ou diretório dentro de um diretório principal restrito. No entanto, não neutraliza corretamente elementos especiais que podem fazer com que o nome do caminho se resolva fora do diretório restrito. |
CWE-23 |
Percorrido de Caminho Relativo | O produto usa entrada externa para construir um nome de caminho dentro de um diretório restrito, mas falha em neutralizar sequências como .., que podem ser resolvidas fora desse diretório. |
CWE-36 |
Percorrida Absoluta do Caminho | O produto utiliza entrada externa para construir um nome de caminho dentro de um diretório restrito, mas falha em neutralizar sequências absolutas de caminhos como /abs/path, que podem ser resolvidas fora desse diretório. |
CWE-77 |
Neutralização Inadequada de Elementos Especiais usados num Comando ('Injeção de Comando') | O produto constrói um comando usando input influenciado externamente, mas não neutraliza elementos especiais que poderiam modificar o comando pretendido enviado para um componente a jusante. |
CWE-78 |
Neutralização Incorreta de Elementos Especiais usados num Comando do Sistema Operativo ('Injeção de Comandos do SO') | O produto constrói um comando do SO usando input influenciado externamente, mas falha em neutralizar elementos especiais que poderiam modificar o comando pretendido do SO enviado para um componente a jusante. |
CWE-88 |
Neutralização incorreta dos delimitadores de argumentos num comando ('injeção de argumento') | O produto constrói uma cadeia de comandos para um componente separado, mas não delimita corretamente argumentos, opções ou switches dentro dessa cadeia. |
CWE-79 |
Neutralização Inadequada da Entrada Durante a Geração de Páginas Web ('Cross-site Scripting') | O produto falha em neutralizar a entrada controlável pelo utilizador antes de a colocar na saída usada como página web servida a outros utilizadores. |
CWE-89 |
Neutralização Incorreta de Elementos Especiais usados num Comando SQL ('SQL Injection') | O produto constrói um comando SQL usando entrada influenciada externamente, mas não neutraliza elementos que poderiam modificar o comando, permitindo que as entradas sejam interpretadas como sintaxe SQL em vez de dados comuns. |
CWE-564 |
SQL Injection: Hibernate | Usar o Hibernate para executar instruções SQL dinâmicas construídas com entrada controlada pelo utilizador pode permitir que um atacante modifique o significado da instrução ou execute comandos SQL arbitrários. |
CWE-90 |
Neutralização Incorreta de Elementos Especiais usados numa Consulta LDAP ('Injeção LDAP') | O produto constrói uma consulta LDAP usando input influenciado externamente, mas falha em neutralizar elementos que poderiam modificar a consulta pretendida enviada para um componente a jusante. |
CWE-91 |
Injeção XML (também conhecida como Blind XPath Injection) | O produto não neutraliza corretamente elementos especiais usados em XML, permitindo que os atacantes modifiquem a sintaxe, o conteúdo ou os comandos antes do processamento. |
CWE-99 |
Controlo inadequado dos identificadores de recursos ('injeção de recursos') | O produto recebe input mas não o restringe corretamente antes de o usar como identificador para um recurso fora da esfera de controlo pretendida. |
CWE-130 |
Tratamento incorreto da inconsistência dos parâmetros de comprimento | O produto analisa uma mensagem ou estrutura formatada, mas lida incorretamente com um campo de comprimento que é inconsistente com o comprimento real dos dados associados. |
CWE-259 |
Utilização de Palavra-passe Codificada Fixa | O produto contém uma palavra-passe codificada diretamente usada para a sua própria autenticação de entrada ou comunicação de saída com componentes externos. |
CWE-321 |
Utilização de Chave Criptográfica Codificada Fixamente | O produto utiliza uma chave criptográfica codificada fixamente e inalterável. |
CWE-434 |
Upload Irrestrito de Ficheiro com Tipo Perigoso | O produto permite o carregamento de tipos de ficheiros perigosos que são automaticamente processados no seu ambiente. |
CWE-456 |
Falta de Inicialização de uma Variável | O produto não inicializa variáveis críticas, fazendo com que o ambiente de execução utilize valores inesperados. |
CWE-457 |
Utilização da variável não inicializada | O código utiliza uma variável que não está inicializada, levando a resultados imprevisíveis ou não intencionais. |
CWE-477 |
Utilização de Função Obsoleta | O código utiliza funções obsoletas ou depreciadas, sugerindo que não é gerido ativamente. |
CWE-502 |
Desserialização de Dados Não Confiáveis | O produto desserializa dados não confiáveis sem garantir suficientemente que os dados resultantes são válidos. |
CWE-543 |
Utilização do Padrão Singleton sem Sincronização num Contexto Multifios | O produto utiliza o padrão singleton para criar um recurso num ambiente multithread sem sincronização adequada. |
CWE-567 |
Acesso Não Sincronizado a Dados Partilhados num Contexto Multithread | O produto falha em sincronizar devidamente os dados partilhados, como variáveis estáticas, entre threads, levando a comportamentos indefinidos. |
CWE-570 |
A Expressão é Sempre Falsa | O produto contém uma expressão que é sempre avaliada como falsa. |
CWE-571 |
A expressão é sempre verdadeira | O produto contém uma expressão que é sempre avaliada como verdadeira. |
CWE-606 |
Entrada não verificada para condição do ciclo | O produto não verifica corretamente as entradas usadas para condições de repetição, podendo levar a uma negação de serviço devido a repetições excessivas. |
CWE-643 |
Neutralização Incorreta de Dados em Expressões XPath ('Injeção XPath') | O produto utiliza entrada externa para construir dinamicamente uma expressão XPath para uma base de dados XML, mas não consegue neutralizar essa entrada. |
CWE-652 |
Neutralização Incorreta de Dados dentro das Expressões XQuery ('Injeção XQuery') | O produto utiliza entrada externa para construir dinamicamente uma expressão XQuery, mas não consegue neutralizar corretamente essa entrada. |
CWE-662 |
Sincronização Incorreta | O produto permite que múltiplas threads ou sistemas acedam a um recurso partilhado sem a devida sincronização, podendo causar problemas de acesso simultâneo. |
CWE-665 |
Inicialização incorreta | O produto não inicializa nem inicializa incorretamente um recurso, podendo deixá-lo num estado inesperado quando acedido. |
CWE-667 |
Bloqueio Incorreto | O produto não adquire ou liberta corretamente um bloqueio num recurso, levando a alterações de estado inesperadas. |
CWE-672 |
Operação num recurso após expiração ou libertação | O produto acede ou opera num recurso após este expirar, ter sido lançado ou revogado. |
CWE-681 |
Conversão Incorreta entre Tipos Numéricos | Os dados podem ser omitidos ou convertidos em valores inesperados durante a conversão de tipos, o que pode ser perigoso se usados em contextos sensíveis. |
CWE-682 |
Cálculo incorreto | O produto realiza um cálculo que gera resultados incorretos que são posteriormente usados em decisões críticas para a segurança ou na gestão de recursos. |
CWE-732 |
Atribuição de Permissão Incorreta para Recursos Críticos | As permissões para um recurso crítico de segurança são especificadas de forma a permitir que atores não intencionais o leiam ou modifiquem. |
CWE-772 |
Falha na liberação de recurso após o término da sua vida útil | O produto não liberta um recurso depois de a sua vida útil efetiva terminar e já não ser necessário. |
CWE-775 |
Falta de Libertação do Descritor ou Identificador do Ficheiro após o seu Tempo de Vida Útil Efetivo | O produto não liberta um descritor de ficheiro ou handle depois de estes já não serem necessários. |
CWE-778 |
Registo insuficiente de logs | O produto não regista um evento crítico de segurança ou omite detalhes importantes durante o registo. |
CWE-783 |
Erro de Lógica de Precedência de Operador | Uma expressão usa lógica incorreta causada pela precedência do operador. |
CWE-789 |
Alocação de Memória com Valor de Tamanho Excessivo | O produto aloca memória com base num valor de tamanho grande e não confiável, sem garantir que está dentro dos limites esperados. |
CWE-798 |
Utilização de Credenciais Codificadas Fixas | O produto contém credenciais codificadas de forma rígida, como uma palavra-passe ou chave criptográfica. |
CWE-820 |
Sincronização em falta | O produto utiliza um recurso partilhado em simultâneo sem tentar sincronizar o acesso. |
CWE-821 |
Sincronização Incorreta | O produto utiliza um recurso partilhado em simultâneo, mas não sincroniza corretamente o acesso. |
CWE-835 |
Loop com Condição de Saída Inacessível ('Loop Infinito') | O produto contém uma iteração ou ciclo com uma condição de saída que não pode ser alcançada. |
CWE-611 |
Restrição Imprópria da Referência de Entidade Externa XML | O produto processa documentos XML contendo entidades com URIs que se resolvem fora da esfera de controlo pretendida. |
CWE-1057 |
Operações de Acesso a Dados Fora do Componente Esperado do Gestor de Dados | O produto realiza operações de acesso a dados que contornam um componente dedicado e central de gestão de dados exigido pelo design. |
Cobertura CVE (dependências de terceiros)
A modernização do GitHub Copilot analisa as dependências Java diretas e transitivas do seu projeto em busca de vulnerabilidades conhecidas publicadas na base de dados GitHub Security Advisories. A varredura transitiva está ativada por defeito – as vulnerabilidades em dependências indiretas (por exemplo, uma CVE em netty incluída pelo seu cliente HTTP) são apresentadas juntamente com as CVEs nas bibliotecas de que depende diretamente.
Cada conclusão de CVE inclui o identificador de CVE publicado, a coordenada de dependência afetada, o intervalo de versões vulneráveis, a versão fixa (quando disponível) e a gravidade do aviso. Pode configurar a severidade mínima do CVE para que apareça - critical, high, medium, ou low - através da configuração de avaliação. O padrão é high, pelo que, por defeito, apenas os CVEs high e critical aparecem no relatório.