CVE-2026-61560 @zereight/mcp-gitlab: Unauthenticated arbitrary file read via `upload_markdown` enables PAT exfiltration and full account takeover
Unauthenticated attackers can read arbitrary files to steal GitLab tokens and take over accounts via the upload_markdown tool in the MCP server.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-61560?
CVE-2026-61560 is a critical path traversal vulnerability in zereight gitlab-mcp, published on 15 Sep 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.
Official description
`@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.
Weakness: CWE-22
Which versions are affected by CVE-2026-61560?
2 open source packages ship an affected version, including @zereight/mcp-gitlab.
| Package | Affected | Fixed in |
|---|---|---|
@zereight/mcp-gitlab npm | All versions | 2.1.27 |
@zereight/mcp-gitlab npm | All versions | 2.1.27 |
How do I fix CVE-2026-61560?
Upgrade @zereight/mcp-gitlab to 2.1.27 or later.
Upgrade, and resolve every user-supplied path against an allowed base folder before opening it. More about Path traversal.
Is CVE-2026-61560 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-61560 exists.
Public exploit code: 1 Nuclei template.
Sources
Also known as GHSA-cv3r-c5h8-f4g5.