Le vulnerabilità più critiche del 2024 emerse nella piattaforma di sviluppo più adottata al mondo. Quali sono i rischi e le migliori strategie solutive?

  1. Cos’è Java e perché è così importante?
  2. Le vulnerabilità emerse nel 2024
  3. CVE-2024-20952
  4. CVE-2024-20989
  5. CVE-2024-21012
  6. CVE-2024-21144
  7. CVE-2024-21235
  8. Best practices contro le vulnerabilità di Java SE
Sicurezza Oracle Java SE 2024

Oracle Java SE è da decenni una pietra miliare nello sviluppo software.
Ciò è stato possibile solo grazie alla sua flessibilità, alla compatibilità multipiattaforma e alla vasta gamma di applicazioni in ambito aziendale e consumer.
Dai sistemi finanziari alle applicazioni mobile, fino alle infrastrutture mission-critical, Java si è affermato come una tecnologia indispensabile sia per programmatori, che per le aziende consumer di tutto il mondo.

Tuttavia, non è oro tutto ciò che luccica.
Nel corso del 2024, sono emerse alcune vulnerabilità critiche che hanno puntato i riflettori sui rischi di sicurezza legati all’utilizzo di Java SE.
Questi problemi, se sfruttati da attori malevoli, avrebbero potuto compromettere gravemente sistemi e dati, obbligando Oracle a intervenire tempestivamente con aggiornamenti di sicurezza.

Ma come sempre, andiamo con ordine e affrontiamo per gradi l’argomento.

Cos’è Java e perché è così importante?

Prima di entrare nel merito del tema vero e proprio, è necessario effettuare una breve introduzione a Java, in modo da avere un quadro quanto più chiaro possibile.

Java nasce nel 1995 come progetto di Sun Microsystems, ideato da James Gosling. Concepito inizialmente com un linguaggio di programmazione per dispositivi elettronici, si è rapidamente evoluto in uno general-purpose, noto per la filosofia Write Once Run Anywhere. Questa è stata la chiave del suo successo, in quanto Java è un linguaggio portabile da una piattaforma all’altra così com’è scritto. Ciò è possibile grazie alla Java Virtual Machine (JVM), una macchina virtuale su cui Java viene eseguito direttamente, permettendo così agli sviluppatori di non dover considerare il sistema operativo in uso dall’utente finale. Grazie a questa sua caratteristica, il linguaggio non ci ha messo molto ad affermarsi come una tecnologia essenziale per applicazioni web a microservizi, giochi, server e molto altro.

Vista la sua diffusione a macchia d’olio e la sempre crescente adozione da parte degli sviluppatori, Oracle Corporation ha acquisito Sun Microsystems nel 2010, portando Java sotto la sua ala. Tale acquisizione ha riflesso in toto l’intenzione del colosso informatico di espandere la propria posizione predominante e di consolidare la creatura di James Gosling come pilastro delle infrastrutture IT aziendali. Ottenuto il pieno controllo di Java, Oracle ha anche ereditato la responsabilità di mantenerlo sicuro, rilasciando aggiornamenti regolari per proteggerlo da vulnerabilità sempre più sofisticate.

Nonostante la sua solidità, Java è un bersaglio particolarmente appetibile per i cybercriminali. La sua vasta diffusione lo rende una piattaforma ideale per attacchi su larga scala, mentre la sua complessità può introdurre vulnerabilità che, se non mitigate, espongono dati sensibili e sistemi critici. Nel 2024, questo scenario si è manifestato chiaramente, con diverse vulnerabilità che hanno messo a rischio la sicurezza di milioni di applicazioni.

Le vulnerabilità emerse nel 2024

Nel corso del 2024, Oracle ha rilasciato quattro Critical Patch Updates (CPU), uno per trimestre, ciascuno contenente correzioni per vulnerabilità critiche in Java SE. Tra queste, alcune hanno raggiunto punteggi elevati nel Common Vulnerability Scoring System (CVSS), indicando un rischio significativo per gli utenti.

Vediamole ora nel dettaglio.

CVE-2024-20952

Identificata nel primo trimestre del 2024, questa vulnerabilità è stata scoperta da un team di ricercatori indipendenti, durante un’analisi delle librerie standard di Java SE. Classificata come critica, ha ottenuto un punteggio di 9.8/10 nel sistema CVSS v3.1, indicando un alto potenziale di compromissione del sistema anche senza l’autenticazione dell’attore malevolo.

Sfruttando una debolezza intrinseca alla gestione delle autorizzazioni di rete, gli attaccanti avrebbero potuto inviare richieste HTTP appositamente create per iniettare codice dannoso. Una volta eseguito, il codice avrebbe consentito il controllo remoto della JVM, compromettendo la sicurezza di qualsiasi applicazione basata su Java. Ciò si sarebbe tradotto nell’accesso non autorizzato ai dati, esecuzione di codice arbitrario e persino interruzioni operative. Sistemi aziendali con esposizione diretta a internet sarebbero stati particolarmente vulnerabili.

Le versioni di Java SE interessate sono state:

  • 8u391;
  • 11.0.21;
  • 17.0.9;
  • 21.0.1;

Oracle ha rilasciato una patch risolutiva con il Critical Patch Update di gennaio 2024, intervenendo circa 30 giorni dopo la scoperta iniziale. Gli utenti sono stati invitati ad aggiornare immediatamente le loro versioni di Java SE, per mitigare i rischi.

CVE-2024-20989

Scoperta ad aprile 2024, questa vulnerabilità era presente nel meccanismo di deserializzazione del codice Java ed è emersa durante una revisione di sicurezza in una delle librerie di input/output del JDK (Java Development Kit). L’exploit poteva essere attivato inviando dati malformati che venivano automaticamente processati dalla JVM. Classificata con un punteggio CVSS di 7.0/10, la gravità risiedeva nel fatto che si verificava quando una JVM vulnerabile elaborava una serie di dati malformati inviati da un attaccante.

Questo input provocava la deserializzazione di oggetti pericolosi, con il risultato che il codice arbitrario veniva eseguito sulla macchina della vittima. Gli attaccanti potevano sfruttare questa vulnerabilità tramite applicazioni web, o servizi esposti, aumentando esponenzialmente la superficie di attacco. In tal modo, gli attaccanti avrebbero potuto assicurarsi non solo l’accesso ai dati sensibili, ma anche acquisire il controllo totale e incondizionato del sistema bersaglio.

Le versioni di Java SE interessate sono state:

  • 19.1.0;
  • 19.5.4;

Oracle ha rilasciato una patch correttiva nel Critical Patch Update di aprile 2024. Questo aggiornamento ha risolto il problema legato alla deserializzazione, attraverso modifiche al codice Java, includendo linee guida per sviluppatori e amministratori su come evitare configurazioni vulnerabili.

CVE-2024-21012

Scoperta nel mese di luglio 2024, questa vulnerabilità ha interessato direttamente il componente delle connessioni di rete presente in Java. Scoperta attraverso un’indagine di sicurezza condotta internamente da Oracle stessa, è emerso che un errore nel trattamento delle richieste TCP avrebbe potuto permettere ad un attaccante di bypassare firewall e sistemi di autenticazione.

Classificata con un punteggio CVSS di 3.7/10, quindi un rischio minore rispetto ad altre vulnerabilità, la possibilità di eseguire un attacco con accesso di rete l’ha resa ugualmente una minaccia per le infrastrutture aziendali che utilizzano Java SE per applicazioni di rete. Per sfruttarla, un attaccante avrebbe dovuto inviare pacchetti TCP malformati a un server vulnerabile, eludendo le politiche di sicurezza implementate tramite la manipolazione delle connessioni di rete. In questo scenario, costui avrebbe ottenuto l’accesso a risorse protette, o far eseguire codice arbitrario a livello di sistema.

Le versioni interessate sono state:

  • Java SE 11.0.22;
  • Java SE 17.0.10;
  • Java SE 21.0.2;
  • Java SE 22;
  • Oracle GraalVM for JDK 17.0.10;
  • Oracle GraalVM for JDK 21.0.2;
  • Oracle GraalVM for JDK 22;
  • Oracle GraalVM Enterprise Edition 20.3.13;
  • Oracle GraalVM Enterprise Edition 21.3.9;

Oracle ha rilasciato una patch nel Critical Patch Update di luglio 2024. L’intervento ha comportato correzioni nei protocolli di rete gestiti dalla JVM e ha incluso misure per la verifica della validità dei pacchetti TCP.

CVE-2024-21144

Scoperta nel secondo trimestre del 2024, questa vulnerabilità ha interessato Oracle Java SE e Oracle GraalVM Enterprise Edition, due componenti fondamentali per molteplici applicazioni. In particolare, questa era provocata da una falla intrinseca al parsing delle richieste HTTP. Classificata con un punteggio CVSS di 8.7/10, questa vulnerabilità è stata considerata molto pericolosa, nonostante la necessità di far ricorso ad una specifica configurazione del server per essere sfruttata.

Questo perché un attaccante l’avrebbe potuto sfruttare manipolando le intestazioni HTTP inviate al server. In scenari non protetti, questo avrebbe consentito di iniettare codice dannoso, effettuare una privilege escalation, o mandare in eccezione la Java Virtual Machine, compromettendo l’intero sistema. Ciò si traduce automaticamente in un accesso non autorizzato ai dati sensibili e un Denial of Service (DoS – Interruzione dei servizi). I principali sistemi a rischio erano quelli esposti pubblicamente, o con configurazioni obsolete.

Più nel dettaglio, le versioni di Java interessate sono state:

  • Java SE 8u411;
  • Java SE 8u411-perf;
  • Java SE 11.0.23;
  • GraalVM Enterprise Edition 20.3.14;
  • GraalVM Enterprise Edition 21.3.10;

Oracle ha rilasciato una patch nel Critical Patch Update di luglio 2024, accompagnata da linee guida specifiche per configurare correttamente i server vulnerabili. La community degli sviluppatori Java è stata avvisata con largo anticipo, grazie a un advisory dettagliato.

CVE-2024-21235

Segnalata nel terzo trimestre del 2024, questa vulnerabilità è emersa durante un programma di bug bounty indetto da Oracle stessa.
Le segnalazioni ricevute hanno messo in luce un problema critico nei meccanismi di gestione della memoria. Classificata con un punteggio CVSS di 9.3/10, il suo sfruttamento avrebbe comportato esecuzioni di codice non autorizzato.

In pratica, i cybercriminali avrebbero potuto inviare input appositamente strutturati a una JVM vulnerabile, sfruttando un difetto nel controllo delle allocazioni di memoria. Ciò gli avrebbe garantito l’accesso diretto alla memoria di sistema e l’esecuzione di codice arbitrario, con la conseguente possibilità di esfiltrazione di dati sensibili e installazione di malware su larga scala. I sistemi maggiormente esposti a questa vulnerabilità, erano quelli definiti mission-critical: finanziari e governativi.

Le versioni di Java SE interessate erano:

  • 11.0.22;
  • 17.0.10;

Oracle ha rilasciato una patch nel Critcal Patch Update di ottobre 2024, fornendo anche una guida per mitigazioni temporanee, come la restrizione di input esterni e l’utilizzo di ambienti sandbox.

Best practices contro le vulnerabilità di Java SE

Una strategia solutiva definitiva contro queste vulnerabilità, è pressoché impossibile. Questo a causa delle continue revisioni che il linguaggio di programmazione, la piattaforma e i relativi applicativi ricevono a cadenza regolare da parte di Oracle. Tuttavia, restano una serie di consigli e strategie per ridurre al minimo il rischio e proteggere i sistemi.

  • Eseguire aggiornamenti costanti
    I Critical Patch Updates (CPU) rilasciati da Oracle, devono essere applicati tempestivamente e le vulnerabilità vanno monitorate continuamente. In tal modo si può evitare che gli attacchi sfruttino problematiche non risolte. Le patch devono essere implementate non solo nei server, ma anche su ambienti di sviluppo e produzione.
  • Limitare i permessi di esecuzione
    È fondamentale che solo le applicazioni autorizzate e verificate siano in grado di eseguire codice Java. Inoltre si deve far sì che i sistemi siano configurati per impedire l’esecuzione di codice sospetto proveniente da fonti non sicure. Questo per prevenire attacchi di tipo RCE (Remote Code Execution).
  • Fare uso di sandbox apposite
    Isolando le applicazioni Java in ambienti controllati come le sandbox, riduce il rischio di compromissione dell’intero sistema. A tal proposito si consiglia caldamente l’impiego del Security Manager di Java, o i container di Docker.
  • Accertarsi di validare gli input
    Molte vulnerabilità di deserializzazione e iniezione di codice si verificano quando i dati in ingresso non sono correttamente validati. Ecco perché è fondamentale applicare rigorose tecniche di validazione e sanitizzazione del codice in tutti gli input. In particolare, si deve prestare attenzione a quelli provenienti dagli utenti esterni. L’uso di framework di sicurezza, come Spring Security, può ridurre significativamente il rischio di attacchi.
  • Implementare soluzioni di monitoraggio continuo
    L’adozione di strumenti di rilevamento di intrusioni (IDS) e sistemi di gestione delle informazioni di sicurezza (SIEM), è una misura essenziale per l’analisi dei log di sistema e identificare eventuali tentativi di sfruttamento delle vulnerabilità.
  • Adottare pratiche si sensibilizzazione e formazione per sviluppatori e amministratori di sistema
    La sensibilizzazione sulle vulnerabilità comuni e sull’importanza di scrivere codice sicuro, unita alla comprensione delle best practices di sicurezza Java, è fondamentale per ridurre gli errori umani che spesso facilitano gli exploit.

In conclusione

La scoperta di tutte queste vulnerabilità evidenzia ancora una volta come sia importante l’impegno costante nella sicurezza informatica. Questo specialmente se si considera la diffusione a livello globale di Java come linguaggio e piattaforma di sviluppo. Ecco perché è fondamentale adottare una strategia di sicurezza integrata che vada oltre l’applicazione di patch. La gestione attenta delle configurazioni, l’adozione di best practices di sicurezza, il monitoraggio costante e la formazione degli sviluppatori sono elementi imprescindibili per difendersi da minacce sempre più sofisticate.

Nonostante l’intervento tempestivo di Oracle, solo attraverso un impegno condiviso tra sviluppatori, amministratori di sistema e team di sicurezza sarà possibile garantire l’affidabilità delle applicazioni e proteggere i dati aziendali da minacce sempre più complesse.


    Dichiaro di aver letto e compreso l'Informativa sul trattamento dei dati