Cyberattacchi alimentati dall'intelligenza artificiale: Come individuare, prevenire e difendersi dalle minacce intelligenti

Leggi ora
Per le traduzioni dei siti utilizziamo l'intelligenza artificiale e, sebbene ci sforziamo di essere accurati, non sempre le traduzioni sono precise al 100%. La vostra comprensione è apprezzata.

Analisi della sicurezza del framework Rack Ruby: CVE-2025-25184, CVE-2025-27111 e CVE-2025-27610

da OPSWAT
Condividi questo post

Attraverso un'analisi completa della sicurezza condotta dal Red Team di OPSWAT, i ricercatori di sicurezza Thai Do e Minh Pham hanno identificato diverse vulnerabilità che hanno un impatto sul framework Rack Ruby, in particolare CVE-2025-25184, CVE-2025-27111 e CVE-2025-27610.  

Questo articolo fornisce una panoramica dettagliata di queste vulnerabilità, con particolare attenzione a CVE-2025-27610. Esamina le cause principali, valuta gli impatti potenziali e delinea strategie di mitigazione efficaci per proteggere le applicazioni che si basano sul framework Rack. 

Panoramica del rack

Rack è un'interfaccia modulare che collega i server web alle applicazioni web basate su Ruby. Standardizza l'interazione tra questi componenti avvolgendo le richieste e le risposte HTTP in un'unica chiamata di metodo, semplificando il processo di sviluppo e promuovendo la compatibilità tra diversi framework e server.  

Rack è utilizzato da molti framework e librerie web Ruby, come Ruby on Rails e Sinatra. È disponibile come gemma Ruby. L'ampia adozione globale di Rack, con oltre un miliardo di download in tutto il mondo, evidenzia il suo ruolo integrale nell'ecosistema di sviluppo Ruby. Componenti middleware come Rack::Static e Rack::Sendfile migliorano l'efficienza gestendo la distribuzione di contenuti statici e ottimizzando la trasmissione dei file. A causa di questa ampia integrazione, le vulnerabilità scoperte all'interno di Rack presentano implicazioni sostanziali per la sicurezza, con potenziali ripercussioni su numerose applicazioni e sistemi in tutto il mondo. 

Scoperta delle vulnerabilità di sicurezza in Rack

Nel corso di una recente ricerca sulla sicurezza condotta sul framework middleware Rack, i ricercatori di OPSWAT Thai Do e Minh Pham hanno identificato diverse vulnerabilità che pongono rischi significativi per la sicurezza delle applicazioni web basate su Ruby:

  • CVE-2025-25184: Thai Do ha scoperto una vulnerabilità che consente agli aggressori di eseguire un'iniezione di registro tramite i caratteri CRLF (Carriage Return Line Feed), manipolando potenzialmente le voci di registro. 
  • CVE-2025-27111: Minh Pham ha scoperto una falla di sicurezza che consente agli aggressori di iniettare e manipolare il contenuto del registro attraverso valori di intestazione dannosi. 
  • CVE-2025-27610: Minh Pham ha inoltre identificato una vulnerabilità Path Traversal, che potrebbe consentire agli aggressori di ottenere l'accesso non autorizzato a file situati al di fuori della directory di file statici designata, costituendo una minaccia significativa per la sicurezza.

Tra queste vulnerabilità, CVE-2025-27610 è particolarmente grave, in quanto potrebbe consentire ad aggressori non autenticati di recuperare informazioni sensibili, tra cui file di configurazione, credenziali e dati riservati, causando così violazioni dei dati. A questa vulnerabilità è stato assegnato un punteggio CVSS di 7,5, che la classifica come rischio ad alta gravità.

Diagramma che mostra il processo di scoperta delle vulnerabilità nel framework Rack Ruby

Vulnerabilità di Rack::Static e inclusione di file locali

Capire Rack::Static 

Rack::Static è un middleware essenziale nelle applicazioni Rack, utilizzato principalmente per servire in modo efficiente file statici come JavaScript, CSS e immagini. Sfruttando Rack::Static, gli sviluppatori possono integrare perfettamente il servizio di contenuti statici nelle applicazioni Ruby senza dover ricorrere a configurazioni aggiuntive del server web.  

Quando si configura Rack::Static, spiccano due opzioni essenziali: :urls e :root. La comprensione e l'uso corretto di queste opzioni semplificano e snelliscono notevolmente il processo di distribuzione dei file statici. 

1. L'opzione :urls

L'opzione :urls specifica quali percorsi URL l'applicazione Rack deve gestire come risorse statiche. Viene fornita come un array di stringhe, ognuna delle quali rappresenta un prefisso di percorso che attiva la gestione dei file statici. 

Ad esempio: 

Schermata del codice che illustra la configurazione dell'opzione Rack::Static :urls in un'applicazione Ruby

In questa configurazione, le richieste a /images, /css o /js vengono intercettate ed elaborate da Rack::Static. Qualsiasi file che corrisponda a questi percorsi sarà servito direttamente dal file system. 

2. L'opzione :root

L'opzione :root definisce la directory di base da cui verranno serviti i file statici. Questa directory è relativa alla directory di lavoro corrente dell'applicazione Rack. 

Dato l'esempio precedente:

Schermata del codice che mostra la configurazione dell'opzione Rack::Static :root per servire i file statici

Quando viene fatta una richiesta a /assets/logo.png, Rack::Static tenta di servire il file situato a public/assets/logo.png

Esempio pratico

L'implementazione efficace di Rack::Static attraverso le opzioni :urls e :root offre un metodo organizzato e performante per servire contenuti statici all'interno di applicazioni web Ruby: 

Schermata del codice che illustra un esempio pratico di configurazione di Rack::Static per i contenuti statici

In questo scenario, le richieste a /assets/* e /favicon.ico saranno gestite automaticamente da Rack::Static. Tutti i file corrispondenti devono esistere rispettivamente nella cartella public/assets e public/favicon.ico. 

CVE-2025-27610 Dettaglio tecnico

Durante un'analisi approfondita della sicurezza di Rack::Static, Minh Pham ha scoperto una vulnerabilità significativa legata alla gestione impropria dell'opzione :root. In particolare, quando il parametro :root non è definito esplicitamente, Rack assegna per default il valore alla directory di lavoro corrente assegnandogli il valore di Dir.pwd, designandola implicitamente come directory principale del Web per l'applicazione Rack. 

È significativo che Rack::Static concateni direttamente i percorsi degli URL in entrata con la directory :root specificata senza una sufficiente validazione o sanitizzazione. Di conseguenza, se l'opzione :root non è definita o è configurata in modo errato rispetto all'opzione :urls, un utente non autenticato potrebbe sfruttare questa vulnerabilità attraverso tecniche di attraversamento dei percorsi per accedere a file sensibili al di fuori della directory web prevista. 

La sezione seguente fornisce un'analisi dettagliata del processo di gestione delle richieste di Rack::Static, illustrando chiaramente come questa vulnerabilità possa essere sfruttata.

Vulnerabilità di attraversamento di percorsi e inclusione di file locali in Rack::Static

Per capire meglio come il middleware Rack::Static elabora le richieste, Minh Pham ha condotto un'analisi approfondita del codice sorgente di Rack. Durante l'inizializzazione della classe Rack::Static, ha osservato che se l'opzione :root non è definita in modo esplicito, Rack::Static si imposta di servire i file dalla directory di lavoro corrente (Dir.pwd). Di conseguenza, omettendo questa opzione, il middleware utilizza implicitamente la directory da cui viene eseguita l'applicazione.

Schermata del codice che mostra l'inizializzazione di Rack::Static e l'assegnazione della directory predefinita :root
Schermata del codice che illustra il metodo di chiamata Rack::Static che gestisce le richieste HTTP

Dopo l'inizializzazione, è stato determinato che quando Rack::Static riceve una richiesta HTTP in entrata, viene invocato il metodo call.

Schermata del codice che mostra Rack::Static che delega il servizio dei file a Rack::Files

Successivamente, Rack::Static delega l'operazione di servizio del file a Rack::Files, che tenta di individuare e servire il file in base al percorso del file costruito, derivato dalla directory :root configurata e dal PATH_INFO fornito dall'utente.

Schermata del codice che mostra la costruzione del percorso dei file in Rack::Static usando :root e PATH_INFO

Innanzitutto, invocando i metodi can_serve(path) e overwrite_file_path(path), il middleware esamina env["PATH_INFO"] per determinare se la richiesta in arrivo corrisponde a uno dei prefissi URL configurati (ad esempio, /static, /public). 

Schermata del codice che mostra i metodi per controllare e sovrascrivere i percorsi dei file in Rack::Static

Se la condizione è soddisfatta, Rack::Static costruisce il percorso dei file combinando la directory principale configurata (:root) con il PATH_INFO fornito dall'utente. Questa costruzione avviene senza un'adeguata normalizzazione o sanitizzazione del percorso di input. In particolare, il middleware concatena direttamente il PATH_INFO della richiesta in entrata con la directory specificata dall'opzione :root, introducendo una vulnerabilità dovuta a un'insufficiente validazione del percorso fornito.

Schermata del codice che illustra la concatenazione vulnerabile dei percorsi dei file in Rack::Static

Minh Pham ha scoperto che, a causa dell'assenza di un'adeguata sanitizzazione o validazione in questo flusso di lavoro, se il PATH_INFO fornito dall'utente contiene sequenze di attraversamento di directory e l'opzione :root non è definita esplicitamente, il percorso dei file costruito potrebbe risolversi in una posizione al di fuori della directory principale prevista, esponendo potenzialmente file sensibili.

CVE-2025-27610 Prova di concetto

Per dimostrare questa vulnerabilità in Rack::Static, abbiamo sviluppato un'applicazione web basata su Ruby che utilizza la versione 3.1.10 di Rack. Negli scenari in cui l'applicazione non definisce esplicitamente l'opzione :root, un aggressore non autenticato può sfruttare questa vulnerabilità per accedere a dati sensibili, come credenziali, file di configurazione o file di database, portando potenzialmente a una violazione significativa dei dati. 

Per una dimostrazione dettagliata dell'impatto significativo associato a questa vulnerabilità, consultare il seguente video:

Mitigazione e guida

Per ridurre le vulnerabilità discusse sopra, assicuratevi che il vostro sistema sia aggiornato all'ultima versione di Rack.

MetaDefender Core , utilizzando il motore SBOM, è in grado di rilevare questa vulnerabilità.

OPSWAT MetaDefender Core, dotato di funzionalità avanzate di SBOMSoftware Bill of Materials), consente alle organizzazioni di adottare un approccio proattivo nell'affrontare i rischi per la sicurezza. Esaminando le applicazioni software e le loro dipendenze, MetaDefender Core identifica le vulnerabilità note, come CVE-2025-27610, CVE-2025-27111 e CVE-2025-25184, all'interno dei componenti elencati. In questo modo i team di sviluppo e di sicurezza sono in grado di dare priorità alle attività di patch, mitigando i potenziali rischi per la sicurezza prima che possano essere sfruttati da attori malintenzionati. 

Di seguito è riportata una schermata di CVE-2025-27610, CVE-2025-27111 e CVE-2025-25184, rilevate da MetaDefender Core con SBOM:

Schermata della dashboard che mostra MetaDefender Core che rileva le vulnerabilità del framework Rack Ruby

Rimanete aggiornati con OPSWAT!

Iscriviti oggi stesso per ricevere gli ultimi aggiornamenti sull'azienda, storie, informazioni sugli eventi e altro ancora.