Skip to main content

Gerrit Code Review EUVDEUVD-2026-86476

| CVE-2026-87720 HIGH
Incorrect Authorization (CWE-863)
2026-09-24 Google GHSA-c8r3-7jgc-cm9w
7.6
CVSS 4.0 · Vendor: Google
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-priv user (or use previously-public repo)
  2. Delivery
    Send crafted request with repeated .git suffix (project.git.git)
  3. Exploit
    Bypass single-suffix ProjectCache key normalization
  4. Execution
    Serve stale alias ProjectState within cache window
  5. Impact
    Read 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Gerrit 3.13.0 <3.13.9
Gerrit 2.16.0 <3.12.10
Gerrit 3.14.0 <3.14.3

Affected Packages

euvd gerrit fix: 3.12.10, 3.13.9, 3.14.3

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

Vendor (Google) PRIMARY 7.6 HIGH
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
vuln.today AI 6.8 MEDIUM

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.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (Google).

CVSS VectorVendor: Google

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 24, 2026 - 23:18 EUVD
CVE Published
Sep 24, 2026 - 21:59 cve.org
HIGH 7.6

DescriptionCVE.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.

Executive ViewAI

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.3%
Top 85% exploitable
Prevalence
Medium
widely used enterprise and OSS code-review server, but not universally deployed
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy