FR
live

GitLab patches a critical 9.9 AI Gateway flaw that runs commands on self-hosted servers

On October 2, GitLab fixed a critical vulnerability (CVE-2026-90970, CVSS 9.9) that lets a logged-in user execute commands on the AI Gateway, the service that connects a GitLab instance to AI models. Only organizations that host their own gateway need to act: move to 19.2.4, 19.3.2 or 19.4.1 now.

A long service tunnel between two dark server rooms, a single amber indicator lamp lit above an access hatch left open.

October 2, 2026. GitLab ships a fix for a critical flaw in its AI Gateway, the service that connects a GitLab instance to large language models. October 2, 2026. The flaw, tracked as CVE-2026-90970, carries a CVSS score of 9.9 out of 10 — one tenth short of the maximum. October 2, 2026. CISA adds an assessment to the record that lists exploitation as “none”: no known attacks, no public proof of concept. Why it matters: a logged-in user with nothing more than Duo Agent Platform access can run commands on the gateway — the component sitting between your repository and your AI model.

What the flaw actually allows

The vulnerability does not sit in GitLab itself, but in the AI Gateway, the separate component that routes AI requests between the instance and the models. In practice, a logged-in user who holds Duo Agent Platform access can, under certain conditions, execute commands on the gateway.

The danger is asymmetric. The gateway is not a plain proxy: it often carries API secrets, keys to model providers, and the credentials of the service account that talks to the LLM. Running a command on that machine means reading those secrets, pivoting toward the model provider, or tampering with the responses developers receive.

The score of 9.9 — not 10 — reflects a precondition: the attacker must already be logged in and hold Duo Agent Platform access. It is therefore not a fully unauthenticated remote code execution from the internet, but an escalation inside the AI chain. That nuance does not reduce the urgency: organizations that host their gateway have exactly such privileged accounts, and one compromised account is enough to reach the machine holding the model secrets.

GitLab did not publish the full technical vector in its advisory, but the scope is unambiguous: only instances that host their own gateway are affected. Customers on GitLab.com, GitLab Dedicated, and self-managed instances using a GitLab-hosted gateway have nothing to do — the vendor already fixed those.

Who patches, and how

The fix ships in three gateway lines: 19.2.4, 19.3.2 and 19.4.1. The mapping table GitLab published leaves no room for guessing:

  • 18.1.6 or later, before 19.2.4 → upgrade to 19.2.4.
  • 19.3, before 19.3.2 → upgrade to 19.3.2.
  • 19.4, before 19.4.1 → upgrade to 19.4.1.

The affected range is wide: every gateway release from 18.1.6 through the 19.1 line is exposed, and no fixed version is published below 19.2.4. The three fixed lines (19.4, 19.3, 19.2) line up exactly with the GitLab versions that still receive security fixes under the vendor’s maintenance policy.

The gateway deploys as its own Docker image or Helm chart, with a separate update cadence — it does not update in lockstep with the instance. For a Docker deployment, stop and remove the container, then pull and run the new tag, for example self-hosted-v19.4.1-ee. For Helm, change the tag in the chart’s image setting.

bash
# Docker deployment: replace the container with the fixed tag
docker stop ai-gateway && docker rm ai-gateway
docker run -d --name ai-gateway \
  -e AIGW_AUTH__BYPASS_EXTERNAL=true \
  registry.gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/self-hosted-v19.4.1-ee:latest

Two details make the decision heavier. First, there is no workaround: an instance that cannot be updated yet stays exposed. Second, GitLab offers no way to check whether a gateway was attacked before it was patched — no indicators of compromise, no log to inspect first.

That manual step is the real risk. The gateway is deployed separately from the instance, updates on its own cadence, and often falls outside the patch-management scans that cover the GitLab application itself. A 9.9 left on an unpatched gateway is, for many teams, the result of that inventory blind spot — the component was never added to the list of things to scan. Add the gateway’s image tag to whatever tracks your container versions, and treat its upgrade as a first-class change rather than a follow-up to the GitLab release.

This flaw illustrates a structural shift in the job. For years, a code forge’s attack surface boiled down to the repository and the CI/CD runner. AI features grafted on a new privileged link: a service that talks to models, holds secrets and processes source code in cleartext, often deployed hastily because it is seen as a mere utility.

That Duo Agent Platform access — an agent-oriented feature — is enough to trigger the flaw says a lot. Security is no longer only about who can push code; it is about who can do what on the AI chain that assists it. One misconfigured role, and an account meant for test agents becomes a command-execution point on the gateway.

The absence of public exploitation should not lull anyone. CISA rates exploitation “none” as of October 2, but a network-facing — or near-network-facing — 9.9 RCE on a component holding model-provider secrets is exactly the kind of target ransomware and espionage groups quickly add to their toolkits once the patch is reverse-engineered.

After the patch: the audit the fix does not do

Moving to 19.2.4, 19.3.2 or 19.4.1 closes the door, but says nothing about what may have gone through while it was open. GitLab offers no indicators of compromise, which shifts onto the team the burden of checking whether the gateway was touched.

The first step is a secrets inventory. A self-hosted gateway does not just route requests: it typically holds an API key to the model provider, an access token to the GitLab instance, and sometimes a dedicated service account. Any secret that may have passed through the machine during the exposure window must be treated as compromised and rotated — rotation is not a precaution, it is the only defensible posture when you cannot prove the absence of intrusion.

The second is a role audit. The flaw triggers through Duo Agent Platform access, a recent feature often granted in a hurry for agent pilots. Re-list the holders of that privilege, revoke those who no longer need it, and treat the right as a strong privilege, on par with a CI/CD runner administrator. A leftover test account can be enough to turn the flaw into command execution.

The third is monitoring. Pipe the gateway’s logs into your SIEM, and alert on command execution, key access and unusual network egress. A component holding model-provider secrets deserves the same supervision as a secrets manager — and too many deployments still treat it as a plain utility with no logs.

Verdict

If you host your own AI Gateway, treat this patch as an emergency: move to 19.2.4, 19.3.2 or 19.4.1 now, starting with environments where the gateway touches sensitive code or data. Since no indicators of compromise are provided, review the gateway afterward — exposed secrets, service accounts, model-provider keys — and rotate anything that may have leaked. If you use a GitLab-hosted gateway, you have nothing to patch, but use the moment to audit who holds Duo Agent Platform access in your organization: that is the privilege that turns this flaw into command execution.

References

The cyber brief, every Tuesday

The flaws that matter and the patches to apply, in a ten-minute read.

No spam. One-click unsubscribe.
read next

On the same topic

The ubuntu-latest label moves to Ubuntu 26.04 and breaks workflows that pin nothing

On 17 September 2026 GitHub announced that the ubuntu-latest label is moving from Ubuntu 24.04 to 26.04, rolling out gradually between 19 October and 19 November 2026. The migration ships a JDK jump from 17 to 25, major-version bumps for Docker Compose and Helm, and the removal of a dozen preinstalled tools: workflows that don’t pin their runtime will break.

GitLab ties GitLab.com rate limits to your subscription to absorb AI agent traffic

Starting October 19, 2026, GitLab.com caps requests by subscription — 60 per hour per anonymous IP, 5,000/hour on Free, up to 25,000/hour on Ultimate — to absorb load from AI agents and automation. Authenticate your scripts and agents, and check your peaks before the October 7 and 14 brownout windows.

← Back to the feed

Type at least two characters.

↑ ↓ navigate ↵ open esc dismiss