GitLab CVE-2026-97229: RCE non autenticata CVSS 10.0 nel compilatore regex CI/CD
GitLab CE/EE rilascia una RCE non autenticata CVSS 10.0 (CVE-2026-97229): una regex CI/CD manipolata esegue codice sul server. Aggiorna a 19.4.2/19.3.4/19.2.8.
Pubblicato da Zero Hunt, un red team AI autonomo su un'appliance on-premise con AI privata: penetration test automatizzato per reti e infrastrutture, in black box o gray box, con una persona che approva ogni passo che conta.
Il 12 ottobre 2026 GitLab ha pubblicato le patch 19.4.2, 19.3.4 e 19.2.8, e la correzione principale è grave quanto può esserlo un punteggio: CVE-2026-97229, una falla CVSS 10.0 che consente a un attaccante non autenticato di eseguire codice arbitrario su un server GitLab self-managed. Il meccanismo è un integer overflow nel compilatore di espressioni regolari della CI/CD: una regex manipolata ad arte in una configurazione CI/CD sfora i limiti interni e si traduce in esecuzione di codice sull'host. GitLab.com è già aggiornato e GitLab Dedicated non richiede interventi — ma ogni istanza CE/EE self-managed resta esposta finché non aggiorna.
Notizia in evoluzione — pubblicata alle 15:04 (13:04 UTC) del 12 ottobre 2026. Aggiornata man mano che vendor e CISA pubblicano.
In breve
| CVE | CVE-2026-97229 |
| Prodotto / versioni colpite | GitLab CE/EE self-managed · 19.2 prima di 19.2.8 · 19.3 prima di 19.3.4 · 19.4 prima di 19.4.2 |
| Corretta in | 19.4.2 · 19.3.4 · 19.2.8 — rilasciate il 12 ottobre 2026 |
| CVSS | 10.0 Critica · CVSS 3.1 · assegnato da GitLab (CNA) · AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Sfruttata attivamente | Nessuna evidenza dichiarata da GitLab o CERT-EU al 12 ottobre 2026 |
| CISA KEV | Non presente (versione catalogo 2026.10.08) |
| PoC pubblico | Nessuno pubblico al 12 ottobre 2026 |
| Advisory ufficiale | Patch release GitLab 19.4.2 |
Perché un CVSS 10.0 in GitLab è peggio che altrove
Un server GitLab non è un'applicazione accanto ai gioielli di famiglia: per la maggior parte delle organizzazioni di ingegneria è il gioiello di famiglia. Contiene il codice sorgente, le definizioni delle pipeline CI/CD, le deploy key, le credenziali del registry, i token cloud che i runner assumono e il materiale di firma delle release. Una RCE non autenticata su quella macchina è una compromissione della supply chain software sotto altro nome: chi esegue codice lì può leggere ogni repository, falsificare commit, avvelenare gli artefatti di build e spostarsi lateralmente in ogni ambiente raggiungibile dai runner.
Il vettore si merita il punteggio pieno onestamente. PR:N significa nessuna credenziale. AC:L significa nessuna race condition, nessuna precondizione esotica. S:C — scope changed — significa che il raggio d'azione esce dal componente vulnerabile e arriva all'intero host e alle relazioni di fiducia che lo circondano. È esattamente il profilo che gli attaccanti cercano scansionando Internet, e le istanze GitLab self-managed sono spesso esposte in rete per scelta, perché è così che sviluppatori remoti e contributori esterni le raggiungono.
Il compilatore regex CI/CD è ormai un recidivo
Ecco la parte che dovrebbe cambiare il modo in cui trattate questa patch. Tre settimane prima, GitLab aveva corretto CVE-2026-93577 nello stesso compilatore di espressioni regolari della CI/CD — anch'esso un integer overflow che porta all'esecuzione di codice arbitrario, valutato CVSS 9.9 e distribuito in 19.4.1 / 19.3.3 / 19.2.7. L'unica differenza sostanziale tra quel bug e questo è la riga che conta di più: CVE-2026-93577 richiedeva un utente autenticato; CVE-2026-97229 no.
"Il compilatore regex l'abbiamo già patchato la settimana scorsa." "Avete patchato un bug del compilatore regex la settimana scorsa. Questo è un CVE diverso nello stesso componente, e questo non chiede il login."
Due bug critici di integer overflow in un solo compilatore, a tre settimane di distanza, con il requisito di privilegio che scende da "autenticato" a "nessuno", non è una coincidenza da archiviare e dimenticare. È il segnale che il parser che gestisce espressioni regolari non fidate è una superficie molle, e che "abbiamo applicato la patch di settembre" non è la stessa affermazione di "quel percorso di codice non è più raggiungibile da una richiesta anonima nella nostra configurazione". La correzione di CVE-2026-97229 è arrivata tramite HackerOne; il ricercatore ha trovato la seconda porta dopo che la prima era stata chiusa. Date per scontato che altri stiano guardando nello stesso punto.
La patch sono 24 correzioni, non una
Le release del 12 ottobre chiudono 24 problemi di sicurezza — 1 critico, 5 alti, 14 medi, 4 bassi. Vale la pena nominare alcuni degli "alti" perché condizionano la priorità di aggiornamento oltre al 10.0:
- CVE-2026-92883 — cross-site scripting stored nell'evidenziazione della sintassi, CVSS 8.7.
- CVE-2026-16301 — autorizzazione impropria nel servizio di creazione delle downstream pipeline, CVSS 8.5.
- CVE-2026-14814 — espressione regolare troppo permissiva nell'accesso ai file di repository, CVSS 8.2.
- CVE-2026-96893 — neutralizzazione impropria dell'input usato per il prompting LLM nella GitLab Duo Agent Platform (solo EE), CVSS 7.3 — un bug della classe prompt-injection, a ricordare che l'assistente AI innestato sull'SCM è ormai parte della sua superficie d'attacco.
Nessuna di queste cambia la risposta, che è aggiornare subito. Significano però che, se state scaglionando il rollout, state chiudendo nello stesso momento un bypass di autorizzazione e un XSS, non solo la RCE.
Remediation
L'indicazione di CERT-EU nell'advisory 2026-016 è netta e corretta: aggiornare le istanze CE/EE self-managed il prima possibile, partendo da quelle esposte su Internet. Il runbook, in ordine:
- Sono interessato? Verificate la versione in esecuzione dall'Area di amministrazione, da
/help, o sulla macchina consudo gitlab-rake gitlab:env:info(Omnibus) ocat /opt/gitlab/version-manifest.txt. Tutto ciò che è su 19.2.x sotto 19.2.8, 19.3.x sotto 19.3.4, o 19.4.x sotto 19.4.2 è vulnerabile. GitLab.com e GitLab Dedicated sono già gestiti. - Patch — versioni corrette esatte. Aggiornate a 19.4.2, 19.3.4 o 19.2.8 a seconda del vostro branch. Attenzione al problema noto segnalato da GitLab: 19.3.4 ha un bug che riguarda le pagine delle merge request quando l'integrazione Ona è attiva, con fix atteso in 19.3.5 — tenetene conto se quell'integrazione è abilitata.
- Non potete patchare in quest'ora? Riducete l'esposizione. GitLab non ha pubblicato alcun workaround per CVE-2026-97229 — la correzione è l'aggiornamento. Fino ad allora, portate le istanze esposte dietro una VPN o una allowlist, e trattate la finestra come ostile anziché dare per scontato che l'assenza di un exploit pubblico vi faccia guadagnare tempo.
- Cercate segni di compromissione. GitLab non ha pubblicato indicatori per questo CVE, quindi cercate per comportamento, non per firma: esecuzioni inattese di job CI/CD, pipeline legate a configurazioni che nessuno ha scritto, registrazioni di runner nuovi o sconosciuti, e connessioni in uscita dall'host GitLab o dai suoi runner verso destinazioni non familiari. Mappate la revisione su MITRE ATT&CK T1190 (Exploit Public-Facing Application), T1195 (Supply Chain Compromise) e T1552.007 / T1552.001 (credenziali nella CI/CD e nei file) — le ultime due perché una RCE qui espone ogni segreto detenuto dai runner.
- Bonificate e verificate. Dopo la patch, ruotate ciò che il server potrebbe aver esposto mentre era vulnerabile: variabili e token CI/CD, token di registrazione dei runner, deploy key, credenziali di registry e cloud, e ogni personal/project access token con scope ampio. Poi confermate che la correzione tenga — non rileggendo la stringa di versione, ma ri-testando lo specifico percorso che era raggiungibile.
Validare la correzione, non il numero di versione
La verità scomoda in questa divulgazione è che una stringa di versione è un'affermazione, non una misura. La patch di settembre ha spostato il bug del compilatore regex da non autenticato a... ancora sfruttabile, solo autenticato — e tre settimane dopo è emersa la variante non autenticata. Leggere 19.4.2 su una pagina di amministrazione vi dice che un pacchetto è stato installato. Non vi dice se una richiesta anonima può ancora raggiungere il parser CI/CD nella vostra configurazione, se un runner è già stato toccato durante la finestra di esposizione, o se un token ruotato abbia davvero invalidato quello vecchio.
È in quello scarto che un red team AI autonomo si guadagna il posto. Zero Hunt esegue uno swarm di 10 agenti che identifica l'esatto prodotto e versione GitLab, poi — dato che per CVE-2026-97229 non esiste alcun PoC pubblico e riciclarne uno non è un'opzione — un agente di coding isolato genera un proof-of-concept per-bersaglio contro quella build, iterando in un container effimero finché non raggiunge dimostrabilmente l'esecuzione di codice o dimostra che non può. Lavora black-box per impostazione predefinita, come un attaccante non autenticato colpisce il percorso senza login; gira on-premise su modelli privati, così sorgente e segreti del sistema sotto esame non lasciano mai il vostro apparato; e ogni azione che conta attende un gate human-in-the-loop prima di toccare un SCM in produzione. Il risultato è un exploit riprodotto e depositato con la campagna, firmato al momento della scrittura — non un numero CVSS copiato in un ticket.
Patchare un componente recidivo è un problema di sequenza quanto di velocità, ed è qui che subentra l'AI Remediation Advisor di Zero Hunt: classifica il parco macchine per sfruttabilità reale — prima le istanze esposte su Internet, poi quelle che un runner compromesso potrebbe raggiungere — fornisce l'esatta release corretta per branch con note di rollout e rollback, la abbina alla lista di rotazione delle credenziali che una RCE rende obbligatoria, e ri-verifica con la stessa prova che ha dimostrato il problema. Per i team il cui SCM ricade sotto NIS2, DORA o SOC 2, quell'evidenza riprodotta e firmata è anche ciò che trasforma "abbiamo aggiornato" in qualcosa che un auditor può controllare. Se il vostro processo per trovare bug come questo è ancora un ingaggio annuale, la nostra scheda sul penetration testing automatizzato spiega perché la cadenza deve seguire quella delle divulgazioni — e la nostra precedente analisi del file read via commits API di GitLab mostra che non è il primo mese ad alta severità della piattaforma.
Cosa non si sa ancora
Alla prima pubblicazione: nessun record CVE è attivo su NVD per CVE-2026-97229 (riservato, in attesa di arricchimento), non è presente nel catalogo CISA KEV (versione 2026.10.08), e né GitLab né CERT-EU hanno segnalato sfruttamento in corso o un proof-of-concept pubblico. Il report HackerOne del ricercatore non è stato divulgato. Aggiorneremo questo articolo quando arriveranno la scheda NVD, un eventuale inserimento in KEV o segnalazioni di sfruttamento.
Tutte le vulnerabilità che CISA segnala come sfruttate, con le scadenze federali: tracker CISA KEV →
È sfruttabile nel tuo ambiente?
Zero Hunt lo verifica sulla tua rete: un red team AI autonomo su un'appliance on-premise, con AI privata, in black box o gray box e con una persona che approva ogni passo che conta. La prova di cosa è sfruttabile, la correzione e le evidenze firmate — nessun dato esce dal tuo perimetro.