Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-priv user (or use previously-public repo)
-
DeliverySend crafted request with repeated .git suffix (project.git.git)
-
ExploitBypass single-suffix ProjectCache key normalization
-
ExecutionServe stale alias ProjectState within cache window
-
ImpactRead private commits or write refs/meta/config to restore owner rights
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated Gerrit account that previously held access to (or ownership of) a project whose read access was later revoked or whose owner rules were removed - the flaw lets that stale access persist. The unauthenticated path applies only if the target repository was previously public. The attacker must send requests referencing the project with repeated terminal '.git' suffixes (e.g., project.git.git) across REST APIs, Gitiles, or SSH Git commands. Exploitation is bounded by the ProjectCache validity window: the stale alias ProjectState is only served until it would normally be evicted, so the attacker must act before natural cache expiry. Affects default configurations of Gerrit 2.16.0-3.12.9, 3.13.0-3.13.8, and 3.14.0-3.14.2; no special non-default feature toggle is required. |
| Impact | This is a credible, high-value authorization flaw (CWE-863) in Gerrit Code Review, reported by Google and confirmed via the official Gerrit issue tracker (issues.gerritcodereview.com/issues/538883789) with vendor-confirmed fixes (3.12.10, 3.13.9, 3.14.3). The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N = 7.6) indicates a network-reachable, low-complexity attack requiring only a low-privileged authenticated account, with a defined attack requirement (AT:P) that maps to the ProjectCache validity window / timing dependency described in the text. Dual impact is significant: high confidentiality (disclosure of private repository content) AND high integrity (durable restoration of revoked project-owner administrative privileges plus writes to refs/meta/config). Countervailing signals lower urgency: no EPSS score, no CISA KEV listing, and no public exploit code are present in the provided data - no public exploit identified at time of analysis. The description also introduces an unauthenticated path ('or an unauthenticated user if the repository was previously public') that is narrower than the base PR:L vector and is condition-gated, so the CVSS PR:L reflects the general authenticated case rather than the edge case. Net: a real priority for organizations running affected Gerrit versions that host private repositories and rely on access revocation, but not evidence of widespread active exploitation - treat as a patch-soon rather than emergency-if-not-exposed decision, weighted up for internet-facing Gerrit instances. |
| Exploit ScenarioDerived | A low-privileged authenticated Gerrit user who previously had access to a project that was later made private (or had owner rules revoked) issues crafted REST API, Gitiles, or SSH Git requests referencing the project with a doubled suffix such as 'project.git.git'. Because Gerrit strips only one terminal '.git' when building the ProjectCache key while JGit's FileKey.lenient resolves the alias to the same canonical bare repo, the stale cached ProjectState is served - letting the attacker read newly created private commits or write to refs/meta/config to restore owner privileges. No public exploit code is identified in the provided data, but the technique is fully described and low-complexity. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 24, 2026
Gerrit Code Review 2.16.0-3.12.9, 3.13.0-3.13.8, and 3.14.0-3.14.2 mishandle project-name normalization, allowing an authenticated user (or an unauthenticated user when the repository was previously public) to keep reading private repository content and to durably restore revoked project-owner administrative privileges. Requests that reference a project with repeated terminal .git suffixes (for example project.git.git) are cached under a different key than the canonical project, so revoking read access or removing owner rules on the canonical name never evicts the stale alias ProjectState during the ProjectCache validity window, permitting reads of newly created private commits and writes to refs/meta/config. No public exploit code has been identified at time of analysis; exploitation requires the attacker to have previously held access to the project and to act before the stale cache entry would naturally expire.
RemediationAI
Upgrade to a vendor-fixed release: Gerrit 3.12.10, 3.13.9, or 3.14.3, as documented in the vendor issue at https://issues.gerritcodereview.com/issues/538883789. Because the defect is in project-name normalization and cache keying rather than in a configurable policy, no configuration change fully closes it, so patching is the primary fix. Where an immediate upgrade is not possible, three compensating controls reduce exposure. First, immediately after any read-permission revocation, removal of project-owner rules, or conversion of a repository from public to private, restart Gerrit or run "gerrit flush-caches --cache projects" so the stale alias ProjectState cannot be served for the remainder of the cache validity window - the trade-off is a brief availability interruption on restart versus a cold-cache performance penalty after a flush. Second, shorten the exposure window by lowering maxAge under the projects cache section of gerrit.config (cache "projects" / maxAge), accepting more frequent filesystem lookups and higher per-request latency. Third, where a reverse proxy fronts Gerrit's HTTP surface, reject requests whose project path contains a doubled terminal .git segment before they reach REST or Gitiles - note that this control does not cover SSH Git commands, which bypass the HTTP layer, and it would also block any project legitimately named with a repeated .git suffix. Restricting or disabling anonymous read access limits the unauthenticated variant of the attack, but recall that path applies only to repositories that were previously public. Finally, audit Gerrit request logs for project paths containing repeated .git suffixes as an indicator of attempted exploitation, and review refs/meta/config history for unexpected writes after any permission change on affected versions.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-863 (Incorrect Authorization) arising from an identifier-canonicalization mismatch. ProjectUtil.stripGitSuffix removes only a single terminal ".git" when constructing the logical key used by the ProjectCache, whereas JGit's FileKey resolution (lenient mode) resolves the doubly-suffixed alias to the same canonical bare repository on disk. Consequently a request for "project.git.git" produces a distinct ProjectCache key ("project.git") that nevertheless maps to the on-disk repository for "project". ProjectCacheImpl's eviction logic keys off the canonical project name, so when an administrator revokes read permission or deletes owner rules on "project", the cached ProjectState for the alias "project.git" survives for the remainder of its validity window. Any access decision served from that stale alias entry reflects the pre-revocation authorization state, which is why the flaw yields both confidentiality impact (reading private commits created after revocation) and integrity impact (writing to refs/meta/config, which can reinstate project-owner privileges). The attack surface spans Gerrit REST APIs, Gitiles, and SSH Git commands, meaning mitigation cannot be limited to a single HTTP path. The vulnerability affects default Gerrit configurations - no non-default feature toggle is needed - and the practical exploitation window is bounded by how long the ProjectCache retains the alias entry before natural eviction. Gerrit's CPE entry (cpe:2.3:a:gerrit:gerrit) is version-unbounded in the feed, so the authoritative version ranges come from the description and the vendor-tracked issue at issues.gerritcodereview.com/issues/538883789.
Know when Gerrit 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Network-reachable low-priv authenticated user (PR:L); dependence on the ProjectCache validity window maps AT:P to AC:H; high confidentiality (private content) and integrity (privilege/config restoration), no availability impact.
Primary rating from Vendor (Google).
CVSS VectorVendor: Google
Lifecycle Timeline
2DescriptionCVE.org
Incorrect Authorization (CWE-863) in project name normalization (ProjectUtil.stripGitSuffix) and ProjectCache eviction logic (ProjectCacheImpl) in Gerrit Code Review versions 2.16.0 through 3.12.9, 3.13.0 through 3.13.8, and 3.14.0 through 3.14.2 allows an authenticated user (or an unauthenticated user if the repository was previously public) to cause unauthorized disclosure of private repository content and durable restoration of revoked project-owner administrative privileges via crafted requests using repeated .git suffixes (such as project.git.git) across REST APIs, Gitiles, or SSH Git commands. Because Gerrit strips only a single terminal .git suffix when constructing the logical ProjectCache key while JGit (FileKey.lenient) resolves the suffixed alias to the same canonical bare repository on disk, revoking read access or removing owner rules on the canonical project name fails to evict the cached alias ProjectState during the cache validity window, enabling reads of newly created private commits or writes to refs/meta/config. This issue is fixed in Gerrit Code Review versions 3.12.10, 3.13.9, and 3.14.3.
Articles & Coverage 1
Executive ViewAI
Gerrit Code Review installations running versions 2.16.0 through 3.12.9, 3.13.0 through 3.13.8, and 3.14.0 through 3.14.2 contain a project-name normalization flaw that allows users who previously held access to a project to keep reading private repository content and to durably restore administrative project-owner rights that were deliberately revoked. This affects any team relying on Gerrit to protect proprietary source code, secrets embedded in history, or regulated codebases, and it undermines the access-revocation controls that security and HR processes depend on during offboarding, contractor transitions, and audit remediation. Leadership should treat this as a high-priority governance risk because it silently defeats access controls rather than producing a visible outage, and no vendor-released patch is currently identified.
No vendor-released patch identified at time of analysis. Interim mitigations: force full ProjectCache invalidation (restart Gerrit) and shorten the cache validity window to the minimum tolerable; block requests containing repeated terminal .git suffixes (e.g. project.git.git) at the reverse proxy or WAF; restrict project creation and renaming to trusted administrators; re-verify and re-apply all revoked read access and removed project-owner rules on canonical project names; audit logs and refs/meta/config for activity via non-canonical aliases; and accelerate migration to a vendor-supported Gerrit release.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
CPU starvation and JVM heap exhaustion in Gerrit Code Review (versions 2.1.6 through 3.12.9, 3.13.0 through 3.13.8, and
Uncontrolled resource consumption in Gerrit Code Review (versions 2.0.19 through 3.12.9, 3.13.0 through 3.13.8, and 3.14
Any git operation is passed through Jetty and a session is created. Rated high severity (CVSS 7.5), this vulnerability i
Incorrect authorization in Gerrit's 'submitted together' feature (versions 2.12 and later) allows an authenticated attac
An information leak vulnerability exists in Gerrit versions prior to 2.14.22, 2.15.21, 2.16.25, 3.0.15, 3.1.10, 3.2.5 wh
An information leak vulnerability exists in Gerrit versions prior to 2.15.21, 2.16.25, 3.0.15, 3.1.10, 3.2.5 where a mis
EUVD-2026-86476
GHSA-c8r3-7jgc-cm9w
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB