CVE
GitLab CE/EE · critical · CVSS 3.1 10.0 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N)Updated September 30, 2026

CVE-2026-85706: GitLab repository commits API lets unauthenticated users read files

What the GitLab path traversal in CISA's KEV catalog does, the affected and fixed versions, how to find GitLab in your clusters, and how to search GitLab's API log for exploitation attempts.

Short answer

CVE-2026-85706 lets an unauthenticated user, under conditions GitLab does not list, read arbitrary files from a GitLab server through the repository commits API, and it affects GitLab CE/EE from 18.7 before 18.11.12, 19.0 before 19.0.9, 19.1 before 19.1.8, 19.2 before 19.2.6 and 19.3 before 19.3.2.

01

What the vulnerability does

GitLab's advisory says that, under certain conditions, an unauthenticated user could read arbitrary files from the GitLab server, due to improper path confinement and missing authentication enforcement in the repository commits API. GitLab scores it CVSS 3.1 10.0.

CISA added CVE-2026-85706 to its Known Exploited Vulnerabilities catalog on 11 September 2026 and marks it for forensic triage. GitLab's published detections look for unauthenticated POST requests to /api/v4/projects/:id/repository/commits or /repository/files carrying a metadata.path or file.path parameter, including attempts to read gitlab.yml, secrets.yml, database.yml and gitlab-secrets.json.

GitLab does not list the conditions. Orca reports that one public project on the instance is enough, and that attackers go after database credentials, SSH keys, deploy tokens, CI/CD variables and configuration files.

02

Affected and fixed versions

From GitLab's patch release. GitLab says that when no deployment type is named, all types are affected, which includes the Helm chart. GitLab.com is already patched and GitLab Dedicated customers need no action.

  • Affected: all versions from 18.7 before 18.11.12, 19.0 before 19.0.9, 19.1 before 19.1.8, 19.2 before 19.2.6, and 19.3 before 19.3.2.
  • Fixed: 19.3.2, 19.2.6 and 19.1.8, released 10 September 2026; 19.0.9 and 18.11.12, backported on 23 September 2026.
  • Versions before 18.7 are outside the affected range the advisory gives.
  • The advisory lists no workaround.

03

Find GitLab in your clusters

Find the GitLab pods, read the version from the image tag, and check whether a Service or Ingress puts the instance in front of networks you do not control. The flaw needs no account, so any address that reaches the web interface is enough.

ShellGitLab pods, their images, and how they are exposed
kubectl get pods -A -o custom-columns=\
NS:.metadata.namespace,POD:.metadata.name,\
'IMAGE:.spec.containers[*].image' | grep -i gitlab

kubectl get svc,ingress -A | grep -i gitlab
Compare the version in the image tag with the fixed version for its release line.

04

What Kubernetes can show, and what is the reliable check

The Kubernetes API shows the version and the exposure. It cannot show whether files were read: the read is an HTTP request answered by GitLab's own process, which starts no new process and changes no Kubernetes object, so process activity on the node will not show it either.

The reliable check is GitLab's API log, api_json.log, which GitLab's detections are built on. On Helm chart installs it is on the Webservice pods under the subcomponent "api_json" key; on Linux package installations it is /var/log/gitlab/gitlab-rails/api_json.log. kubectl logs only returns what the current container still holds, so search your log store for older requests.

ShellSearch the API log for path parameters
# Helm chart: Webservice pods
kubectl logs -n <ns> <webservice-pod> \
  --all-containers | grep api_json \
  | grep -iE 'repository/(commits|files)' \
  | grep -iE '(metadata|file)(\.|%2e)path' \
  | grep -vE '/uploads/tmp/|/tmp/gitlab/'

# Linux package installation in a pod
kubectl exec -n <ns> <pod> -- grep -iE \
  '(metadata|file)(\.|%2e)path' \
  /var/log/gitlab/gitlab-rails/api_json.log
GitLab's detections exclude /uploads/tmp/ and /tmp/gitlab/, which legitimate uploads use. Matches from callers whose meta.client_id starts with ip/, meaning unauthenticated, are the ones to investigate.

05

Fixing it

Upgrade to 18.11.12, 19.0.9, 19.1.8, 19.2.6 or 19.3.2, or later. GitLab recommends upgrading all affected self-managed installations immediately.

Upgrading does not undo a read that already happened. If the log shows requests that named files like gitlab-secrets.json or database.yml, treat the secrets in them as exposed and rotate them.

Frequently asked questions

Are GitLab Helm chart installations affected?
Yes. GitLab's patch release says that when no deployment type is named, all types are affected, and this advisory names none. Upgrade the chart to a release that ships a fixed GitLab version.
Does an attacker need a GitLab account?
No. GitLab's advisory describes an unauthenticated user reading files, under conditions it does not list. Orca reports that one public project on the instance is enough.
Is GitLab.com affected?
GitLab says GitLab.com is already running the patched version and GitLab Dedicated customers need no action. The upgrade is for self-managed installations.
Is there a workaround if I cannot upgrade today?
GitLab's advisory lists none. Reducing who can reach the instance lowers exposure while you upgrade, but the upgrade is the fix.

Sources and references

  1. GitLab Patch Release: 19.3.2, 19.2.6, 19.1.8

    GitLab, September 2026

  2. Log system: api_json.log

    GitLab

  3. Detection: GitLab LFI via metadata.path parameter

    GitLab Security

  4. Detection: GitLab LFI attempt reading gitlab.yml

    GitLab Security

  5. Known Exploited Vulnerabilities Catalog: CVE-2026-85706

    CISA, added 11 September 2026

  6. GitLab Critical Path Traversal Flaw Exploited in the Wild

    Orca, September 2026

Keep reading

From the engineering blog

All articles