Détecte CVE-2026-19478 dans GitLab CE/EE avec un template Nuclei non destructif qui déclenche l'invocation de la méthode du champ fallback de GraphQL via touch et confirme les instances vulnérables sans appels destructifs.
Modèle de détection Nuclei non destructif pour CVE-2026-19478, une faille critique (CVSS 9.4) d'invocation arbitraire de méthode non authentifiée dans l'API GraphQL de GitLab, corrigée par GitLab le 17 août 2026.
Le schéma GraphQL de GitLab prend en charge une directive @gl_introduced(version: "X.Y.Z") qui conditionne un champ à une version minimale de GitLab. Lorsque la directive référence une version que celle de l'instance en cours d'exécution, GitLab génère un pour le nom de champ (par ailleurs inconnu). Ce résolveur de repli appelle directement sur l'objet Ruby sous-jacent — , , etc. — .
object.public_send(method_name)ProjectUserRésultat : un attaquant non authentifié qui peut atteindre /api/graphql et connaît le fullPath d'un projet public quelconque (ou le nom d'utilisateur d'un profil public quelconque) peut invoquer toute méthode publique sans argument sur cet objet. Cela inclut des méthodes en lecture seule comme touch, mais aussi des méthodes destructrices comme destroy / delete, et des méthodes modifiant l'état comme deactivate / block / ban.
Le modèle de ce dépôt n'appelle jamais que touch (met à jour updated_at, renvoie true) — voir Sécurité ci-dessous.
| Version | Affectée | Corrigée |
|---|---|---|
| 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 |
GitLab CE/EE auto-hébergé uniquement — GitLab.com et GitLab Dedicated n'étaient pas concernés.
Ce modèle est volontairement neutralisé pour analyser des parcs de serveurs que vous êtes autorisé à tester :
touch via le champ de repli (une méthode ActiveRecord qui ne fait que mettre à jour updated_at et renvoyer true).destroy, delete, deactivate, block ou ban — toutes ces méthodes étant accessibles via la même faille et étant réellement destructrices.root. Si aucun des deux n'est accessible, elle signale simplement « non détecté » plutôt que de deviner.Ne réutilisez pas la requête GraphQL de ce modèle pour appeler des méthodes de mutation sur des systèmes qui ne vous appartiennent pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite de test.
| Étape | Requête | Objectif |
|---|---|---|
| 1 | GET /api/v4/projects?visibility=public | Trouver un projet public à utiliser comme cible inoffensive |
| 2 | POST /api/graphql — touch @gl_introduced(version: "999.0.0") sur ce projet | Déclencher le résolveur de champ de repli ; une instance vulnérable renvoie "touch": true |
| 3 (repli) | POST /api/graphql — même requête sur user(username: "root") | Utilisée uniquement si aucun projet public n'a été trouvé à l'étape 1 |
Une instance corrigée rejette directement le champ inconnu ("... doesn't exist on type ..."), le matcher du modèle exige donc le signal positif touch et l'absence de ce message de rejet.
# cible unique
nuclei -t CVE-2026-19478.yaml -u https://gitlab.example.com
# valider le modèle lui-même
nuclei -t CVE-2026-19478.yaml -validate
# une liste de cibles, sortie JSON
nuclei -t CVE-2026-19478.yaml -l targets.txt -j -o results.json
Nécessite nuclei v3 (ce modèle utilise le bloc de protocole http: et un extracteur json de type jq introduits dans le moteur de modèles v3 ; il ne se chargera pas sur nuclei v2.x).
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
Mettez à niveau vers 18.11.11, 19.0.8, 19.1.6 ou 19.2.4 (ou version ultérieure). Consultez les notes de version du correctif 19.2.4 de GitLab pour l'avis complet.
Ce modèle est publié à des fins de sécurité défensive — analyse d'infrastructures qui vous appartiennent ou pour lesquelles vous êtes explicitement autorisé à tester. L'exécuter (ou le PoC lié) contre des systèmes sans autorisation est illégal dans la plupart des juridictions. L'auteur décline toute responsabilité en cas d'utilisation abusive.