Condividi tramite


Comprendere la copertura della valutazione tramite la modernizzazione di GitHub Copilot

Questo articolo descrive cosa può rilevare la funzionalità di valutazione delle app della modernizzazione di GitHub Copilot. La valutazione include due funzionalità chiave:

  • Rilevamento dei problemi in tre domini fondamentali per il percorso di modernizzazione:

    • Idoneità al cloud: identifica 16 categorie di problemi, tra cui l'utilizzo del file system, la gestione delle credenziali, i servizi di messaggistica, le connessioni di database, le lacune di containerizzazione, la gestione delle sessioni, i modelli di comunicazione remota e altro ancora.
    • Aggiornamento di Java: contrassegna le versioni Java obsolete, i framework di supporto end-of-OSS (Spring Boot, Spring Cloud, Jakarta EE), centinaia di API rimosse o deprecate e strumenti di compilazione legacy come Ant.
    • Sicurezza: rileva 42 punti deboli di sicurezza tratti dallo standard ISO/IEC 5055, che copre le vulnerabilità di inserimento (SQL, LDAP, XPath, comando del sistema operativo), credenziali hardcoded e chiavi crittografiche, problemi di sincronizzazione, problemi relativi al ciclo di vita delle risorse e altri CWE ad alto impatto.
  • Comprensione delle applicazioni: per le codebase legacy, la valutazione presenta dipendenze e tecnologie in uso, in modo da ottenere un quadro chiaro di ciò che l'applicazione si basa prima di iniziare la migrazione.

Le sezioni seguenti descrivono in dettaglio la copertura dei problemi per ogni dominio.

Dominio: idoneità al cloud

Dominio Categoria Riepilogo rilevamento Perché è importante
cloud-readiness credential-migration Rileva le credenziali AWS hardcoded (aws_access_key_id, aws_secret_access_key), l'utilizzo di AWS Secrets Manager e le librerie di gestione dei segreti incorporate come Spring Cloud Vault. Sicurezza: Le credenziali codificate direttamente nel codice e i repository segreti specifici del fornitore sono estremamente vulnerabili. Le applicazioni native del cloud richiedono una sicurezza centralizzata basata sulle identità per evitare il furto di credenziali.
cloud-readiness region-configuration Identifica gli identificatori di area AWS hardcoded (aws.region, AWS_REGION) nei file di codice o di configurazione. Portabilità: L'hardcoding delle aree geografiche vincola l'applicazione all'infrastruttura fisica di un fornitore specifico, compromettendo la distribuzione globale e la resilienza.
cloud-readiness storage-migration Rileva l'utilizzo di AWS S3 SDK (bucket, oggetti, URL prefirmato), S3 TransferManager e librerie client di Google Cloud Storage. Affidabilità e allineamento: Queste dipendenze vincolano l'uso all'archiviazione di oggetti di un fornitore e non sono compatibili con i servizi di archiviazione nativi della piattaforma di destinazione.
cloud-readiness messaging-service-migration Contrassegna le dipendenze e le stringhe di connessione per Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar e Google Cloud Pub/Sub. Scalabilità e affidabilità: I broker di messaggistica legacy spesso si basano su endpoint fissi e persistenza basata su disco che ostacolano la scalabilità orizzontale e la disponibilità elevata negli ambienti cloud.
cloud-readiness database-migration Rileva stringhe di connessione, driver e impostazioni di timeout per MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore e Google Cloud Spanner. Affidabilità: I database self-managed o non nativi non dispongono di scalabilità cloud automatizzata. I timeout codificati e gli intervalli di ripetizione dei tentativi fissi possono causare blocchi e "tempeste di ripetizioni dei tentativi" durante interruzioni parziali.
cloud-readiness file-system-management Identifica l'uso di percorsi relativi/assoluti, percorsi home (/home/), file:// schemi e chiamate I/O Java/NIO standard o Apache Commons IO per l'accesso alle risorse di archiviazione locali. Senza stato: I contenitori cloud sono temporanei. La scrittura in un file system locale comporta la perdita di dati al riavvio o al ridimensionamento dell'istanza; i dati persistenti devono essere memorizzati esternamente.
cloud-readiness local-credential Contrassegna i file Java KeyStore (.jks), le chiamate ai metodi (KeyStore.load) e le password in testo in chiaro (password, pwd) nei file di proprietà o XML. Rischio di sicurezza: Il materiale sensibile archiviato in testo non crittografato o in file locali può essere facilmente compromesso se utenti non autorizzati accedono all'ambiente dell'applicazione o ai file di configurazione.
cloud-readiness configuration-management Rileva System.getenvSystem.getProperty, .properties/.xml/.ini file esterni e l'accesso al Registro di sistema di Windows per le impostazioni dell'applicazione. Esternalizzazione: L'archiviazione specifica del sistema operativo o i file locali non sono gestibili su larga scala e non possono essere aggiornati dinamicamente senza modifiche al codice in tutte le istanze.
cloud-readiness session-management Identifica l'archiviazione dei dati negli HttpSession oggetti e l'uso del tag "distribuibile" nei descrittori Web. Scalabilità: Le sessioni HTTP standard non sono adatte per il ridimensionamento del cloud; lo stato deve essere esternalizzato a una cache distribuita per evitare perdite di dati durante gli spostamenti del traffico tra istanze.
cloud-readiness remote-communication Rileva protocolli strettamente associati (CORBA, RMI, JCA), protocolli HTTP/FTP non protetti, API Posta Java, utilizzo diretto del canale Socket/NIO e URL hardcoded. Compatibilità e sicurezza cloud: Le interazioni strettamente associate ostacolano la scalabilità. I protocolli non protetti e gli URL hardcoded sono vulnerabili e fragili in ambienti di rete cloud dinamici.
cloud-readiness jakarta-migration Rileva l'utilizzo di API specifiche di Jakarta/Java EE per NoSQL, JPA, Data, WebSockets e JAX-RS e artefatti specifici del server da JBoss EAP, WebLogic o WebSphere. Supportabilità: La migrazione verso un runtime nativo del cloud richiede l'allineamento con i moderni spazi dei nomi di Jakarta e la rimozione delle dipendenze proprietarie del server di applicazioni per garantire la portabilità.
cloud-readiness containerization Contrassegna l'assenza di un Dockerfile o di istruzioni Dockerfile problematiche, ad esempio apt-get upgrade, uso della sintassi minuscola e problemi di spaziatura nella sintassi. Affidabilità: La standardizzazione nelle compilazioni dei contenitori è necessaria per distribuzioni stabili e riproducibili e per garantire che le immagini si comportino in modo prevedibile in ambienti diversi.
cloud-readiness scheduled-job-migration Identifica i gestori di AWS Lambda, Google Cloud Functions, le dipendenze del Quartz Scheduler e i workflow di elaborazione Spring Batch. Allineamento del cloud computing: I processi pianificati e le funzioni serverless devono essere ristrutturate per usare i modelli di elaborazione basati su eventi e serverless del cloud di destinazione per ridurre il sovraccarico di infrastruttura.
cloud-readiness apm-migration Identifica gli agenti e le librerie APM incorporati per New Relic, Elastic APM e Dynatrace. Osservabilità: Questi strumenti richiedono un'integrazione specifica della piattaforma cloud per acquisire correttamente dati di telemetria, latenza e integrità in un ambiente gestito.
cloud-readiness auth-migration Rileva SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, utilizzo LDAP e modelli di autenticazione webform legacy. Identità moderna: La versione webform legacy e l'autenticazione LDAP non dispongono delle funzionalità di flessibilità e sicurezza (MFA, SSO) dei moderni provider di identità cloud basati sulle attestazioni.
cloud-readiness os-compatibility Identifica le dipendenze del progetto da librerie Dynamic-Link specifiche per Windows (file .dll). Portabilità: Le DLL sono specifiche del sistema operativo e non vengono eseguite in ambienti contenitore cloud basati su Linux standard. È necessario sostituirli con librerie condivise multipiattaforma.

Dominio: java-upgrade

Dominio Categoria Riepilogo rilevamento Perché è importante
java-upgrade java-version-upgrade Identifica l'utilizzo delle versioni Java non LTS (da 9, 10, 12-16, 19, 20) e versioni legacy (da 1.x a 8 e 11). Sicurezza e supporto: Le versioni precedenti e non LTS contengono vulnerabilità note e non contengono aggiornamenti di manutenzione a lungo termine, lasciando l'infrastruttura esposta agli attacchi.
java-upgrade framework-upgrade Rileva le versioni Spring Boot, Spring Cloud, Spring Framework e Jakarta EE che hanno raggiunto la fine del supporto osS. Supportabilità: I framework non aggiornati interrompino la ricezione di correzioni di sicurezza, rendendo l'applicazione un rischio per la sicurezza e incompatibili con gli strumenti moderni nativi del cloud.
java-upgrade deprecated-apis Cataloga centinaia di API rimosse o deprecate, tra cui sun.misc.BASE64, metodi Thread.stopSecurityManagere hook proprietari da JBoss, Seam 2, WebLogic e WebSphere. Stabilità e portabilità: L'uso delle API rimosse causa arresti anomali del runtime su JVM moderni. Gli hook dei fornitori proprietari (ad esempio gli interni di WebLogic/JBoss) impediscono la portabilità dell'applicazione in runtime standard.
java-upgrade build-tool Identifica i sistemi di compilazione legacy, ad esempio Ant (build.xml) o configurazioni di progetto specifiche di Eclipse (natura WTP/JEM). Automazione: Gli strumenti legacy non dispongono delle convenzioni standard e della gestione delle dipendenze necessarie per un'integrazione efficiente nelle pipeline CI/CD moderne.

Dominio: sicurezza (guidata ISO 5055)

ISO/IEC 5055 è uno standard ISO per misurare la struttura interna di un prodotto software su quattro fattori critici per l'azienda: sicurezza, affidabilità, efficienza delle prestazioni e manutenibilità. Questi fattori determinano quanto sia affidabile, affidabile e resiliente un sistema software. In sostanza, ISO 5055 è destinato a "trovare e prevenire l'8% di difetti che causano 90% di problemi di produzione". ISO 5055 identifica le CWE più critiche e con impatto in ogni caratteristica di qualità: affidabilità, efficienza delle prestazioni, sicurezza e manutenibilità. Per la modernizzazione di GitHub Copilot, si rilevano le CWE selezionate sulla sicurezza definite in ISO 5055, come illustrato nella tabella seguente.

CWE_ID Titolo Descrizione
CWE-22 Limitazione non corretta di un percorso a una directory con restrizioni ('Attraversamento percorso') Il prodotto usa l'input esterno per costruire un percorso inteso a identificare un file o una directory sotto una directory padre con restrizioni. Tuttavia, non neutralizza correttamente elementi speciali che possono causare l'interpretazione del percorso al di fuori della directory limitata.
CWE-23 L'attraversamento del percorso relativo Il prodotto usa l'input esterno per costruire un pathname all'interno di una directory con restrizioni, ma non riesce a annullare sequenze come .., che possono essere risolte all'esterno di tale directory.
CWE-36 Attraversamento di Percorso Assoluto Il prodotto usa l'input esterno per costruire un pathname all'interno di una directory con restrizioni, ma non riesce a neutralizzare sequenze di percorsi assoluti come /abs/path, che possono risolversi all'esterno di tale directory.
CWE-77 Neutralizzazione non corretta degli elementi speciali usati in un comando ('Iniezione di comandi') Il prodotto costruisce un comando usando input influenzato esternamente, ma non annulla elementi speciali che potrebbero modificare il comando previsto inviato a un componente downstream.
CWE-78 Neutralizzazione impropria degli elementi speciali usati in un comando del sistema operativo ('Iniezione di comandi del sistema operativo') Il prodotto costruisce un comando del sistema operativo usando input influenzato esternamente, ma non riesce a neutralizzare elementi speciali che potrebbero modificare il comando del sistema operativo previsto inviato a un componente downstream.
CWE-88 Neutralizzazione non corretta dei delimitatori di argomenti in un comando ('Inserimento di argomenti') Il prodotto costruisce una stringa di comando per un componente separato, ma non delimita correttamente argomenti, opzioni o switch all'interno di tale stringa.
CWE-79 Impropria neutralizzazione dell'input durante la generazione di pagine Web ('Cross-site Scripting') Il prodotto non riesce a neutralizzare l'input controllabile dall'utente prima di inserirlo nell'output usato come pagina Web servita ad altri utenti.
CWE-89 Neutralizzazione non corretta degli elementi speciali usati in un comando SQL ('SQL Injection') Il prodotto costruisce un comando SQL usando input influenzato esternamente, ma non riesce a neutralizzare gli elementi che potrebbero modificare il comando, consentendo l'interpretazione degli input come sintassi SQL anziché come dati ordinari.
CWE-564 SQL Injection: Hibernate L'uso di Hibernate per eseguire istruzioni SQL dinamiche compilate con input controllato dall'utente può consentire a un utente malintenzionato di modificare il significato dell'istruzione o eseguire comandi SQL arbitrari.
CWE-90 Neutralizzazione non corretta degli elementi speciali usati in una query LDAP ('LDAP injection') Il prodotto costruisce una query LDAP usando input influenzato esternamente, ma non riesce a neutralizzare gli elementi che potrebbero modificare la query desiderata inviata a un componente downstream.
CWE-91 Inserimento XML (noto anche come iniezione cieca di XPath) Il prodotto non neutralizza correttamente elementi speciali usati in XML, consentendo agli utenti malintenzionati di modificare la sintassi, il contenuto o i comandi prima dell'elaborazione.
CWE-99 Controllo non corretto degli identificatori di risorsa ('Inserimento risorse') Il prodotto riceve l'input, ma non lo limita correttamente prima di usarlo come identificatore per una risorsa all'esterno della sfera di controllo prevista.
CWE-130 Gestione non corretta dell'incoerenza dei parametri di lunghezza Il prodotto analizza un messaggio o una struttura formattata, ma gestisce erroneamente un campo di lunghezza incoerente con la lunghezza effettiva dei dati associati.
CWE-259 Uso della password codificata in modo permanente Il prodotto contiene una password hardcoded usata per l'autenticazione in ingresso o la comunicazione in uscita con componenti esterni.
CWE-321 Uso di una chiave crittografica codificata Il prodotto utilizza una chiave crittografica codificata in modo fisso e non modificabile.
CWE-434 Caricamento senza restrizioni di file con tipo pericoloso Il prodotto consente il caricamento di tipi di file pericolosi elaborati automaticamente all'interno dell'ambiente.
CWE-456 Inizializzazione mancante di una variabile Il prodotto non inizializza le variabili critiche, causando l'uso di valori imprevisti nell'ambiente di esecuzione.
CWE-457 Uso di una variabile non inizializzata Il codice usa una variabile che non viene inizializzata, causando risultati imprevedibili o imprevisti.
CWE-477 Uso di funzione obsoleta Il codice usa funzioni deprecate o obsolete, a indicare che non è attivamente esaminato o gestito.
CWE-502 Deserializzazione di dati non attendibili Il prodotto deserializza i dati non attendibili senza garantire sufficientemente che i dati risultanti siano validi.
CWE-543 Uso del modello Singleton senza sincronizzazione in un contesto multithreading Il prodotto usa il modello singleton durante la creazione di una risorsa all'interno di un ambiente multithreading senza una corretta sincronizzazione.
CWE-567 Accesso non sincronizzato ai dati condivisi in un contesto multithread Il prodotto non riesce a sincronizzare correttamente i dati condivisi, ad esempio variabili statiche, tra thread, causando un comportamento non definito.
CWE-570 Espressione è Sempre Falsa Il prodotto contiene un'espressione che valuta sempre a falso.
CWE-571 L'espressione è sempre vera Il prodotto contiene un'espressione che valuta sempre a vero.
CWE-606 Input non verificato per condizione di loop Il prodotto non controlla correttamente gli input utilizzati per le condizioni di ciclo, causando potenzialmente un Denial of Service a causa di cicli eccessivi.
CWE-643 Neutralizzazione non corretta dei dati nelle espressioni XPath ('XPath Injection') Il prodotto usa l'input esterno per costruire in modo dinamico un'espressione XPath per un database XML, ma non riesce a annullare tale input.
CWE-652 Neutralizzazione non corretta dei dati nelle espressioni XQuery ('XQuery Injection') Il prodotto usa l'input esterno per costruire dinamicamente un'espressione XQuery, ma non riesce a neutralizzare correttamente tale input.
CWE-662 Sincronizzazione non corretta Il prodotto consente a più thread o sistemi di accedere a una risorsa condivisa senza una corretta sincronizzazione, causando potenzialmente problemi di accesso simultanei.
CWE-665 Inizializzazione non corretta Il prodotto non inizializza o inizializza erroneamente una risorsa, lasciandola potenzialmente in uno stato imprevisto quando si accede.
CWE-667 Blocco non corretto Il prodotto non acquisisce o rilascia correttamente un blocco su una risorsa, causando modifiche di stato impreviste.
CWE-672 Operazione su una risorsa dopo la scadenza o il rilascio Il prodotto accede o opera su una risorsa dopo che è scaduta, è stata rilasciata o è stata revocata.
CWE-681 Conversione errata tra tipi numerici I dati possono essere omessi o convertiti in valori imprevisti durante la conversione dei tipi, che possono essere pericolosi se usati in contesti sensibili.
CWE-682 Calcolo errato Il prodotto esegue un calcolo che genera risultati non corretti usati successivamente nelle decisioni critiche per la sicurezza o nella gestione delle risorse.
CWE-732 Assegnazione di autorizzazioni non corretta per la risorsa critica Le autorizzazioni per una risorsa critica per la sicurezza vengono specificate in modo da consentire agli attori indesiderati di leggerlo o modificarlo.
CWE-772 Mancato rilascio della risorsa dopo la durata utile effettiva Il prodotto non rilascia una risorsa al termine della durata effettiva e non è più necessaria.
CWE-775 Mancato rilascio del descrittore di file o handle dopo l'utilizzo effettivo Il prodotto non rilascia un descrittore o handle di file dopo che non è più necessario.
CWE-778 Registrazione dei log insufficiente Il prodotto non riesce a registrare un evento critico per la sicurezza o omette dettagli importanti durante la registrazione.
CWE-783 Errore di logica di precedenza dell'operatore Un'espressione usa una logica errata causata dalla precedenza dell'operatore.
CWE-789 Allocazione di memoria con un valore di dimensioni eccessive Il prodotto alloca memoria in base a un valore di grandi dimensioni non attendibile senza garantire che sia entro i limiti previsti.
CWE-798 Uso di credenziali codificate Il prodotto contiene credenziali codificate in modo fisso, ad esempio una password o una chiave crittografica.
CWE-820 Sincronizzazione mancante Il prodotto usa simultaneamente una risorsa condivisa senza tentare di sincronizzare l'accesso.
CWE-821 Sincronizzazione non corretta Il prodotto usa simultaneamente una risorsa condivisa, ma non sincronizza correttamente l'accesso.
CWE-835 Ciclo con condizione di uscita non raggiungibile ('Ciclo infinito') Il prodotto contiene un'iterazione o un ciclo con una condizione di uscita che non può essere raggiunta.
CWE-611 Restrizione non corretta dei riferimenti a entità esterne XML Il prodotto elabora documenti XML contenenti entità con URI che si risolvono all'esterno della sfera di controllo prevista.
CWE-1057 Operazioni di accesso ai dati al di fuori del componente Di gestione dati previsto Il prodotto esegue operazioni di accesso ai dati che ignorano un componente di gestione dati centrale dedicato richiesto dalla progettazione.

Passaggi successivi