Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach unauthenticated SSE MCP endpoint
-
DeliveryCall upload_markdown with file_path=/proc/self/environ
-
ExploitTraverse and read server environment file
-
ExecutionExfiltrate GITLAB_PERSONAL_ACCESS_TOKEN
-
ImpactAuthenticate to GitLab and take over account
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the server to be started with SSE transport enabled (SSE=true) - which the advisory states is the default for Docker deployments - because that mode exposes all MCP tools with no authentication and makes the endpoint network-reachable. The attacker must have network access to that SSE HTTP port and calls the upload_markdown tool with a traversal/absolute file_path (e.g. /proc/self/environ). Meaningful value requires the server to have been configured with a GITLAB_PERSONAL_ACCESS_TOKEN (or OAuth/job token) in its environment so that stolen credentials enable account takeover. LIMITING FACTORS: deployments using the stdio transport (SSE not set) do not expose the network tool surface; upgrading to 2.1.27 removes raw local-path reads in remote mode. |
| Impact | This is a genuine high-priority issue, not a high-CVSS-but-low-risk paper cut. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N) is corroborated by the description: in SSE transport mode (SSE=true) the MCP server exposes every tool with no authentication, and the description explicitly states this is the DEFAULT for Docker deployments - so the unauthenticated network vector applies to out-of-the-box installs, not an edge configuration. The path-traversal file read (CWE-22) chains directly into credential theft (/proc/self/environ → GITLAB_PERSONAL_ACCESS_TOKEN) and full GitLab account takeover, which supports the C:H/I:H/A:H triad, though note A:H/I:H are downstream consequences of stolen-token abuse rather than a direct availability/integrity impact in the tool itself. No EPSS score, no CISA KEV listing, and no public exploit code were provided, so despite the 9.8 there is no evidence of active exploitation at time of analysis - the risk is high potential rather than confirmed in-the-wild use. Conflicting/limiting signal to verify: exploitation requires SSE=true, so operators running the default stdio transport are not exposed; the '9.8 everywhere' impression should be tempered by that configuration gate even though Docker's default enables it. |
| Exploit ScenarioDerived | An attacker who can reach the MCP server's SSE HTTP port (default Docker deployment, no authentication) invokes the upload_markdown tool with file_path set to /proc/self/environ. The server reads that file and uploads it to a GitLab project, returning contents that include GITLAB_PERSONAL_ACCESS_TOKEN, which the attacker then uses to take over the associated GitLab account. No public exploit code was identified, but the attack is trivially scriptable given AV:N/AC:L/PR:N and the concrete file path named in the advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Unauthenticated path traversal in the @zereight/mcp-gitlab Model Context Protocol server prior to version 2.1.27 allows any network-reachable attacker to read arbitrary files from the server host and exfiltrate their contents into an attacker-accessible GitLab project upload, enabling theft of the server's GITLAB_PERSONAL_ACCESS_TOKEN from /proc/self/environ and resulting in full GitLab account takeover. The exposure exists in SSE transport mode (SSE=true), which the advisory states is the default configuration for Docker deployments and which serves all MCP tools without any authentication; the assessed severity is CVSS 3.1 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). No public exploit code and no CISA KEV entry were identified at time of analysis, but the attack requires only network access to the exposed SSE port and a single call to the upload_markdown tool.
RemediationAI
Upgrade to @zereight/mcp-gitlab 2.1.27 or later, which is the vendor-released patch per GHSA-cv3r-c5h8-f4g5 and which removes raw local-path handling from markdownUpload in remote mode and adds authenticated, expiring download tokens; verify the fix by confirming the image or package tag resolves to 2.1.27+. If upgrading immediately is not possible, the highest-value compensating control is to stop running the server in SSE mode: set SSE=false and use the stdio transport (side effect: the server is then reachable only by a locally spawned client process, which breaks browser or multi-client remote integrations), or, if SSE must stay enabled, place the SSE port behind a localhost-only bind or an authenticating reverse proxy and firewall so it is not reachable from untrusted networks (side effect: legitimate remote clients must then traverse the proxy and may break on long-lived SSE streams unless the proxy is configured for streaming). Because any successful read of /proc/self/environ may already have leaked the GitLab credential, rotate GITLAB_PERSONAL_ACCESS_TOKEN (and any OAUTH_ACCESS_TOKEN or GITLAB_JOB_TOKEN configured on the host) regardless of patching, and replace long-lived PATs with short-lived, least-privileged, project-scoped tokens so that a future disclosure has reduced blast radius (side effect: token automation and CI jobs must be updated to the new credential). Note that no vendor-released patch is needed for stdio-only deployments, but rotating credentials and restricting filesystem access for the server process remain prudent hardening steps.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
This is a Model Context Protocol (MCP) server that bridges MCP clients to the GitLab API. When started with SSE transport (SSE=true, and similarly the StreamableHTTP transport), the process exposes an HTTP endpoint that dispatches every registered MCP tool over the network with no authentication layer, so any client that can reach the port can invoke tools using the server's own configured GitLab credentials. The vulnerable tool, upload_markdown, originally accepted only a server-side file_path and passed it to filesystem reads without sanitization or confinement to an allowed directory; the root cause class is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory / Path Traversal). Because absolute and traversal paths such as /proc/self/environ are accepted, the read primitive becomes an arbitrary local file disclosure on Linux hosts, and because the tool's purpose is to upload content into a GitLab project, the disclosed bytes are written back out through the server's own authenticated GitLab session - turning local file read into exfiltration. The upstream fix (referenced PRs #482, #554, #622) adds encrypted, resource-bound, short-lived download tokens (AES-256-GCM with a per-process or DOWNLOAD_TOKEN_SECRET-derived key) for the download proxy, streams artifact downloads instead of buffering, and changes markdownUpload to accept inline base64 content plus an explicit filename as an alternative to raw local paths, removing the need for remote clients to specify server-local paths.
Know when Model Context Protocol gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Default Docker/SSE mode is unauthenticated and network-reachable (AV:N/AC:L/PR:N/UI:N); arbitrary file read plus stolen PAT yields full GitLab account takeover (C:H/I:H/A:H), scope unchanged.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
@zereight/mcp-gitlab is a Model Context Protocol server for GitLab. Prior to version 2.1.27, the SSE transport mode (SSE=true) exposes all MCP tools without any authentication. The upload_markdown tool reads arbitrary files from the server's local filesystem via an unsanitized file_path parameter and uploads them to a GitLab project. Combined, any unauthenticated network-reachable attacker can read /proc/self/environ to steal the server's GITLAB_PERSONAL_ACCESS_TOKEN and achieve full GitLab account takeover. This is the default configuration for Docker deployments. Version 2.1.27 contains a patch.
Articles & Coverage 2
Technical POC Analysis
We need answer JSON only.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 public PoC link from nuclei
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
The @zereight/mcp-gitlab Model Context Protocol server - the component that lets AI tooling interact with our GitLab environment - can be taken over by anyone with network access to its port in the configuration used by default in Docker deployments. An attacker needs no credentials: they can read files from the server and pull out the GitLab access token, effectively inheriting that service account's access to our repositories, pipelines and secrets. Every team relying on the affected GitLab instance should be treated as potentially exposed, and leadership should treat this as an urgent credential-compromise event rather than a routine component update.
Apply vendor patch.
Threat Model
4 threats: Information Disclosure, Elevation of Privilege, Spoofing and 1 more
5-step attack chain with trust boundaries and controls
Full threat model - attack chain, trust boundaries, controls per stage and evidence - is part of the Pro and Business plans.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
More in Model Context Protocol
View allAn issue was discovered in MariaDB MCP 0.1.0 allowing attackers to gain sensitive information via the SSE service as the
Scoped OAuth MCP tokens issued by TREK before 3.3.0 can pull complete trip summaries - trip metadata, itinerary days, ac
EUVD-2026-80008
GHSA-cv3r-c5h8-f4g5
NVD
CVE.org
EPSS
Exploit-DB