Rileva CVE-2026-19478 in GitLab CE/EE con un template Nuclei non distruttivo che attiva l'invocazione del metodo del campo di fallback GraphQL tramite touch e conferma le istanze vulnerabili senza chiamate distruttive.
Template di rilevamento non distruttivo Nuclei per CVE-2026-19478, una vulnerabilità critica (CVSS 9.4) di invocazione arbitraria di metodi non autenticata nell'API GraphQL di GitLab, corretta da GitLab il 17 agosto 2026.
Lo schema GraphQL di GitLab supporta una direttiva @gl_introduced(version: "X.Y.Z") che vincola un campo a una versione minima di GitLab. Quando la direttiva fa riferimento a una versione dell'istanza in esecuzione, GitLab genera un per il nome del campo (altrimenti sconosciuto). Questo resolver di fallback chiama direttamente sull'oggetto Ruby sottostante — , e affini — .
object.public_send(method_name)ProjectUserIl risultato: un attaccante non autenticato che può raggiungere /api/graphql e conosce il fullPath di qualsiasi progetto pubblico (o il nome utente di qualsiasi profilo pubblico) può invocare qualsiasi metodo pubblico senza argomenti su quell'oggetto. Questo include metodi di sola lettura come touch, ma anche metodi distruttivi come destroy / delete, e metodi che mutano lo stato come deactivate / block / ban.
Il template di questo repository chiama solo touch (aggiorna updated_at, restituisce true) — vedi Sicurezza qui sotto.
| Serie | Affette | Corretta |
|---|---|---|
| 18.2.x – 18.11.x | >= 18.2, < 18.11.11 | 18.11.11 |
| 19.0.x | < 19.0.8 | 19.0.8 |
| 19.1.x | < 19.1.6 | 19.1.6 |
| 19.2.x | < 19.2.4 | 19.2.4 |
Solo GitLab CE/EE self-managed — GitLab.com e GitLab Dedicated non sono stati interessati.
Questo template è volutamente reso innocuo per la scansione di flotte di server che sei autorizzato a testare:
touch tramite il campo di fallback (un metodo ActiveRecord che si limita ad aggiornare updated_at e restituisce true).destroy, delete, deactivate, block o ban — tutti raggiungibili tramite lo stesso bug e realmente distruttivi.root predefinito. Se nessuno dei due è raggiungibile, riporta semplicemente "non rilevato" anziché fare supposizioni.Non riutilizzare la query GraphQL di questo template per chiamare metodi di mutazione su sistemi che non possiedi o per i quali non hai un'autorizzazione scritta esplicita a testare.
| Passo | Richiesta | Scopo |
|---|---|---|
| 1 | GET /api/v4/projects?visibility=public | Trova un progetto pubblico da usare come bersaglio innocuo |
| 2 | POST /api/graphql — touch @gl_introduced(version: "999.0.0") su quel progetto | Attiva il resolver del campo di fallback; un'istanza vulnerabile restituisce "touch": true |
| 3 (fallback) | POST /api/graphql — stessa query su user(username: "root") | Usato solo se nessun progetto pubblico è stato trovato nel passo 1 |
Un'istanza corretta rifiuta direttamente il campo sconosciuto ("... doesn't exist on type ..."), quindi il matcher del template richiede il segnale positivo touch e l'assenza di quel messaggio di rifiuto.
# single target
nuclei -t CVE-2026-19478.yaml -u https://gitlab.example.com
# validate the template itself
nuclei -t CVE-2026-19478.yaml -validate
# a list of targets, JSON output
nuclei -t CVE-2026-19478.yaml -l targets.txt -j -o results.json
Richiede nuclei v3 (questo template utilizza il blocco di protocollo http: e un estrattore json in stile jq introdotti nel motore template v3; non verrà caricato su nuclei v2.x).
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
Aggiorna a 18.11.11, 19.0.8, 19.1.6 o 19.2.4 (o successive). Consulta le note di rilascio della patch 19.2.4 di GitLab per l'avviso completo.
Questo template è pubblicato per finalità di sicurezza difensiva — scansione di infrastrutture che possiedi o per le quali sei esplicitamente autorizzato a testare. Eseguirlo (o il PoC collegato) contro sistemi senza autorizzazione è illegale nella maggior parte delle giurisdizioni. L'autore non si assume alcuna responsabilità per un uso improprio.