Critical GitLab Flaw Exposes Public Projects to Deletion — Two CVEs Patched, Including High-Severity CSRF
CVE-2026-19478 is a critical code injection vulnerability in GitLab CE/EE that allows an unauthenticated attacker to modify or delete public projects and user data by abusing a GraphQL directive. A second high-severity issue, CVE-2026-19650, involves cross-site request forgery in the GraphQL multiplex query handler. This article examines how the critical vulnerability works, the availability of a public proof-of-concept, the potential impact on self-managed instances, the affected versions, and the security updates released to remediate both issues.
Summary
GitLab has released security patches for two vulnerabilities, including a critical-severity code injection flaw (CVE-2026-19478) that can be exploited without authentication to modify or delete public projects and user data. The second vulnerability (CVE-2026-19650) is a cross-site request forgery issue in the GraphQL multiplex query handler. GitLab urges all self-managed installations to upgrade immediately to the patched versions.
Vulnerability Details
| CVE ID | CVSS Score | EPSS Score | Type |
|---|---|---|---|
| CVE-2026-19478 | 9.4 (Critical) | 0.72% | CWE-94 : Code Injection |
| CVE-2026-19650 | 7.1 (High) | 0.24% | CWE-352 : Cross-Site Request Forgery |
Technical Information
CVE-2026-19478 — Code Injection via GraphQL Directive
Under certain conditions, an unauthenticated attacker can abuse a GraphQL directive to remotely modify or delete public projects and user data. The flaw stems from improper handling of the directive during query resolution, which can result in unintended method calls on underlying objects. Because the attack requires no authentication and no user interaction, any internet-facing self-managed instance with publicly accessible projects is at elevated risk.
CVE-2026-19650 — CSRF in GraphQL Multiplex Query Handler
Improper request validation in the GraphQL multiplex query handler can allow an unauthenticated attacker to execute mutations through GET requests. Exploitation requires user interaction, typically by tricking an authenticated user into visiting a crafted link. While less severe than the critical code injection issue, successful abuse can still lead to unauthorized changes within the application.
Proof of Concept Analysis
A public proof-of-concept for CVE-2026-19478 has been published. It demonstrates how an unauthenticated attacker can abuse a GraphQL directive to trigger unintended method calls on GitLab objects such as projects or users, potentially leading to modification or deletion of public data.
The exploitation flow can be understood in the following high-level stages:
1. Target Identification
The attacker first identifies a publicly visible project or user on the target GitLab instance. Because the vulnerability does not require authentication, any publicly resolvable object can serve as a target.
2. Abuse of the GraphQL Directive
The core of the issue lies in how GitLab processes a specific GraphQL directive related to versioned fields. Under certain conditions, an attacker-controlled field name in the query is incorrectly treated as a method call on the underlying object instead of being rejected as an invalid field. This allows the attacker to influence which method is invoked on the target object during query resolution.
3. Triggering the Vulnerability
The attacker sends a crafted GraphQL request to the publicly accessible GraphQL endpoint. No authentication or user interaction is required. When the vulnerable code path is reached, the unintended method is executed in the context of the targeted public project or user.
4. Impact on the Target
Depending on the method that gets invoked, the result can range from relatively benign state changes (useful for detection) to more serious actions such as modification or deletion of public projects and associated user data.
5. Verification
Successful triggering of the vulnerability can be observed through changes in the targeted object’s state, for example unexpected updates or removal of a public project. Patched instances correctly reject the invalid field and return a standard GraphQL validation error.
The existence of a public proof-of-concept increases the risk of automated scanning against unpatched self-managed instances.
Exploitation Flow (High-Level)
Identification
GraphQL Directive
Vulnerability
the Target
No authentication or user interaction is required. The attack is possible against any publicly visible project or user on a vulnerable self-managed instance.
Impact
-
CVE-2026-19478Unauthenticated remote modification or deletion of public projects and user data. This can lead to data loss and potential supply-chain risk on public repositories.
-
CVE-2026-19650Unauthorized GraphQL mutations if a user can be social-engineered into interacting with a crafted request.
Affected and Fixed Versions
The vulnerabilities affect GitLab Community Edition and Enterprise Edition in the following ranges:
- 18.2 before 18.11.11
- 19.0 before 19.0.8
- 19.1 before 19.1.6
- 19.2 before 19.2.4
The issues have been fixed in the following versions:
- 19.2.4
- 19.1.6
- 19.0.8
- 18.11.11
GitLab.com and GitLab Dedicated are already running the patched versions. Organizations running any affected version should upgrade to one of the fixed releases listed above.
MITRE ATT&CK Mapping
| Technique ID | Technique Name | Tactic |
|---|---|---|
| T1190 | Exploit Public-Facing Application | Initial Access |
| T1059 | Command and Scripting Interpreter (GraphQL directive injection) | Execution |
| T1485 | Data Destruction (project / user data deletion) | Impact |
Mitigation and Recommendations
GitLab has released security updates to remediate both vulnerabilities.
- Upgrade to fixed versions depending on the current branch.
- Until the upgrade can be applied, restrict external access to the GraphQL endpoint where feasible.
- Monitor for unusual modifications to public projects or user accounts.
There is no complete workaround for these issues. Applying the vendor security updates is the recommended path to full remediation.
Self-managed GitLab administrators should treat CVE-2026-19478 as an emergency update. The vulnerability requires no authentication and no user interaction, and a public proof-of-concept is available. GitLab.com and GitLab Dedicated customers do not need to take action.
Instantly Fix Risks with Saner Patch Management
Saner patch management is a continuous, automated, and integrated solution that helps you quickly remediate risks, including critical third-party application updates. It supports Windows, Linux, macOS, and 550+ third-party applications.
You can stage patches in a safe testing environment before production deployment and roll back if needed.
Experience the fastest and most accurate patching software here.




