Erkennt CVE-2026-19478 in GitLab CE/EE mit einer nicht-destruktiven Nuclei-Vorlage, die die GraphQL-Methodeninvokation des Fallback-Felds über touch auslöst und verwundbare Instanzen ohne destruktive Aufrufe bestätigt.
Nicht-destruktive Nuclei-Erkennungsvorlage für CVE-2026-19478, einen kritischen (CVSS 9.4) unauthentifizierten Fehler bei der beliebigen Methodeninvokation in der GitLab GraphQL API, der von GitLab am 17. August 2026 behoben wurde.
Das GraphQL-Schema von GitLab unterstützt eine @gl_introduced(version: "X.Y.Z")-Direktive, die ein Feld an eine Mindest-GitLab-Version bindet. Wenn die Direktive auf eine Version verweist, die ist als die laufende Instanz, erzeugt GitLab ein für den (ansonsten unbekannten) Feldnamen. Dieser Fallback-Resolver ruft direkt auf dem zugrunde liegenden Ruby-Objekt — , und weiteren — auf, .
object.public_send(method_name)ProjectUserDas Ergebnis: Ein nicht authentifizierter Angreifer, der /api/graphql erreichen kann und den fullPath eines beliebigen öffentlichen Projekts (oder den Benutzernamen eines beliebigen öffentlichen Profils) kennt, kann jede öffentliche Methode ohne Argumente auf diesem Objekt aufrufen. Das umfasst schreibgeschützte Methoden wie touch, aber auch destruktive wie destroy / delete sowie zustandsverändernde wie deactivate / block / ban.
Die Vorlage dieses Repos ruft ausschließlich touch auf (aktualisiert updated_at, gibt true zurück) — siehe Sicherheit unten.
| Version | Betroffen | Behoben |
|---|---|---|
| 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 |
Nur selbst verwaltetes GitLab CE/EE — GitLab.com und GitLab Dedicated waren nicht betroffen.
Diese Vorlage ist absichtlich entschärft, um Serverflotten zu scannen, die du testen darfst:
touch über das Fallback-Feld auf (eine ActiveRecord-Methode, die lediglich updated_at aktualisiert und true zurückgibt).destroy, delete, deactivate, block oder ban auf — alle sind über denselben Fehler erreichbar und tatsächlich destruktiv.root zurück. Ist keines erreichbar, wird einfach „nicht erkannt“ gemeldet, anstatt zu raten.Verwende die GraphQL-Abfrage in dieser Vorlage nicht zweckentfremdet, um mutierende Methoden gegen Systeme aufzurufen, die dir nicht gehören oder für die du keine ausdrückliche schriftliche Genehmigung zum Testen hast.
| Schritt | Anfrage | Zweck |
|---|---|---|
| 1 | GET /api/v4/projects?visibility=public | Öffentliches Projekt als harmloses Ziel finden |
| 2 | POST /api/graphql — touch @gl_introduced(version: "999.0.0") auf diesem Projekt | Fallback-Feld-Resolver auslösen; eine verwundbare Instanz gibt "touch": true zurück |
| 3 (Fallback) | POST /api/graphql — dieselbe Abfrage gegen user(username: "root") | Wird nur verwendet, wenn in Schritt 1 kein öffentliches Projekt gefunden wurde |
Eine gepatchte Instanz lehnt das unbekannte Feld rundweg ab ("... doesn't exist on type ..."), daher erfordert der Matcher der Vorlage das positive touch-Signal und das Fehlen dieser Ablehnungsmeldung.
# 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
Erfordert nuclei v3 (diese Vorlage verwendet den http:-Protokollblock und einen jq-artigen json-Extraktor, die in der v3-Vorlagen-Engine eingeführt wurden; sie wird unter nuclei v2.x nicht geladen).
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
Führe ein Upgrade auf 18.11.11, 19.0.8, 19.1.6 oder 19.2.4 (oder später) durch. Die vollständige Sicherheitsmeldung findest du in GitLabs Versionshinweisen zum 19.2.4-Patch-Release.
Diese Vorlage wird für defensive Sicherheitszwecke veröffentlicht — zum Scannen von Infrastruktur, die dir gehört oder für die du ausdrücklich zum Testen autorisiert bist. Die Ausführung (oder das verlinkte PoC) gegen Systeme ohne Autorisierung ist in den meisten Rechtsordnungen illegal. Der Autor übernimmt keine Haftung für Missbrauch.