L'aggiornamento di sicurezza di Ruby corregge le vulnerabilità alla base delle RCE di GitLab
L'aggiornamento di sicurezza di Ruby per le versioni 4.0.9, 3.4.12 e 3.3.13 corregge tre bug alla base di quattro vulnerabilità critiche di remote code execution (RCE) in GitLab. RCE significa che un aggressore potrebbe riuscire a eseguire comandi o software su un server interessato. I problemi sottostanti si trovano in Onigmo, il regular expression engine integrato in Ruby, e possono interessare applicazioni diverse da GitLab quando queste creano pattern di ricerca partendo da testo controllato da un aggressore.
Una regular expression è un pattern utilizzato dal software per trovare testo o individuare corrispondenze. Secondo l'avviso di Ruby, un'applicazione è esposta solo quando compila un pattern di questo tipo da una string controllata da un aggressore. Ciò può accadere quando il software passa la string a Regexp.new, Regexp.union o Regexp.compile. Può verificarsi anche tramite interpolation, che inserisce direttamente in un pattern un valore fornito, come in /#{input}/. Le regular expression scritte interamente dagli sviluppatori dell'applicazione non sono interessate.
GitLab ha scoperto che un pattern appositamente predisposto potrebbe causare memory corruption durante la sua compilazione da parte di Ruby. La memory corruption si verifica quando il software modifica o accede in modo errato all'area in cui i programmi in esecuzione memorizzano i dati. In questi casi, il danno potrebbe potenzialmente portare all'esecuzione di codice sui server GitLab. Il problema è rilevante per i provider di hosting e i gestori di siti web perché qualsiasi applicazione Ruby che accetti regular expression controllate dagli utenti potrebbe esporre gli stessi bug dell'engine sottostante.
Gli utenti di Ruby 4.0 devono eseguire l'upgrade alla versione 4.0.9, quelli di Ruby 3.4 alla 3.4.12 e quelli di Ruby 3.3 alla 3.3.13. Le release 3.4.12 e 3.3.13 sono le prime delle rispettive serie a contenere una qualsiasi delle tre correzioni. Ruby 4.0.8, rilasciata all'inizio della stessa settimana, non contiene la correzione per CVE-2026-110264, quindi installare la versione 4.0.8 non è sufficiente.
Ruby 3.2 e i branch precedenti non riceveranno le correzioni. Ruby 3.2 ha raggiunto la fine del ciclo di vita, il che significa che non riceve più aggiornamenti supportati, il 1° aprile 2026, con la versione 3.2.11 come release finale. Ruby consiglia di trasferire le installazioni interessate alle serie 3.4 o 4.0. Le organizzazioni che non possono eseguire immediatamente l'upgrade devono interrompere la compilazione di regular expression da input non attendibile finché non potranno installare una release corretta.
Due possibili misure di protezione non risolvono queste vulnerabilità. Ruby afferma che Regexp.timeout, un'impostazione pensata per limitare la durata dell'esecuzione del pattern matching, non impedisce la memory corruption. Anche limitare il numero di caratteri di un pattern non è affidabile, perché persino pattern brevi possono attivare i bug. Questa distinzione è importante per i proprietari di applicazioni che in precedenza potrebbero aver considerato le regular expression non attendibili esclusivamente un problema di prestazioni o di denial of service. Denial of service significa rendere un'applicazione non disponibile o troppo lenta per essere utilizzata.
GitLab accetta regular expression fornite dagli utenti in diversi punti, comprese le configurazioni di continuous integration e continuous delivery (CI/CD), che automatizzano la compilazione, il testing e la release del software. L'azienda ha pubblicato quattro identificatori Common Vulnerabilities and Exposures (CVE) tra il 23 settembre e il 21 ottobre, rilasciando per ciascun problema una build di Ruby contenente le patch. Le prime due vulnerabilità, divulgate il 23 settembre, richiedono un account con cui sia stato effettuato l'accesso e ciascuna ha ricevuto un punteggio di gravità di 9,9 su 10.
Le altre due vulnerabilità non richiedono un account. CVE-2026-97229 è stata divulgata il 12 ottobre, mentre CVE-2026-110264 è seguita il 21 ottobre. A entrambe è stato assegnato il punteggio massimo di gravità, pari a 10,0. GitLab afferma che CVE-2026-110264 interessa tutte le versioni del suo prodotto a partire dalla 7.0. Un ricercatore indipendente ha segnalato tutte e quattro le vulnerabilità tramite il programma bug bounty di GitLab.
Al 23 ottobre, nessuna delle quattro vulnerabilità risultava presente nel catalogo Known Exploited Vulnerabilities della US Cybersecurity and Infrastructure Security Agency. Ruby non ha richiesto identificatori CVE separati per i tre bug di Onigmo, almeno per il momento, e ha consigliato agli utenti di fare invece riferimento ai quattro identificatori di GitLab. Ruby ha dichiarato che aggiornerà il proprio avviso se questa posizione dovesse cambiare.
L'assenza di record CVE specifici per Ruby crea un problema di visibilità per le scansioni automatizzate. I record di GitLab indicano GitLab come prodotto interessato, perciò uno scanner che confronti tali record con le versioni di Ruby installate non trova una corrispondenza diretta. Ruby ha assegnato identificatori CVE a correzioni simili nel 2022 e nel 2024, sebbene compilare regular expression da testo non attendibile sia da tempo considerato non sicuro. La sua documentazione attualmente descrive i pattern non attendibili soltanto come un rischio di denial of service.
Gli amministratori delle installazioni self-managed di GitLab devono applicare una release contenente la correzione per CVE-2026-110264. GitLab ha distribuito la correzione il 21 ottobre nelle versioni 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 e 18.11.13. Poiché GitLab include una propria copia di Ruby, l'upgrade di GitLab a una di queste release installa anche il runtime corretto tramite patch. GitLab.com utilizza già la versione corretta e GitLab ha dichiarato che i tenant Dedicated che utilizzano release interne recenti non devono intervenire.
GitLab ha inoltre pubblicato detection rule che gli amministratori self-managed possono utilizzare per cercare prove di tentativi di exploitation. Per le organizzazioni che cercano assistenza esterna per la manutenzione del software e la sicurezza dell'infrastruttura, AEU-I offre servizi IT, infrastruttura e consulenza con la sicurezza come priorità. La priorità immediata resta verificare l'effettiva versione di Ruby o di GitLab self-managed in uso, anziché affidarsi ai timeout dei pattern, ai limiti di lunghezza o alle scansioni delle vulnerabilità, che potrebbero non associare gli identificatori di GitLab a Ruby.