CVE-2026-85706 — Scanner IOC et boîte à outils de détection pour la traversée de chemin GitLab. Détectez et traquez l'exploitation de la vulnérabilité critique de traversée de chemin non authentifiée dans GitLab CE/EE grâce au scan IOC, aux règles de détection Sigma, Suricata/Snort et SIEM.
Traversée de chemin non authentifiée dans l'API Repository Commits de GitLab CE/EE (CVSS 3.1 : 10.0, Critique) Statut : activement exploitée dans la nature · Inscrite au catalogue CISA KEV (2026-09-11, échéance 2026-09-14) · Corrigée par GitLab le 2026-09-10
Une boîte à outils gratuite et open-source de réponse aux incidents et de threat hunting pour CVE-2026-85706 — une vulnérabilité critique de traversée de chemin non authentifiée dans GitLab Community Edition (CE) et Enterprise Edition (EE) affectant l'API repository commits. Ce dépôt fournit aux équipes de sécurité, aux analystes SOC, aux ingénieurs en détection et aux administrateurs GitLab un scanner IOC (Indicators of Compromise) prêt à l'emploi, des règles de détection Sigma / Suricata / Snort, des requêtes de hunting Splunk / Elastic / OpenSearch, et un guide de remédiation étape par étape — tout ce dont vous avez besoin pour détecter les tentatives d'exploitation, confirmer l'état du correctif et répondre à cette vulnérabilité zero-day / n-day de GitLab rapidement.
🔎 Vous cherchez le chemin le plus rapide pour savoir si vous êtes affecté ? Rendez-vous à la section Démarrage rapide.
🚨 Vous cherchez vers quelle version mettre à jour ? Rendez-vous à la section Versions corrigées et correctif.
| Identifiant CVE | CVE-2026-85706 |
| Éditeur / Produit | GitLab Community Edition (CE) et Enterprise Edition (EE), auto-hébergé |
| Classe de vulnérabilité | Traversée de chemin (CWE-35), appartenant à la famille plus large de la limitation incorrecte d'un nom de chemin (CWE-22) |
| Composant affecté | API Repository Commits (/api/v4/projects/:id/repository/commits...) |
| Cause racine | Confinement de chemin incorrect combiné à une absence d'application de l'authentification dans le point de terminaison API affecté |
| Versions affectées | GitLab CE/EE 18.7 jusqu'à (non inclus) 19.1.8, 19.2 jusqu'à (non inclus) 19.2.6, 19.3 jusqu'à (non inclus) 19.3.2 |
| Authentification requise | Aucune — exploitation non authentifiée, pré-authentification |
| Vecteur d'attaque | Réseau, une seule requête HTTP |
| Score CVSS 3.1 | 10.0 (Critique) |
| Impact | Lecture arbitraire de fichiers sur le serveur GitLab — fichiers de configuration, secrets, jetons, code source, potentiellement clés SSH et identifiants de base de données |
| Rapporté par | Chercheur en sécurité externe (pseudonyme HackerOne « s3ntago »), via le programme de bug bounty HackerOne de GitLab |
| Divulgué / Corrigé | 10 septembre 2026 — dans le cadre d'une version de sécurité critique de GitLab corrigeant 17 vulnérabilités au total (voir Vulnérabilités associées) |
| CISA KEV | Ajoutée le 11 septembre 2026 ; remédiation fédérale civile exigée avant le 14 septembre 2026 ; la CISA a signalé que cette CVE est soumise à un triage forensique au titre de la directive opérationnelle contraignante (BOD) 26-04, ce qui reflète la possibilité que des systèmes vulnérables aient déjà été accédés avant la mise à jour |
| Statut d'exploitation | Scanning / sondage actif confirmé observé dans la nature — watchTowr a rapporté les premières tentatives d'exploitation in-the-wild environ après la divulgation publique, avec une exploitation massive jugée probable dans la foulée |
Un attaquant non authentifié peut envoyer une seule requête HTTP forgée à
l'API repository commits de GitLab, en fournissant un paramètre file.path (ou
file_path) contenant des séquences de traversée de répertoire
(../, variantes encodées en URL, etc.), et obtenir du serveur qu'il renvoie le
contenu de fichiers arbitraires en dehors du répertoire de dépôt prévu —
y compris le fichier de secrets de GitLab lui-même, la configuration de la base de données, les clés privées
SSH et d'autres données sensibles côté serveur. Comme aucun identifiant n'est
requis et que la requête est triviale à construire, GitLab et des chercheurs
tiers évaluent cette vulnérabilité à la sévérité maximale (CVSS 10.0) et la CISA a
confirmé une exploitation active dans la nature.
gitlab-secrets.json, database.yml ou des jetons de runner CI/CD peut pivoter
vers un accès bien plus profond que ne le suggère la seule lecture de fichier initiale.GitLab a corrigé CVE-2026-85706 dans les versions suivantes le 2026-09-10 :
Toute instance GitLab CE/EE auto-hébergée sur un niveau de correctif antérieur au sein
de ces branches — ou sur une branche majeure/mineure plus ancienne — doit être
considérée comme vulnérable et mise à niveau immédiatement. L'offre SaaS de GitLab.com
est corrigée directement par GitLab et ne nécessite aucune action du client.
Voir docs/remediation.md pour un guide complet
de mise à niveau et de réponse aux incidents, étape par étape.
Note de mise à niveau : sur les instances GitLab mono-nœud, la mise à niveau vers ces versions implique un temps d'arrêt pendant que les migrations de base de données se terminent avant le redémarrage de GitLab. Les instances multi-nœuds peuvent appliquer le correctif sans temps d'arrêt en suivant la procédure de mise à niveau sans interruption documentée par GitLab. La version 19.3.2 inclut également des migrations post-déploiement qui s'exécutent après la fin de la mise à niveau — tenez-en compte dans votre fenêtre de maintenance.
CVE-2026-85706 était le problème principal d'une version de sécurité critique de GitLab couvrant 17 vulnérabilités au total. Deux autres problèmes de la même version méritent d'être suivis en parallèle, car ils affectent une surface d'attaque et un risque d'exposition d'identifiants/secrets similaires :
| Vulnérabilité | Sévérité | Notes |
|---|---|---|
| CVE-2026-85706 — Traversée de chemin dans l'API repository commits | Critique (CVSS 10.0) | Lecture arbitraire de fichiers non authentifiée — le sujet de ce dépôt |
| Désérialisation non sécurisée dans le sérialiseur d'abonnement GraphQL (GitLab EE) | Critique | Affecte uniquement GitLab EE ; les failles de désérialisation de ce type peuvent potentiellement conduire à une exécution de code à distance selon l'exploitabilité |
| Débordement de tampon dans le wrapper de conversion Unicode (GitLab EE) | Élevée | |
| Le test de Scheduled Pipeline Execution Policy permet aux Developers d'accéder à des variables CI/CD protégées | Élevée | Risque d'exposition d'identifiants/secrets pertinent pour les mêmes actions de réponse « protégez vos secrets CI/CD » dans le guide de remédiation de ce dépôt |
| Cross-Site Scripting dans le moteur de rendu de tableaux JSON Markdown (CE/EE) | Élevée | |
| Autorisation incorrecte dans le matcher de portée des variables d'environnement CI/CD (CE/EE) | Élevée | |
| Déni de service dans le limiteur de complexité GraphQL (CE/EE) | Élevée | |
| Authentification incorrecte dans l'application des restrictions de connexion SAML SSO (CE/EE) | Moyenne | |
| Identifiants insuffisamment protégés dans les émetteurs senddata de Workhorse (CE/EE) | Moyenne | |
| Plusieurs autres problèmes de contournement d'autorisation et de contrôle d'accès dans les règles d'approbation d'environnements protégés et les cadres de conformité (EE) | Moyenne |
À retenir en pratique : si vous appliquez le correctif pour CVE-2026-85706, vous intégrez déjà les correctifs de tout ce qui précède dans la même version 19.3.2 / 19.2.6 / 19.1.8 — il n'y a aucune raison de corriger uniquement CVE-2026-85706 et de reporter le reste. Considérez cela comme une seule version à appliquer dans son intégralité, et non comme un menu de correctifs planifiables indépendamment.
gitlab-cve-2026-85706-ioc/ ├── README.md ← you are here ├── LICENSE ← MIT ├── CHANGELOG.md ├── CONTRIBUTING.md ├── SECURITY.md ├── scanner/ │ ├── gitlab_cve_2026_85706_ioc_scanner.py ← main IOC scanner (stdlib-only Python 3) │ └── requirements.txt ← documents "no dependencies needed" ├── detection/ │ ├── sigma_rule_gitlab_cve_2026_85706.yml ← Sigma rule (SIEM-agnostic) │ ├── network_ids_cve_2026_85706.rules ← Suricata/Snort signatures │ └── siem_hunting_queries.md ← Splunk / Elastic / OpenSearch / grep queries ├── docs/ │ ├── ioc_list.md ← full IOC reference (network, host, post-exploitation) │ ├── remediation.md ← patch & incident-response playbook │ └── timeline.md ← public disclosure & exploitation timeline ├── tests/ │ ├── test_scanner.py ← unit tests (stdlib unittest) │ └── fixtures/sample_production_json.log ← sanitized sample log for testing └── .github/workflows/ci.yml ← GitHub Actions: lint, test, smoke-test on every push
---
## 🚀 Démarrage rapide
### 1. Analysez vos journaux GitLab à la recherche d'IOC
Le scanner est **en Python 3 pur, bibliothèque standard uniquement** — aucun `pip install`
requis, vous pouvez donc copier uniquement ce fichier sur un hôte GitLab verrouillé
et l'exécuter immédiatement.```bash
git clone https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc.git
cd gitlab-cve-2026-85706-ioc
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py \
--production-log /var/log/gitlab/gitlab-rails/production_json.log \
--api-log /var/log/gitlab/gitlab-rails/api_json.log \
--nginx-log /var/log/gitlab/nginx/gitlab_access.log \
--format json --out report.json
Le code de sortie 1 signifie qu'au moins un IOC potentiel a été trouvé — consultez
report.json immédiatement. Le code de sortie 0 signifie qu'aucune correspondance n'a été trouvée dans
les journaux que vous avez fournis (voir Limitations — cela
ne constitue pas une garantie de compromission).
Vous pouvez également le pointer vers n'importe quel journal arbitraire/rotatif avec --generic-log
(option répétable), et choisir --format text|json|csv pour le rapport.
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py --check-version 19.2.3
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py --check-version 19.2.6
### 3. Déployer les règles de détection vers votre SIEM / IDS
- Importez [`detection/sigma_rule_gitlab_cve_2026_85706.yml`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/sigma_rule_gitlab_cve_2026_85706.yml)
dans votre pipeline compatible Sigma (Splunk via `sigma-cli`, Elastic
Detection Rules, Microsoft Sentinel, Chronicle, etc.).
- Déployez [`detection/network_ids_cve_2026_85706.rules`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/network_ids_cve_2026_85706.rules)
vers Suricata ou Snort — **commencez en mode alerte seule** et ajustez les SIDs/seuils
à votre environnement avant d'activer le blocage.
- Copiez/collez les requêtes prêtes à l'emploi depuis
[`detection/siem_hunting_queries.md`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/siem_hunting_queries.md)
pour Splunk (SPL), Elastic/Kibana (KQL + DSL), OpenSearch (PPL), et le triage
en `ripgrep`/`grep` simple.
---
## Fonctionnement du scanner
`gitlab_cve_2026_85706_ioc_scanner.py` analyse les journaux JSON structurés de GitLab
(`production_json.log`, `api_json.log`) ainsi que les journaux d'accès génériques de reverse-proxy au format combiné, et signale les requêtes qui correspondent au modèle d'exploitation publiquement documenté pour CVE-2026-85706 :
1. **Correspondance d'endpoint** — le chemin de la requête atteint la famille d'endpoints vulnérables :
`/api/v4/projects/:id/repository/commits` et ses sous-ressources.
2. **Correspondance de paramètre** — un paramètre de style `file.path` / `file_path` / `path`
est présent dans la chaîne de requête, le corps de formulaire ou le corps JSON.
3. **Correspondance de payload** — la valeur de ce paramètre contient une séquence de path-traversal
(`../`, encodée URL, doublement encodée, UTF-8 surlong, et
variantes de segments de chemin avec point-virgule) **ou** référence un fichier cible sensible connu
(`/etc/passwd`, `gitlab-secrets.json`, `secrets.yml`,
`database.yml`, clés privées SSH, etc.).
4. **Contexte d'authentification** — le scanner vérifie la présence de `PRIVATE-TOKEN`,
`Authorization`, ou d'un champ `user_id` non nul pour déterminer si la
requête était authentifiée, correspondant à la condition d'exploitation **non authentifiée / pré-auth**
centrale pour ce CVE.
5. **Heuristique de débit** — indépendamment de la correspondance de payload, les IP sources effectuant
un volume anormalement élevé de requêtes vers l'API commits dans une courte
fenêtre sont signalées comme reconnaissance probablement automatisée.
Les résultats sont notés **CRITICAL / HIGH / MEDIUM** et exportés en
JSON structuré, CSV, ou texte lisible par l'humain pour le triage.
## Exemple de sortie```text
CVE-2026-85706 IOC Scan Report — 2 finding(s)
============================================================
[CRITICAL] 2026-09-11T02:14:33.120Z src=203.0.113.9 method=POST auth=False
path: /api/v4/projects/42/repository/commits/HEAD
matched: ../../../../etc/passwd
reason: path-traversal sequence in file path parameter; known sensitive/system file referenced; unauthenticated request (matches pre-auth exploitation condition)
log: production_json.log
[CRITICAL] 2026-09-11T02:16:45.501Z src=203.0.113.9 method=POST auth=False
path: /api/v4/projects/17/repository/commits/abc123
matched: ..%2f..%2f..%2fopt%2fgitlab%2fembedded%2fservice%2fgitlab-rails%2fconfig%2fsecrets.yml
reason: path-traversal sequence in file path parameter; unauthenticated request (matches pre-auth exploitation condition)
log: production_json.log
(Généré à partir de l'échantillon assaini dans tests/fixtures/.)
Les détails complets, y compris les indicateurs basés sur l'hôte et post-exploitation, se trouvent dans
docs/ioc_list.md. Indicateurs réseau principaux :
/api/v4/projects/<id>/repository/commits*file.path / file_path contenant ../, %2e%2e%2f,
..%2f, %252e%252e%252f, ou des séquences de traversée similaires/etc/passwd, /etc/shadow, gitlab-secrets.json,
secrets.yml, database.yml, id_rsa, .env, ou
/opt/gitlab/embedded/service/gitlab-rails/config/secrets.ymlPRIVATE-TOKEN / Authorization
valide ni session authentifiée| Fichier | Plateforme | Objectif |
|---|---|---|
detection/sigma_rule_gitlab_cve_2026_85706.yml | Sigma (agnostique du SIEM) | Règle de détection basée sur les journaux, convertible vers Splunk, Elastic, Sentinel, Chronicle, QRadar, etc. |
detection/network_ids_cve_2026_85706.rules | Suricata / Snort | Signatures réseau pour capteurs IDS/IPS en ligne |
detection/siem_hunting_queries.md | Splunk, Elastic/Kibana, OpenSearch, grep/ripgrep | Requêtes de chasse prêtes à copier-coller pour une investigation manuelle/ponctuelle |
Consultez le playbook complet dans docs/remediation.md.
Résumé :
GitLab.com (SaaS) est-il affecté ? Aucune action client n'est requise pour GitLab.com — GitLab corrige sa plateforme SaaS directement. Cet outillage concerne les instances GitLab CE/EE auto-hébergées.
L'authentification est-elle nécessaire pour être exploité ? Non — c'est ce qui donne à cette CVE un score CVSS de 10.0. Il s'agit d'une traversée de chemin non authentifiée contre un seul point de terminaison d'API.
Existe-t-il un exploit / PoC public disponible ?
À ce jour, aucune preuve de concept publique confirmée n'a été
identifiée, bien qu'un scan/sondage actif ait été observé. Ce
dépôt ne contient ni ne référence de code d'exploitation — voir
CONTRIBUTING.md pour en connaître la raison, et consultez toujours
l'avis officiel GitLab CVE-2026-85706
pour les dernières recommandations du fournisseur.
Le scanner me dira-t-il avec certitude si j'ai été compromis ? Aucun outil ne peut le garantir. Il effectue une détection au mieux en fonction des journaux que vous fournissez. Voir Limitations et avertissement.
Quelle rétention de journaux me faut-il ?
La rotation par défaut des journaux de GitLab peut ne pas conserver les journaux jusqu'à la date
de divulgation (2026-09-10). Récupérez-les depuis votre SIEM/archive de journaux centralisé si vos
journaux sur l'hôte ont déjà été soumis à rotation — voir la note dans
detection/siem_hunting_queries.md.
Ce dépôt fonctionne-t-il pour les déploiements GitLab Helm/Kubernetes ou Docker ?
Oui, tant que vous pouvez exporter production_json.log / api_json.log (ou
vos journaux d'accès ingress/reverse-proxy) vers un fichier que le scanner peut lire ;
utilisez --generic-log pour tout ce qui sort des trois types de journaux nommés.
Quelles versions exactement sont affectées ? GitLab CE/EE 18.7 jusqu'à (non compris) 19.1.8, 19.2 jusqu'à (non compris) 19.2.6, et 19.3 jusqu'à (non compris) 19.3.2. Toute version antérieure à la branche 18.7 est également non prise en charge/en fin de vie et doit être traitée comme vulnérable et mise à niveau indépendamment.
Cela a-t-il réellement été exploité, ou simplement « à risque » ? Exploitation confirmée. watchTowr Labs a observé les premières tentatives d'exploitation en conditions réelles environ 24 heures après la divulgation publique de GitLab, et la CISA a par la suite ajouté CVE-2026-85706 à son catalogue KEV précisément parce qu'elle a confirmé une exploitation réelle — il ne s'agit pas d'une découverte théorique ou de « divulgation responsable uniquement ».
Que signifie pour moi la désignation de « triage forensique » de la CISA BOD 26-04 ?
La CISA a signalé cette CVE comme nécessitant un triage forensique en vertu de la Binding
Operational Directive 26-04, ce qui signifie que l'hypothèse pour les systèmes fédéraux est
qu'une instance vulnérable exposée à internet a peut-être déjà été
accédée avant d'être corrigée — et non simplement théoriquement exposée. La
même hypothèse est une valeur par défaut raisonnable pour toute organisation : traitez
l'application du correctif comme la première étape d'un processus de réponse à incident, et non comme sa fin.
Voir docs/remediation.md pour la liste complète de vérification en cas de présomption d'intrusion
(rotation des secrets, revue des identifiants, audit CI/CD).
Autre chose a-t-il été corrigé dans la même version de GitLab ? Oui — la version du 10 septembre 2026 a corrigé 17 problèmes de sécurité au total, dont un second problème de gravité Critique (désérialisation non sécurisée dans le sérialiseur d'abonnement GraphQL, GitLab EE) et un débordement de tampon de gravité Élevée dans un wrapper de conversion Unicode. Voir Vulnérabilités connexes corrigées dans la même version. Comme toutes ces corrections sont livrées dans les mêmes versions 19.3.2 / 19.2.6 / 19.1.8, l'application du correctif pour CVE-2026-85706 les remédie également.
docs/ioc_list.md.CONTRIBUTING.md pour la politique de périmètre du projet.Les contributions de nouveaux IOC, de ports de règles de détection, de rapports de faux positifs,
et d'améliorations du scanner sont les bienvenues — voir
CONTRIBUTING.md pour les directives (y compris la
politique d'absence de code d'exploitation et les exigences d'assainissement des données).
Les détails complets des citations et le contexte supplémentaire se trouvent dans
docs/timeline.md.
Publié sous la licence MIT. Le contenu de détection (Sigma, règles Suricata/Snort, requêtes SIEM) est fourni tel quel à des fins défensives ; ajustez les seuils et la gestion des faux positifs à votre propre environnement avant de vous y fier en production.
CVE-2026-85706 GitLab CVE-2026-85706 GitLab path traversal GitLab vulnerability GitLab IOC GitLab indicators of compromise GitLab security advisory GitLab exploit detection GitLab CVSS 10.0 GitLab CISA KEV GitLab repository commits API vulnerability GitLab unauthenticated file read GitLab arbitrary file read path traversal CVE 2026 GitLab patch 19.3.2 GitLab patch 19.2.6 GitLab patch 19.1.8
GitLab secrets exposure GitLab CI/CD credential theft Sigma rule GitLab Suricata rule GitLab Snort rule GitLab Splunk GitLab hunting
GitLab incident response GitLab threat hunting self-managed GitLab security
| PoC public | Non confirmé comme disponible publiquement au moment de la rédaction |
| GitLab.com / Dedicated | GitLab.com (SaaS) était déjà corrigé lors de la divulgation ; les clients GitLab Dedicated n'ont pas eu à agir. Seules les instances CE/EE auto-hébergées nécessitent une action |